jaa*_*oer 9 java mapping tomcat annotations servlets
servlet映射有两种方法.第一个是在web.xml中:
<servlet>
<servlet-name>foo</servlet-name>
<servlet-class>com.whatever.foo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>foo</servlet-name>
<url-pattern>/foo</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
第二种方法使用WebServlet批注:
@WebServlet("/foo")
public class foo extends HttpServlet {
...
}
Run Code Online (Sandbox Code Playgroud)
哪一个更好?第一种和第二种方式的优势在哪里?
Moh*_*ami 13
如果您确定使用的是Tomcat 7或更新版本,则web.xml必须声明webapp 符合Servlet 3.0规范,以便让Tomcat扫描并处理注释.否则Tomcat仍将以与Servlet版本匹配的后备模式运行web.xml.Servlet API注释的支持仅在Servlet 3.0(Tomcat 7)中添加.
所以,你的根声明web.xml必须看起来像以下(确保你删除任何DOCTYPE来自web.xml过,否则仍然会被解释成Servlet 2.3的!).
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
Run Code Online (Sandbox Code Playgroud)
此外,URL模式存在细微差别.URL模式/notifications将允许servlet仅在该路径上侦听请求.它不会对带有额外路径的请求产生影响/notifications/list.URL模式/notifications/*将让servlet监听具有额外路径信息的请求.
因此,最小@WebServlet注释应如下所示
@WebServlet("/notifications/*")
Run Code Online (Sandbox Code Playgroud)
其余属性是可选的,因此不一定要使servlet平等运行.
对于servlet 3.x,使用基于java的配置而不是web.xml有什么好处?
它避免重复自己,并通过这样做犯错误.例如,servlet类com.foo.bar.SomeServlet.使用web.xml,您将被迫重新进入此课程web.xml:
<servlet-class>com.foo.bar.Someservlet</servlet-class>
Run Code Online (Sandbox Code Playgroud)
但是等等,你做了一个拼写错误,你只会在运行时发现它.
或者您重命名了一个servlet类,但是您忘记在web.xml中重命名它,并且您只在部署时发现错误.
最后,它们让我们的生活更轻松.您正在创建一个servlet,显然您希望将其映射到某个URL.所以你只需添加一个注释.无需转到另一个文件来添加映射,然后返回到该类,因为您忘记了它的确切名称,然后再次返回该文件.有关servlet的所有内容都在servlet类中.对于过滤器,监听器等也是如此
注释没有所有这些问题.
我希望这可以帮助你!
XML配置:
好处 :
所有映射都位于同一位置,您可以在一个文件中概览所有映射.
缺点:
除了类文件之外,还需要一个单独的文件.
注释配置:
好处 :
映射直接在相关类中描述.
缺点:
您必须打开一个特定的类才能查看其映射.
| 归档时间: |
|
| 查看次数: |
5182 次 |
| 最近记录: |