什么是拦截器
拦截器也是一个类,可以在action被调用之前和之后执行的代码,而框架的很多功能也是通过拦截器实现的
拦截器的特点
拦截器可以自由组合,可以拦截action的请求,可以在action执行之前和之后执行代码,实现某些功能.
在哪里用拦截器?
Struts2大部分是用拦截器实现的
如:在接收参数,数据验证,文件上传,国际化
应用程序:需在action执行的前后执行特定的功能
action执行时间统计,访问权限管理
action添加功能
action的执行过程是一个递归的过程
Struts-2.0自带的拦截器如参数拦截器等
拦截器器栈
拦截器的配置和使用
实现方法:
1/通过继承AbstractInterceptor实现拦截器类
重写intercept()方法
2/实现Interceptor接口
init方法:初始化拦截器所需要的资源
destroy:释放init中分配的资源
intercept:实现拦截器功能
3/继承MethodFilterInterceptor类
指定拦截的方法和不拦截的方法
拦截器只能拦截action
重写后在sturts配置文件里配置
<interceptors> //拦截器配置块儿
<interceptor name="timeIt" class="cn.zhr.intercept.TimeInterceptor"></interceptor>//拦截器配置
<interceptor-stack name="myIt" >
<interceptor-ref name="timeIt"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>//拦截器栈配置
</interceptors>
<default-interceptor-ref name="timeIt"></default-interceptor-ref>
特别提示:拦截器配置顺序要在开头 ,否则报错.Caused by: org.xml.sax.SAXParseException: 元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*)"。
Ajax使用
1/添加jar包 ,idea里面需要加以一个json插件的包
2/需要在想使用的action所在的package里继承 json-default
3/返回类型type是json,指定返回结果
<result name="json" type="json">
<param name="includePreperties">
house.*
</param>
</result>
public String getJson()throws Exception{
System.out.println("json方法");
house = new House();
house.setHouseId(1);
house.setAddDate(new Date());
house.setHouseType(new HouseType(1,"单身公寓"));
house.setTitle("单身公寓,为你开启爱的空间");
Street street = new Street(1,"中关村大街",new District(1,"海淀区"));
house.setStreet(street);
return "json";
}
<body>
<button id="submit">获取数据</button>
</body>
<script type="text/javascript">
$(submit).bind("click",function(){
$.getJSON("${pageContext.request.contextPath}/house/house!getJson",function(date){
alert(date.house.houseType.typeId);
})
});
</script>
总结我觉得sturts2的ajax使用真累