struts中action实现ServletRequestAware接口,获得request的原因

来源:互联网 发布:python 灰帽子下载 编辑:程序博客网 时间:2024/05/29 06:49

实现了XXXAware接口,就可以拿到XXX。

public abstract class BaseAction extends ActionSupport implements SessionAware ,ServletRequestAware ,ServletResponseAware ,Constants{protected Map<String ,Object> session;protected HttpServletRequest request;protected HttpServletResponse response;@Overridepublic void setSession(Map<String, Object> session) {// TODO Auto-generated method stubthis.session = session;}public void setRequest(HttpServletRequest request) {this.request = request;}public void setServletResponse(HttpServletResponse response){this.response = response;}

package org.apache.struts2.interceptor;import javax.servlet.http.HttpServletRequest;public interface ServletRequestAware {    public void setServletRequest(HttpServletRequest request); }


BaseAction没有直接实现ServletRequest实例,而在ServletRequestAware接口中更不能获得Servlet实例,查阅才发现,是通过interceptor实现的

package org.apache.struts2.interceptor;public class ServletConfigInterceptor extends AbstractInterceptor implements StrutsStatics {    private static final long serialVersionUID = 605261777858676638L;    public String intercept(ActionInvocation invocation) throws Exception {        final Object action = invocation.getAction();        final ActionContext context = invocation.getInvocationContext();        if (action instanceof ServletRequestAware) {            HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);            ((ServletRequestAware) action).setServletRequest(request);        }        if (action instanceof ServletResponseAware) {            HttpServletResponse response = (HttpServletResponse) context.get(HTTP_RESPONSE);            ((ServletResponseAware) action).setServletResponse(response);        }        if (action instanceof ParameterAware) {            ((ParameterAware) action).setParameters((Map)context.getParameters());        }        if (action instanceof ApplicationAware) {            ((ApplicationAware) action).setApplication(context.getApplication());        }                if (action instanceof SessionAware) {            ((SessionAware) action).setSession(context.getSession());        }                if (action instanceof RequestAware) {            ((RequestAware) action).setRequest((Map) context.get("request"));        }        if (action instanceof PrincipalAware) {            HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST);            if(request != null) {                // We are in servtlet environment, so principal information resides in HttpServletRequest                ((PrincipalAware) action).setPrincipalProxy(new ServletPrincipalProxy(request));            }        }        if (action instanceof ServletContextAware) {            ServletContext servletContext = (ServletContext) context.get(SERVLET_CONTEXT);            ((ServletContextAware) action).setServletContext(servletContext);        }        return invocation.invoke();    }}


1 0
原创粉丝点击