Java Servlet Specification 3.0 之第八章之注解和插件

                          Annotations and pluggability(注解和插件)


这章讨论了servlet 3.0 规范中的注解定义并增强了一个web应用程序中使用的框架和库的可插性。


8.1  Annotations and pluggability(注解和插件)

          在一个web应用程序中,使用注解的类将使用注解处理,如果类位于WEB-INF/classes目录,或者打成jar包放入这个应用程序的WEB-INF/lib中。


          web应用程序部署描述符在web-app元素下包含了一个新的metadata-complete属性。这个属性定义不管无论web描述符是否完成,或者无论是否jar包的class文件在部署时应该检查注解和web分块。如果这个属性设置为true,部署工具必须忽略这个应用程序的class文件和web分块的现有的任何servlet注解。如果这个属性没有指定或者设置为false,部署工具必须检查应用程序class文件的注解,并且扫描web片段。

 

         下面的注解是支持servlet 3.0规范的。


8.1.1  @WebServlet

            这个注解用于定义一个web应用程序的servlet组件。这个注解指定一个类并且包含了声明的servlet的元数据。urlPatterns或者注解的value属性是必须的。所有其他注解是可选的。推荐使用value,当注解的唯一属性是url 模式并且当也用到其他属性时使用urlPatterns属性。同一个注解上使用value和urlPatterns属性石不合法的。一个servlet默认的名字,如果没有指定,是全路径类名。已注解的servlet必须至少指定一个url模式来部署。如果同样servlet在部署描述中以一个不同的名字声明,则必须实例化这个servlet的一个新的实例。如果同样的servlet类通过程序化API添加到ServletContext中,通过@WebServlet声明的值必须忽略调用并且必须创建由这个名字指定的servlet的新的实例。


           使用@WebServlet类注解的类必须继承javax.servlet.http.HttpServlet类。

          

           下面的例子演示了这个注解如何使用

           CODE EXAMPLE 8-1 @WebServlet 注解例子

          

     @WebServlet(”/foo”)
     public class CalculatorServlet extends HttpServlet{
     	 //...
     }


          下面的例子演示了如何使用注解的多个属性

          CODE EXAMPLE 8-2   @WebServlet 注解例子 使用其他指定的属性注解

          

	@WebServlet(name=”MyServlet”, urlPatterns={"/foo", "/bar"})
	public class SampleUsingAnnotationAttributes extends HttpServlet{
    		public void doGet(HttpServletRequest req, HttpServletResponseres) {

    		}
	}         


8.1.2 @WebFilter

              这个注解用于定义一个web应用程序的过滤器。这个注解指定了一个类并且包含了声明过滤器的元数据。这个过滤器的默认名如果没有指定则是全限定类名。urlPattern属性,servletNames属性或者注解的value属性必须指定。所有其他的属性石可选的。推荐使用value属性,当注解的唯一属性是url 模式并且当也用到其他属性的时候 使用urlPatterns属性。在同一注解上使用这两种属性石非法的。

             

              使用这个注解的类必须实现javax.servlet.Filter类


              下面的例子演示了此注解如何使用

               CODE EXAMPLE 8-3  @WebFilter注解例子

   

       @WebFilter(“/foo”)
       public class MyFilter implements Filter {
    		public void doFilter(HttpServletRequest req, HttpServletResponse res)
       		  {
                     。。。
        	  }
      }



8.1.3  @WebInitParam

           这个注解用于指定初始化参数,这些参数是必须传递给Servlet或者Filter的。其是WebServlet和WebFilter的一个属性。

8.1.4  @WebListener

          这个注解用于注解 一个监听器来获取独特的web应用程序上下文上不同操作的事件。使用此注解的类必须实现下面接口中的一个:

          1    javax.servlet.ServletContextListener

          2    javax.servlet.ServletContextAttributeListener

          3    javax.servlet.ServletRequestListener

          4    javax.servlet.ServletRequestAttributeListener

          5    javax.servlet.http.HttpSessionListener

          6    javax.servlet.http.HttpSessionAttributeListener

          例子:

         

@WebListener
public class MyListener implements ServletContextListener{
    public void contextInitialized(ServletContextEvent sce) {
         ServletContext sc = sce.getServletContext();
         sc.addServlet("myServlet", "Sample servlet","foo.bar.MyServlet", null, -1);
         sc.addServletMapping("myServlet", new String[] {
    "/urlpattern/*" });
    }
}




8.1.5  @MultipartConfig

            这个注解,当指定一个servlet时,表明这个请求是mime/multipart类型的。与这个servlet对应的HttpServletRequest必须是使得mime附件可用,通过getPart和getParts方法来迭代不同的mime附件。javax.servlet.annotation.MultipartConfig的location属性和<multipart-config>的<location>元素被解释为一个绝对路径并默认为javax.servlet.context.tempdir的值。如果指定了一个相对路径,对于tempdir位置也是相对的。路径的相对和绝对是通过java.io.File.isAbsolute来判定的。

           


8.1.6  Other annotations / conventions(其他注解/惯例)

            默认地 所有的程序在其welcome-file-list的列表中有index.htm(1)和index.jsp。描述符可能用于重写这些默认的设置。

            当使用注解的时候,来自不同框架,jar包的Servlet,Listeners的加载顺序是不指定的。如果这个顺序很重要,就查看web.xml和web-fragment.xml文件的模块顺序。顺序只能在部署描述符中指定。



       



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值