java 可插拔注解_servlet3.1规范翻译:第8章 注解和可插拔性

servlet3.1规范翻译:第8章 注解和可插拔性 .

这是Servlet3.0的新特性之一:这是Servlet3.0的新特性之一:

通过Annotation(注解)配置Servlet之前版本的Servlet配置是需要在web.xml中配置:

?servlet> ? servlet-name>

?servler-class>

?load-on-startup> ?init-param> ?param-name>

?param-value> ?/init-param>

?/servlet>

?servlet-mapping> ?servlet-name>

?

url-pattern>

?/url-pattern>

?/servlet-mapping>

而使用Annotation的方式

只需要在java源文件的Servlet类前面加上:

@WebServlet(name=”",urlPatterns={“”},initParams={@WebInitParam(name=”",value=”"),loadOnStartup=1})

这样可以避免了每创建一个Servlet都需要去web.xml中去配置的麻烦,也避免了项目整合是漏掉某些配置。

第8章 注解和可插拔性

本章讨论在web应用中使用的Servlet

3.0规范定义的注解和启用框架和库的可插拔性增强。

8.1 注解和可插拔性

在web应用中,使用注解的类仅当它们位于WEB-INF/classes目录中,或它们被打包到位于应用的WEB-INF/lib中的jar文件中时它们的注解才将被处理。

Web应用部署描述符的web-app元素包含一个新的“metadata-complete”属性。“metadata-complete”属性定义了web描述符是否是完整的,或是否应该在部署时检查jar包中的类文件和web

fragments。如果“metadata-complete”设置为“true”,部署工具必须忽略存在于应用的类文件中的所有servlet注解和web

fragments。如果metadata-complete属性没有指定或设置为“false”,部署工具必须检查应用的类文件的注解,并扫描web

fragments。

兼容Servlet3.0的web容器必须支持下面的注解。

8.1.1 @WebServlet

该注解用于在Web应用中定义Servlet组件。该注解在一个类上指定并包含关于声明的Servlet的元数据。必须指定注解的urlPatterns或value属性。所有其他属性是可选的默认设置(请参考javadoc获取更多细节)。当注解上唯一属性是url模式时推荐使用value,当使用了其他属性时使用urlPatterns属性。在同一注解上同时使用value

urlPatterns属性是非法的。如果没有指定Servlet名字则默认是全限定类名。被注解的sevlet必须指定至少一个url模式进行部署。如果同一个Servlet类以不同的名字声明在部署描述符中,必须实例化一个新的Servlet实例。如果同一个Servlet类使用定义在4-35页的4.4.1节

“编程式添加和配置Servlet”

的编程式API添加到ServletContext,使用@WebServlet注解声明的值必须被忽略,必须创建一个指定名字的Servlet的新的实例。

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

下面是如何使用该注解的一个示例。

代码示例8-1 @WebServlet

注解示例

@WebServlet(”/foo”)

public class CalculatorServlet extends

HttpServlet{

//...

}

下面是如何使用该注解指定更多的属性的一个示例。

代码示例 8-2 @WebServlet

注解示例使用其它指定的注解属性

@WebServlet(name=”MyServlet”,

urlPatterns={"/foo", "/bar"})

public class

SampleUsingAnnotationAttributes extends HttpServlet{

public void doGet(HttpServletRequest

req, HttpServletResponse res) {

}

}

8.1.2 @WebFilter

该注解用于在Web应用中定义Filter。该注解在一个类上指定且包含关于声明的过滤器的元数据。如果没有指定Filter名字则默认是全限定类名。注解的urlPatterns属性,

servletNames 属性 或 value

属性必须被指定。所有其他属性是可选的默认设置(请参考javadoc获取更多细节)。当注解上唯一属性是url模式时推荐使用value,当有使用其他属性时使用urlPatterns属性。在同一注解上同时使用value

和 urlPatterns属性是非法的。

@

WebFilter注解的类必须实现javax.servlet.Filter。

下面是如何使用该注解的一个示例。

代码示例 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

WebListener注解用于注解获得特定web应用上下文中的各种操作事件的监听器。@WebListener注解的类必须实现以下接口:

■javax.servlet.ServletContextListener

■javax.servlet.ServletContextAttributeListener

■javax.servlet.ServletRequestListener

■javax.servlet.ServletRequestAttributeListener

■javax.servlet.http.HttpSessionListener

■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

@WebServlet(name="AnnotationServlet",urlPatterns="/AnnotationServlet")

完成了一个使用注解描述的Servlet程序开发。

Serlvet3.0新特性注解@WebServlet

@WebServlet 用于将一个类声明为

Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为

Servlet。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 vlaue 或者 urlPatterns

通常是必需的,且二者不能共存,如果同时指定,通常是忽略 value 的取值)

@WebServlet有很多的属性:

asyncSupported:声明Servlet是否支持异步操作模式。

description:   Servlet的描述。

displayName: Servlet的显示名称。

initParams: Servlet的init参数。

name:     Servlet的名称。

urlPatterns:   Servlet的访问URL。

value:    Servlet的访问URL。

Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。

像上面的AnnotationServlet可以描述成:

@WebServlet(name="AnnotationServlet",value="/AnnotationServlet")。

也定义多个URL访问:

如@WebServlet(name="AnnotationServlet",urlPatterns=

{"/AnnotationServlet","/AnnotationServlet2"})

或者@WebServlet(name="AnnotationServlet",value=

{"/AnnotationServlet","/AnnotationServlet2"})

再举一例://注解配置

@WebServlet(displayName = "UserServlet" //描述

, name = "UserServlet", //servlet名称

urlPatterns = { "/user" }, //url

loadOnStartup = 1, //启动项

initParams = { @WebInitParam(name = "username", value = "张三")

})//初始化参数

Servlet3.0新特性注解(annotation)登陆示例

该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml

部署描述文件从该版本开始不再是必选的了

下载所需开发环境

JDK7

Eclipse

Apache Tomcat7.0

打开Eclipse,创建一个动态web工程:login

配置tomcat服务器,选择JDK

选择Servlet的版本

编写登陆页面

步骤阅读

编写Servlet

开发Servlet3的程序需要一定的环境支持。Servlet3是Java

EE6规范的一部分,MyEclipse10和Tomcat7都提供了对Java EE6规范的支持。

Tomcat需要Tomcat7才支持Java EE6,Tomcat7需要使用JDK6。

如果使用的MyEclipse的版本较低,没有提供Java

EE6的支持,可以到Oracle官方网站下载JavaEE6的SDK进行安装,或者从Tomcat7的解压目录下的lib文件夹中把所有jar文件引用到我们的项目路径下。(例如:先建一个Java

EE5的web项目,然后把Tomcat7的解压目录下的lib文件夹中的所有jar引入到项目中,再删除Java

EE5的库引用,最后从Tomcat7的解压目录下的conf文件夹下把web.xml模板拷贝到项目,替换掉原来的web.xml)。

Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程。

1、新建一个Web Project,直接选择Java EE6.0。

web.xml文件

注意version="3.0"和http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd。

新建一个Servlet。写上Servlet的Name,然后Next

不需要在web.xml文件中生成Servlet的相关信息。Finish。

这样建好一个Servlet后,在web.xml文件中没有任何关于这个Servlet的描述信息。

使用注解描述Servlet。

@WebServlet(name="AnnotationServlet",urlPatterns="/AnnotationServlet")

完成了一个使用注解描述的Servlet程序开发。

--------------------------------------------------------------------------------

使用@WebServlet将一个继承于javax.servlet.http.HttpServlet的类定义为Servlet组件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值