读书人

基于Annotation的Servlet配备

发布时间: 2012-09-25 09:55:59 作者: rapoo

基于Annotation的Servlet配置

?? ? 传统的 JAVA 企业级应用开发中, Servlet 的配置一直是一件令开发人员头痛的事情。文章使用 Annotation 技术实现的 @Servlet 注解,可以让 Servlet 的配置不再繁杂,只需要简单的标注就可以实现 Servlet 的配置功能,能极大地简化开发人员的工作,也让配置文件更加干净简洁。

??? JAVA EE 规范中规定,在使用 Servlet 开发应用系统时,需要在 web.xml 文件中为每一个 Servlet 配置相关信息。一个大型应用系统中, Servlet 的数量是很庞大的,如果要为每一个 Servlet 都配置上述信息,这无疑是开发人员的噩梦。现在主流的 MVC 框架(如 Struts 、 WebWork ),它们在一定程度上解决了这样繁琐的配置,但这些框架本身就引入了大量的 XML 文件配置。 JDK1. 5 版本之后, JAVA 语言提供了一种叫做 Annotation(JSR250) 的新数据类型,中文译为注解或标注,它的出现为铺天盖地的 XML 配置文件提供了一个完美的解决方案,让 JAVA EE 开发更加方便快速,也更加干净了。

?? ? ?@Servlet 注解的实现

?

在此 service 方法的实现代码中,从 HttpServletRequest 请求对象中得到请求的方式类型( GET/POST )和请求的 URI 。如有请求, http://localhost/testProject/servlet/loginServlet.svt ,此时请求方法类型为 POST , URI 值为 /testProject/servlet/loginServlet.svt 。从 ServletConext 对象中获取到在监听器中保存的 Map 结构,根据 URI 获得一个 Key=” /servlet/loginServlet” ,从 Map 结构中根据此 Key 得到 Value ,此时 Value 就是要请求调用的那个 Servlet 对象实例。再根据前面得到的请求方法类型,能决定调用此 Servlet 对象实例的 doGet 或 doPost 方法。最终客户端发生的后缀为 . svt 请求,经由 ActionServlet 对请求对象( HttpServletRequest )的分析,从而调用相应某 Servlet 的 doGet 或 doPost 方法,完成了一次客户端请求到服务器响应的过程。

通过 @Servlet 注解,我们还可以减少 Servlet 类文件的数量,并且此时不要求类继承或实现 Servlet 任何的类或接口,一个普通的类即可。不过此时注解 @Servlet 不应放在类前面,而应该让它能放在方法前面,需要将 @Servlet 定义时的 @Target(ElementType.TYPE) 改成 @Target(ElementType.METHOD) 。加 @Servlet 注解的方法,名称可以是任意的,但参数必须有 HttpServletRequest 类型及 HttpServletResponse 类型。这是因为我们的方法要对请求和响应做相应的处理。

JAVA 提供的注解,为简化开发人员的工作带来了无限的可能。在 JAVA EE 5 版本中,提供了一些注解的使用来解化开发,而像 Struts2.x 、 Hibernate 、 Spring 等框架中,也开始加了大量的注解,使用这些注解可以极大地简化了配置文件的编写,基本上实现了“零配置”。注解还在面向切面编程( AOP )等领域都有很好的应用。在 JAVA 企业级应用开发中,注解技术将越来越广泛地被使用。

10 楼 lyuehh 2010-09-16 太厉害了,好强啊 11 楼 sarin 2010-09-17 servlet 3 好像已经是注解配置了吧。 12 楼 kidd3166 2010-09-17 不是很理解,你这样的做法和spring的Controller有什么区别
还不是通过你的分发器对标注的Servlet进行选择,反射,转发

如果不通过你的Servlet就可以访问到标注的Servlet那就比较合适可用! 13 楼 forestking 2010-09-17 是挺有意思的,但貌似没什么用。spring有更加成熟和强大的annotation,而且servlet3已经出来了,可以实现web.xml零配置。 14 楼 leejon 2010-09-17 就算没用注解,也可以很少配置啊。
写一个拦截请求的servlet,然后根据请求分发也可以啊。 15 楼 kzwang 2010-09-17 forestking 写道是挺有意思的,但貌似没什么用。spring有更加成熟和强大的annotation,而且servlet3已经出来了,可以实现web.xml零配置。
确实没有很大用处,只是想表达注解可以简化我们很多的配置工作 16 楼 kzwang 2010-09-17 leejon 写道就算没用注解,也可以很少配置啊。
写一个拦截请求的servlet,然后根据请求分发也可以啊。
是的,我在表达一种思路而已 17 楼 liaobin665 2010-09-25 很好很强大

读书人网 >软件架构设计

热点推荐