基于Struts2.1 annotation的Interceptor代码实例
2010-11-06 21:18
316 查看
查阅了网络上的文章,同时结合自己的实践,将今天的学习结果分享如下,欢迎大家拍砖。
/WEB-INF/lib/下包含以下jar包(但不只这两个)
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar
Interceptor代码如下:
struts.xml文件配置如下:
User action代码如下:
Kind action代码如下:
要点说明:
1. @ParentPackage("kompinInterceptor")必须和struts.xml的package的name一致,否则启动tomcat会报错:
"Unable to find interceptor class referenced by ref-name ..."
2. 如果Action中并不是所有的方法都要auctionStack拦截,参考UserAction的代码:
3. 如果Action中所有的方法都经过同一个拦截器拦截,,参考KindAction的代码:
4. 如果Action中的某些方法需要特定的拦截器拦截,参考UserAction的代码(请留意proShowUser的Action注解与regist的Action注解的不同点):
5. 留意<interceptor-stack name="auctionStack">的定义。
/WEB-INF/lib/下包含以下jar包(但不只这两个)
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar
Interceptor代码如下:
package com.kompin.kind.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class AuthorityInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("Enter AuthorityInterceptor"); Map session = ActionContext.getContext().getSession(); Object userId = session.get("userId"); if (userId == null) { return "login"; } else { return invocation.invoke(); } } }
struts.xml文件配置如下:
<struts> <constant name="struts.118n.encoding" value="GBK"/> <constant name="struts.custom.i18n.resources" value="globalMessages"/> <constant name="struts.convention.action.mapAllMatches" value="true"/> <package name="kompinInterceptor" extends="struts-default"> <interceptors> <interceptor name="authority" class="com.kompin.kind.action.interceptor.AuthorityInterceptor"/> <interceptor-stack name="auctionStack"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="authority"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="auctionStack"/> <global-results> <result name="login">/WEB-INF/jsp/login.jsp</result> <result name="exception">/WEB-INF/jsp/error.jsp</result> </global-results> </package> </struts>
User action代码如下:
package com.kompin.kind.action; import java.util.List; import java.util.Map; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.InterceptorRefs; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.kompin.kind.business.UserBean; import com.kompin.kind.service.UserService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; @ParentPackage("kompinInterceptor") @InterceptorRefs({ @InterceptorRef("defaultStack") }) @Results({ @Result(name="login", location="/WEB-INF/jsp/login.jsp") }) public class UserAction extends ActionSupport { private Integer id; private String name; private String pass; private String email; private UserService userSvc; private List<UserBean> users; private UserBean user; @Action(value="/regist", results={ @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/login.jsp") ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp") ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/regist.jsp") } ) public String regist()throws Exception{ try { if(null == getName() ||null == getPass() || null == getEmail()){ return "input"; } if (userSvc.addUser(getName(), getPass(), getEmail()) > 0) { return "success"; } return "failure"; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); throw new Exception("注册用户出现异常"); } } @Action(value="/proShowUser", interceptorRefs=@InterceptorRef("authority"), results={ @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/viewUser.jsp") ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/failure.jsp") ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/login.jsp") } ) public String show()throws Exception{ try { setUsers(userSvc.findAllUser()); return "success"; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); throw new Exception("显示用户出现异常"); } } ...略... }
Kind action代码如下:
package com.kompin.kind.action; import java.util.List; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.InterceptorRefs; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.kompin.kind.business.KindBean; import com.kompin.kind.service.KindService; import com.opensymphony.xwork2.ActionSupport; @ParentPackage("kompinInterceptor") @InterceptorRefs({ @InterceptorRef("auctionStack") }) @Results({ @Result(name="login", location="/WEB-INF/jsp/login.jsp") }) public class KindAction extends ActionSupport { private KindService kindSvc; private List kinds; private String kindName; private String kindDesc; private KindBean kind; /** * * @param kindSvc */ @Action(value="/proAddKind", results={ @Result(name="success", type="chain", location="proViewKind") ,@Result(name="failure", type="dispatcher", location="/WEB-INF/jsp/addKind.jsp") ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/addKind.jsp") } ) public String addKind()throws Exception{ try { if (kindSvc.addKind(kindName, kindDesc) > 0) { return "success"; } return "input"; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return "input"; } } ...略... }
要点说明:
1. @ParentPackage("kompinInterceptor")必须和struts.xml的package的name一致,否则启动tomcat会报错:
"Unable to find interceptor class referenced by ref-name ..."
2. 如果Action中并不是所有的方法都要auctionStack拦截,参考UserAction的代码:
@InterceptorRefs({ @InterceptorRef("defaultStack") })
3. 如果Action中所有的方法都经过同一个拦截器拦截,,参考KindAction的代码:
@InterceptorRefs({ @InterceptorRef("auctionStack") })
4. 如果Action中的某些方法需要特定的拦截器拦截,参考UserAction的代码(请留意proShowUser的Action注解与regist的Action注解的不同点):
@Action(value="/proShowUser", interceptorRefs=@InterceptorRef("authority"), results={ @Result(name="success", type="dispatcher", location="/WEB-INF/jsp/viewUser.jsp") ,@Result(name="failure", type="disp 4000 atcher", location="/WEB-INF/jsp/failure.jsp") ,@Result(name="input", type="dispatcher", location="/WEB-INF/jsp/login.jsp") } )
5. 留意<interceptor-stack name="auctionStack">的定义。
相关文章推荐
- Struts2.1&Hibernate3.2&Spring2.5集成[基于Annotation]--代码
- 基于Annotation的Struts2.1+Hibernate3.3+Spring2.5整合开发
- 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3)
- java S2SH项目框架Struts2.3+Spring3.1+Hibernate3.6框架搭建整合以及实例demo代码分享
- 基于Python实现的扫雷游戏实例代码
- ssh2项目整合 struts2.1+hibernate3.3+spring3 基于hibernate注解和struts2注解
- 基于vue2框架的机器人自动回复mini-project实例代码
- Spring MVC基于注解配置入门教程及其代码实例
- 通过SpringMVC整合基于注解的JPA的实例教程代码下载
- mybatis interceptor 处理查询参数及查询结果的实例代码
- 实例解析Struts 2.1与Sping、Hibernate集成
- 基于python requests模块的HTTP接口测试(可做爬虫)实例代码
- Java编程基于快速排序的三个算法题实例代码
- 基于C#实现的HOOK键盘钩子实例代码
- Java Annotation详解及实例代码
- Spring基于事件驱动模型的订阅发布模式代码实例详解
- 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (1)
- java如何实现基于opencv全景图合成实例代码
- 2.Android注解-编译时生成代码 APT(Annotation Processing Tool ) 实例说明
- Spring基于事件驱动模型的订阅发布模式代码实例详解