Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat:Servlet映射与WebServlet注释_Java_Tomcat_Servlets_Annotations_Mapping - Fatal编程技术网

Java Tomcat:Servlet映射与WebServlet注释

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映射有两种方法。 第一个在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>

哪一个更好?第一种方法和第二种方法的优点在哪里?

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>