1.使用ActionContext对象 ——以解耦合的方式来访问Servlet API
ActionContext actionContext = ActionContext.getContext();
1)actionContext.getParameters();
//获取所有请求参数
2)actionContext.put("company", "公司"); / actionContext.get("company");
//对request范围内存取数据
3)actionContext.getSession();
//获取session数据Map,对session范围内存取数据
4)actionContext.getApplication();
//获取ServletContext数据Map,对应访问存取数据
action:
public class ServletAPIAction extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("访问到了action,正在 处理请求");
System.out.println("hello world!!! struts2");
ActionContext actionContext = ActionContext.getContext();
//1.获取请求参数
Map<String,Object> par = actionContext.getParameters();
Object value = par.get("name");
System.out.println(value);
//2.读取request的Attribute
actionContext.put("request", value);
System.out.println(actionContext.get("request"));
//3.存取session的Attribute
Map<String, Object> sessionMap = actionContext.getSession();
sessionMap.put("session",value);
System.out.println(sessionMap.get("session"));
//4.存取Application的Attribute
Map<String,Object> applicationMap = actionContext.getApplication();
applicationMap.put("application", value);
System.out.println(applicationMap.get("application"));
return SUCCESS;
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="${pageContext.request.contextPath}/servletAPI.action">
username:<input type="text" name="name"><br>
<input type="submit" value="login">
</form>
</body>
</html>
action.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h6>request:${requestScope.request}</h6>
<h6>session:${sessionScope.session}</h6>
<h6>application:${applicationScope.application}</h6>
</body>
</html>
struts.xml中添加
<action name="servletAPI" class="luu.ServletAPIAction" method="execute">
<result name="success">action.jsp</result>
</action>
访问http://localhost:8080/index.jsp 输入名字然后点击提交,跳转到action.jsp页面,页面显示
2.使用IOC接口注入的方式,操作Servlet API
ServletContextAware(接口):注入ServletContext对象
ServletRequestAware(接口): 注入request对象
ServletResponseAware(接口):注入response对象
使用哪个接口就实现哪个接口即可。
action
public class LoginAction2 extends ActionSupport implements ServletRequestAware,ServletContextAware{
private HttpServletRequest request;
private ServletContext context;
@Override
public String execute() throws Exception {
//获取请求参数
System.out.println(request.getParameter("username"));
//存取request
request.setAttribute("company", "公司1234");
//存取session
request.getSession().setAttribute("age", 25);
//存取Application
context.setAttribute("info", "1243567");
return SUCCESS;
}
@Override
//struts2会自动将request对象设置进来
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@Override
public void setServletContext(ServletContext context) {
this.context = context;
}
}
3.在Action中直接通过ServletActionContext获得Servlet API
ServletActionContext.getRequest()
: 获得request对象(session) ServletActionContext.getResponse()
:获得response对象 ServletActionContext.getServletContext()
:获得ServletContext对象
静态方法没有线程问题,ThreadLocal
public class LoginAction3 extends ActionSupport{
@Override
public String execute() throws Exception {
//1.获取请求参数
System.out.println(ServletActionContext.getRequest().getParameter("username"));
//2.保存request范围数据
ServletActionContext.getRequest().setAttribute("company", "公司");
// 3 保存session 范围数据
ServletActionContext.getRequest().getSession().setAttribute("age", 19);
// 4 保存application范围数据
ServletActionContext.getServletContext().setAttribute("info", "雨很大");
return SUCCESS;
}
}