方式一;使用核心类:ServletActionContext
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.ServletActionContext; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class LoginAction { Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); private HttpServletRequest request; private HttpServletResponse response; //alt+insert public LoginAction(){ request = ServletActionContext.getRequest(); response=ServletActionContext.getResponse(); } public String index(){ String uid=request.getParameter("uid"); String uname=request.getParameter("uname"); String upwd=request.getParameter("upwd"); HttpSession session=request.getSession(); //ServletContext对象的作用是在整个Web应用的动态资源直接共享数据 final ServletContext servletContext=request.getSession().getServletContext(); session.setAttribute("uid",uid); request.setAttribute("uname",uname); logger.trace("uname:"+uname); logger.trace("upwd:"+upwd); logger.trace("我来了"); return "index"; } //打开新增页面 public String add(){ logger.trace("进入新的页面"); return "add"; } //做新增页面的操作 public String doAdd(){ logger.trace("执行新增的操作"); return "doAdd"; } }
方式二:实现2个接口 ServletRequestAware ServletResponseAware 注入的概念
第一次调用你要访问的方法时,都会先执行 setServletRequest setServletResponse 这两个方法
package com.oracle.action; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Login2Action implements ServletRequestAware,ServletResponseAware{ Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); private HttpServletRequest request; private HttpServletResponse response; public String index(){ String uname=request.getParameter("uname"); logger.trace(uname); logger.trace("我是第3个执行"); return "index"; } public void setServletRequest(HttpServletRequest httpServletRequest) { logger.trace("我先执行。。。。。。。。。。。。"); this.request=httpServletRequest; } public void setServletResponse(HttpServletResponse httpServletResponse) { logger.trace("我第2个执行。。。。。。。。"); this.response=httpServletResponse; } }
方式三:使用Map模拟第一种方式,使用来模拟HttpServletRequest类 放东西
使用核心类:
ActionContext
package com.oracle.action; import com.opensymphony.xwork2.ActionContext; import java.util.Map; public class Login3Action { private Map<String,Object> request;//httpServletRequest private Map<String,Object> session;//httpsession private Map<String,Object> application;//servletContext //使用map的方式 只能往页面传递参数 不能像httpservletrequest httpsession 使用它们的方法 public Login3Action(){ request= (Map<String, Object>) ActionContext.getContext().get("request"); session=ActionContext.getContext().getSession(); application=ActionContext.getContext().getApplication(); } public String index(){ /* 注意:使用的是put*/ request.put("uname","糖宝"); session.put("usex","虫"); return "index"; } }
注意:使用的是put
方式四:struts2使用map模拟的第2种方式 实现接口RequestAware,SessionAware,ApplicationAware
public class Login4Action implements RequestAware,SessionAware,ApplicationAware {
private Map<String,Object> request;
private Map<String,Object> session;
private Map<String,Object> application;
public String index()
{
request.put("uname","李四");
session.put("usex","女");
return "index";
}
public void setApplication(Map<String, Object> map) {
this.application=map;
}
public void setRequest(Map<String, Object> map) {
this.request=map;
}
public void setSession(Map<String, Object> map) {
this.session=map;
}