发布一篇怎样在基于注解作风的Spring-MVC中利用拦阻器
什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net网页编程的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。Spring-MVC怎样利用拦阻器,官方文档只给出了非注解作风的例子。那末基于注解作风怎样利用拦阻器呢?
基于注解基础上有2个可以使用的界说类,分离是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
1、DefaultAnnotationHandlerMapping
DefaultAnnotationHandlerMapping自己撑持自界说拦阻器,只需按以下举行设置:
1 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
2 <property name="interceptors">
3 <list>
4 <bean class="packageName.XXXInterceptor" />
5 </list>
6 </property>
7 </bean>
Interceptor的界说为:
1 public class XXXInterceptor extends HandlerInterceptorAdapter {
2 @Override
3 public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) {
4
5 String className = handler.getClass().getName();// packageName.ClassName
6 if (Error) {
7 return false;
8 }
9 return true;
10 }
11 }
2、AnnotationMethodHandlerAdapter
今朝,笔者没找到怎样给AnnotationMethodHandlerAdapter设置自界说Interceptor的办法,可是有个customArgumentResolver能够使用一下,来充任Interceptor。
1 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
2 <property name="customArgumentResolver">
3 <bean class="packageName.XXXResolver"/>
4 </property>
5 </bean>
Resolver的界说为:
1 public class XXXResolver implements WebArgumentResolver {
2
3 @Override
4 public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) throws Exception {
5
6 String className = methodParameter.getMethod().getDeclaringClass().getName();// packageName.ClassName
7
8 // 怎样获得Response和Request
9 HttpServletResponse resp = (HttpServletResponse) webRequest.getNativeResponse();
10 HttpServletRequest req = (HttpServletRequest) webRequest.getNativeRequest();
11
12 if (Error) {
13 if (!resp.isCommitted()) resp.sendError(ERROR_STATUS);
14 }
15 return UNRESOLVED;
16 }
17 }
18
细心的人会看出,第二种办法实在基本不是拦阻。实在第二种只是在映照Controller,挪用办法的时分,给每个办法的参数增添了一个切点。
上例在堕落的时分往HttpServletResponse写毛病形态,来关照web容器举行毛病重定向,到达了拦阻器的感化。
这么做有一个弱点,就是每一个参数都有本人的切点,好比办法有3个参数就会调3次resolveArgument。为了不堕落,必要判别一下resp.isCommitted。
customArgumentResolver的初志不是用来做Interceptor的,但有些情况却不能不利用它,好比部署在GAE上。
GAE是不撑持DefaultAnnotationHandlerMapping的,由于此类用到了org.springframework.beans.BeanUtils.findEditorByConvention,这个办法会挪用java.lang.ClassLoader.getSystemClassLoader,而这恰是GAE所不同意的。
PS:
文中提到软件的版本:
spring-2.5.X
googleappengine-1.2.5
java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
页:
[1]