Servlet 3.0 中的三种定义 Servlet 的方式

红薯 发布于 2010/07/21 20:33
阅读 519
收藏 6

今晚没事,对 Servlet 3.0 进行一些简单的探索,有点意思。

在新发布的 Servlet 3.0 规范中,为一个 Web 应用增加一个 Servlet (过滤器、监听器与 Servlet 三者的配置都是等价的)配置有如下三种方式:

  • 1. 编写一个类继承自 HttpServlet,将该类放在 classes 目录下的对应包结构中,修改 web.xml,在其中增加一个 Servlet 声明。这是最原始的方式;
  • 2. 编写一个类继承自 HttpServlet,并且在该类上使用 @WebServlet 注解将该类声明为 Servlet,将该类放在 classes 目录下的对应包结构中,无需修改 web.xml 文件。
  • 3. 编写一个类继承自 HttpServlet,将该类打成 JAR 包,并且在 JAR 包的 META-INF 目录下放置一个 web-fragment.xml 文件,该文件中声明了相应的 Servlet 配置。
    web-fragment.xml 文件示例如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-fragment 
        xmlns=http://java.sun.com/xml/ns/javaee
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
        metadata-complete="true">
        <servlet>
            <servlet-name>fragment</servlet-name>
            <servlet-class>footmark.servlet.FragmentServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>fragment</servlet-name>
            <url-pattern>/fragment</url-pattern>
        </servlet-mapping>
    </web-fragment>
    第三种方式用来发布一些独立的jar包非常有用,省却用户配置的步骤。

第二种方式有个注意事项,通过这种方式定义的 Servlet 只有在有请求的时候才会去初始化,如果你希望在容器启动时自动初始化 Servlet ,那么别无选择,用第一种吧。

加载中
0
前冲
前冲

恩,好文,第一时间支持

0
jobell
jobell

其实对Servlet3.0最感兴趣的还是异步通信!!

0
山哥
山哥

Servlet3.0  现在可以使用了吗?

0
黄勇
黄勇


第二种方式有个注意事项,通过这种方式定义的 Servlet 只有在有请求的时候才会去初始化,如果你希望在容器启动时自动初始化 Servlet ,那么别无选择,用第一种吧。


请问用为何第二种方式不行呢?

能否在@WebServlet注解中使用loadOnStartup=0来实现自动初始化呢?

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部