ServletRequestAware: 感知HttpServletRequest对象;
ServletResponseAware:感知HttpServletResponse对象;
ServletContextAware: 感知ServletContext对象;
struts2框架(servletConfig拦截器(优先于Action执行))会判断当前Action是否实现感知接口,不推荐,和ServletAPI耦合严重
//实现感知接口方式: 和ServletAPI耦合严重
/*
* struts2框架(servletConfig拦截器(优先于Action执行))会判断当前Action是否实现感知接口,
* 是则通过set方法获取对应的ServletAPI
*/
public class UserAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
HttpServletRequest request;
HttpServletResponse response;
ServletContext application;
public String login() {
Map params = request.getParameterMap();
for (Map.Entry entry : params.entrySet()) {
System.out.println("key:" + entry.getKey() + ", value:" + Arrays.toString(entry.getValue()));
}
return "success";
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request = arg0;
}
@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
@Override
public void setServletContext(ServletContext context) {
this.application = context;
}
}
方式二: 通过ServletActionContext工具类:
通过ServletActionContext类中的静态方法,得到Servlet相关的Api
如果用参数来接受 依然和ServletAPI有耦合, 不接受直接用则不耦合。推荐使用
//通过ServletActionContext工具类: 和ServletAPI耦合严重
public class UserAction extends ActionSupport {
public String login() {
// 如果用参数来接受 依然和ServletAPI有耦合, 不接受直接用则不耦合。。
//HttpServletRequest request = ServletActionContext.getRequest();
Map params = ServletActionContext.getRequest().getParameterMap();
for (Map.Entry entry : params.entrySet()) {
System.out.println("key:" + entry.getKey() + ", value:" + Arrays.toString(entry.getValue()));
}
//获得 session对象
ServletActionContext.getRequest().getSession().setAttribute("username", "admin");;
//获得response对象
ServletActionContext.getResponse();
//获得application对象
ServletActionContext.getServletContext();
//获取当前项目的绝对路径
String realPath = ServletActionContext.getServletContext().getRealPath("");
System.out.println(realPath);
//获得远程的ip地址: 127.0.0.1
System.out.println(ServletActionContext.getRequest().getRemoteAddr());
return "success";
}
}
方式三: 通过ActionContext工具类: Struts2将作用域对象重新使用Map集合进行了封装,所以现在操作作用域中的共享数据就是直接操作对应的Map集合, 存取值比较方便, 推荐使用
在ActionContext中把request,session,application三大作用域都作为Map对象.
1):获取请求参数.
原始:Map params = request.getParameterMap();
现在:Map params = ctx.getParameters();
2):操作request作用域:
原始:request.setAttribute(String name, Object value);
Object val = request.getAttribtue(String name);
现在:ctx.put(String key,Object value);
Object val = ctx.get(String name);
3):操作session作用域:
原始:HttpSession session =request.getSession();
现在:Map session = ctx.getSession();
4):操作servletContext(application)作用域:
原始:ServletContext ctx = request.getServletContext();
现在:Map app = ctx.getApplication();
//通过ActionContext工具类: 完全和ServletAPI不耦合
public class UserAction extends ActionSupport {
public String login() {
//获取ActionContext对象
ActionContext actionContext = ActionContext.getContext();
//获取所有请求值
Map params = actionContext.getParameters();
for (Map.Entry entry : params.entrySet()) {
System.out.println("key:" + entry.getKey() + ", value:" + Arrays.toString((String[])entry.getValue()));
}
//获得request作用域中的值
Map request = (Map) actionContext.get("request");
Map session = actionContext.getSession();
session.put("username", "admin");
session.get("username");
Map application = actionContext.getApplication();
return "success";
}
}