表单页面如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>登陆表单</h1>
<form action="${pageContext.request.contextPath }/user/login1.action" method="post">
请输入您的姓名: <input type="text" name="username" />
<input type="submit" value="提交" />
</form>
<hr/>
<form action="${pageContext.request.contextPath }/user/login2.action" method="post">
请输入您的姓名: <input type="text" name="username" />
<input type="submit" value="提交" />
</form>
<hr/>
<form action="${pageContext.request.contextPath }/user/login3.action" method="post">
请输入您的姓名: <input type="text" name="username" />
<input type="submit" value="提交" />
</form>
</body>
</html>
1、 在Action 中解耦合方式 间接访问 Servlet API --------- 使用 ActionContext对象
在struts2 中 Action API 已经与 Servlet API 解耦合 (没有依赖关系 )* Servlet API 常见操作 : 表单提交请求参数获取,向request、session、application三个范围存取数据
actionContext = ActionContext.getContext();
1) actionContext.getParameters(); 获得所有请求参数Map集合
2) actionContext.put("company", "****"); / actionContext.get("company") 对request范围存取数据
3) actionContext.getSession(); 获得session数据Map,对Session范围存取数据
4) actionContext.getApplication(); 获得ServletContext数据Map,对应用访问存取数据
具体代码如下:
public class LoginAction1 extends ActionSupport{
@Override
public String execute() throws Exception {
ActionContext actionContext = ActionContext.getContext();
// 1、 获取请求参数
Map<String, Object> parameters = actionContext.getParameters();
String[] value = (String[]) parameters.get("username"); // request.getParameter("username")
System.out.println("username : " +value[0]);
// 2、读取request的Attribute
actionContext.put("company", "**公司"); // request.setAttribute
System.out.println(actionContext.get("company")); // request.getAttribute
// 3、存取Session的Attribute
Map<String, Object> sessionMap = actionContext.getSession();
sessionMap.put("age", 20);// session.setAttribute
System.out.println(sessionMap.get("age")); // session.getAttribute
// 4 存取Application的Attribute
Map<String, Object> applicationMap = actionContext.getApplication();
applicationMap.put("info", "要下雨"); // application.setAttribute
System.out.println(applicationMap.get("info")); // application.getAttribute
return SUCCESS;
}
}
2、 使用接口注入的方式,操作Servlet API (耦合)
ServletContextAware : 注入ServletContext对象
ServletRequestAware :注入 request对象
ServletResponseAware : 注入response对象
* 程序要使用哪个Servlet的对象,实现对应接口
public class LoginAction2 extends ActionSupport implements ServletRequestAware, ServletContextAware {
private HttpServletRequest request;
private ServletContext context;
@Override
public String execute() throws Exception {
// 1 获得请求参数
System.out.println(request.getParameter("username"));
// 2 存取request
request.setAttribute("company", "**公司");
// 3 存取Session
request.getSession().setAttribute("age", 18);
// 4 存取Application
context.setAttribute("info", "已经下雨了");
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对象
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 super.execute();
}
}