首先要实现com.opensymphony.xwork2.interceptor.PreResultListener类 并重写里面的方法beforeResult
Java代码
- public class MyListener implements PreResultListener {
- public void beforeResult(ActionInvocation invocation, String resultCode) {
- System.out.println(resultCode);
- }
- }
然后再在拦截器里面调用
Java代码
- invocation.addPreResultListener(new MyListener());
监听器是在这个拦截器完成别的拦截器之后调用的
struts2 Action获得HttpSession,HttpServletRequest,HttpSevletResponse的方法 非IOC方式 这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类
Java代码
- ActionContext ctx = ActionContext.getContext();
- HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
- HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
- //ServletActionContext.APPLICATION;
- //ServletActionContext.SESSION;
- //ServletActionContext.PAGE_CONTEXT;
- //或者
- HttpServletRequest request = ServletActionContext.getRequest ();
主要是这两个类com.opensymphony.xwork2.ActionContext和org.apache.struts2.ServletActionContext都对request等进行了大量的封装,直接调用方法就可以获和
更好一点的IOC方式 action类实现ServletRequestAware接口,并新建一个HttpServletRequest request
Java代码
- public class UserLoginAction extends ActionSupport implements ServletRequestAware{
- public void setServletRequest(HttpServletRequest request) {
- this.request=request;
- }
- 然后可以生成的request得到对象,如request.getRemoteAddr()
- action类实现SessionAware接口,并创建一个MAP对象session
- public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{
- public void setServletRequest(HttpServletRequest request) {
- this.request=request;
- }
- public void setSession(Map session) {
- this.session=session;
}
这些获得HttpServletRequest等对象需要implments的接口都在 org.apache.struts2.interceptor下面 如Apllication的是ApplicationAware 如HttpSession的是SessionAware(struts2的Session都被封装成Map了) 如HttpServletRequest的是ServletRequestAware 如HttpServletResponse的是ServletResponseAware