Java Tomcat:Servlet映射与WebServlet注释
servlet映射有两种方法。 第一个在web.xml中:Java Tomcat:Servlet映射与WebServlet注释,java,tomcat,servlets,annotations,mapping,Java,Tomcat,Servlets,Annotations,Mapping,servlet映射有两种方法。 第一个在web.xml中: <servlet> <servlet-name>foo</servlet-name> <servlet-class>com.whatever.foo</servlet-class> </servlet> <servlet-mapping> <servlet-name>foo</servlet-name> &
<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>
哪一个更好?第一种方法和第二种方法的优点在哪里?XML配置: 优点: 所有映射都位于同一位置,您可以在一个文件中对所有映射进行概述 缺点: 除了类文件之外,还需要一个单独的文件 注释配置: 优点: 映射直接在相关类中描述 缺点: 您必须打开特定类才能查看其映射。如果您确定使用的是Tomcat 7或更高版本,则必须声明webapp的
web.xml
符合Servlet 3.0规范,以便让Tomcat扫描和处理注释。否则,Tomcat仍将以与web.xml
中的Servlet版本相匹配的回退模式运行。对ServletAPI注释的支持仅在Servlet3.0(Tomcat7)中添加
因此,web.xml
的根声明必须如下所示(确保也从web.xml
中删除任何DOCTYPE
,否则它仍将被解释为Servlet 2.3!)
其余的属性是可选的,因此不必强制让servlet平等地运行
对servlet 3.x使用基于java的配置而不是web.xml有什么好处?
这样做可以避免重复你自己,避免犯错误。servlet类是,例如,com.foo.bar.SomeServlet
。使用web.xml
,您必须在web.xml
中重新输入此类:
<servlet-class>com.foo.bar.Someservlet</servlet-class>
com.foo.bar.Someservlet
但是,等等,您输入了一个错误,您只能在运行时发现它
或者重命名一个servlet类,但是忘记在web.xml中重命名它,并且只在部署时发现错误
最后,它们让我们的生活更轻松。您正在创建一个servlet,并且显然希望将其映射到某个URL。所以您只需添加一个注释。无需转到另一个文件来添加映射,然后返回到类,因为您忘记了它的确切名称,然后再次返回到该文件。关于servlet的所有内容都在servlet类中。对于过滤器、侦听器等也是如此
注释没有所有这些问题
我希望这对你有帮助
<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">
@WebServlet("/notifications/*")
<servlet-class>com.foo.bar.Someservlet</servlet-class>