Action访问servletAPI,获取Map类型的servlet元素
1,取得Map类型的request,session,application:
private Map<String ,Object> request;
pirvate Map<String,Object> session;
private Map<String ,Object> application;
this.request=(Map)ActionCOntext.getContext().get("request");
this.application=ActionContext.getContext().getApplication();
this.request.put("reqAttr","reqDirect");
this.session.put("sessionAttr","sessionAttr");
this.application.plut("applicationAttr","aapplicationAttr");
this.session=ActionContext.getContext().getSession();
jsp:访问通过EL:reqAttr:${requestScope.reqAttr} ssessionAttr:${sessionScopoe.ssessionAttr} application:${applicationScope.applicatgionAttr}
2,通过IOC,DI获取
通过注入方式实现接口:requestAware,SessionAware,applicatioinAware
首先实现其方法:public void setRequest(Map<String,Object> request){
this.request=request;
}
public void setSession(Map<String,Object> session){
this.session=session;
}
public void setApplication(Map<String,Object> application){
this.application=application;
}
获取真实的servletAPI类型的servlet元素
privaete HttpServletRequset request;
prjivaet HttpSession session;
pirvaet HttpSevletResponse response;
private ServletContext application;
this.request=ServletActionCOntext.getRequest();
this.resposne=ServletActionCOntext.getResponse();
this.session=this.request.getSession();
this.application=ServletActionContext.getServletContext();
this.request.setAttrivute("reqttr",reqattr);
this.session.setAttribute("sessionAttr",sessionAttr);
this.application.setAttribute("applicationAttr","applicationAttr");
PrintWriter out=resposne.getWriter();
out.print("Hello Resposne");
out.flush();
out. close();
System.out.println("testActon");
return null;主要是针对ajax停止运行
控制反转:继承 ActionSupport 实现 servletRequestAware,ServletResposneAware,ServletContetxt
public void setServletRequest(HttpServletRequest request){
this.request=request;
}
public void setServletResponse(HttpServletResponset response){
this.response=response;
}
dispatcher:forward方式,服务器端调整
redirect:客户端调整
chain:action转发,forward方式,服务器端跳转action
redirectAction:客户端跳转action
全局result:<global-results>
<result name="main">/index.jsp</result>
</global-results>
Redirect和Dispatcher 区别
使用forward是服务跳转,浏览器不知道它所请求的具体资源来源,浏览器的地址栏不会变;
使用redirect,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。
request.getRequestDispatcher("test.jsp").forward(request, response);//转发到test.jsp
response.sendRedirect("test.jsp");//重定向到test.jsp
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
forward,转发页面和转发到的页面可以共享request里面的数据.
redirect,不能共享数据.