一,获取方式
从Servlet容器中获取的方法
与Servlet容器无关的获取方法
IoC方式
非Ioc方式
二,获取方法
2.1 与servlet无关:
2.1.1 非IOC模式
Action代码
//private ActionContext context ;//该方法还可以取得值栈(getValueStack()),使用push(obj)往值栈中放数据
private Map request;
private Map session ;
private Map application ;
public LoginAction1(){
request = (Map)ActionContext.getContext().get("request"); //获取request
session = ActionContext.getContext().getSession(); //取得session
application = ActionContext.getContext().getApplication(); //取得application
request.put("r1","r1");
session.put("i1","i1");
application.put("a1","a1");
return SUCCESS;
}
JSP代码
<s:property value="#request.r1" />|<%=request.getAttribute("r1") %><br>
<s:property value="#session.i1" />|<%=session.getAttribute("i1") %><br>
<s:property value="#application.a1" />|<%=application.getAttribute("a1") %><br>
<s:debug></s:debug>
//后台使用的是Map类型的request/session/application,前台可以使用httpServletRequest类型的request对象及其他对象接收到,说明struts2肯定帮我们在Map 和Http之间建立了某种关联
2.1.2 IOC模式(理论上最常用)
Action代码
//DI dependency injection(依赖注入)
//IOC(注射方式) inverse of control(控制反转)
public classLoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
private Map<String,Object> request;//依赖注入,控制反转
private Map<String,Object> session;
private Map<String,Object> application;
public voidsetApplication(Map<String, Object> arg0) {
this.application = arg0;
}
public voidsetSession(Map<String, Object> arg0) {
this.session = arg0;
}
public voidsetRequest(Map<String, Object> arg0) {
this.request = arg0;
}
request.put("r1","r1");
session.put("i1","i1");
application.put("a1","a1");
return SUCCESS;
JSP代码(同上)
2.2 与servlet有关:
2.2.1 非IOC模式(个人认为最常用)
public class LoginAction3 extends ActionSupport{
private HttpServletRequest request;
private HttpSession session;
private ServletContext application;
public LoginAction3(){
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
}
}
2.2.2 IOC模式
public classLoginAction4 extends ActionSupport implements ServletRequestAware,
SessionAware,ServletContextAware {
private HttpServletRequest request;
private Map session; // 此处是Map类型的
private ServletContext application;
@Override
public String execute() throws Exception {
request.setAttribute("r1", "r1");
session.put("i1","i1");
application.setAttribute("a1", "a1");
return super.execute();
}
public voidsetServletContext(ServletContext arg0) {
this.application = arg0;
}
public voidsetSession(Map<String, Object> arg0) {
this.session = arg0;
}
public void setServletRequest(HttpServletRequestarg0) {
this.request = arg0;
}
}