一、ActionContext
服務器端保存數據的作用域爲request、session、application,對應的Servlet API分別是HttpServletRequest、HttpSession、ServletContext。在Struts2中,我們可以使用ActionContext類獲取以上對象
- ActionContext常用方法:
1、getContext():靜態方法、獲取當前ActionContext實例
2、getSession():返回一個模擬session作用域的Map對象
3、getApplication():返回一個模擬application作用域的Map對象
4、get(String key):傳入參數”request”,可以返回一個模擬request作用域的Object類型對象
5、getParameters():返回一個Map對象,該對象中保存了瀏覽器上傳的參數
使用示例(JavaBean方式):
- 登陸頁面
<form action="servletLogin" method="post">
用戶名:<input type="text" name="user.loginname"/><br/>
用戶密碼:<input type="password" name="user.password" /><br/>
<input type="submit" value="登陸" />
<input type="reset" value="重置" >
</form>
</body>
- action配置
<action name="servletLogin" class="com.pb12.demo01.LoginAction" method="login">
<result>/jsp/12_使用ActionContext訪問Servlet的API/result.jsp</result>
</action>
- action類
public class LoginAction extends ActionSupport {
private User user;
public String login() {
//獲取Session作用域對象
Map<String, Object> session = ActionContext.getContext().getSession();
//把用戶登陸名存入session
session.put("session_loginname", user.getLoginname());
//獲取request作用域對象
Map<String, Object> request = (Map<String, Object>) ActionContext
.getContext().get("request");
//將用戶登錄名放入request作用域
request.put("request_loginname", user.getLoginname());
//獲取application對象
Map<String, Object> application = ActionContext.getContext().getApplication();
//將用戶登錄名放入application對象
application.put("application_loginname", user.getLoginname());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
- 結果頁面
<body>
<!-- session作用域 -->
session:<%=session.getAttribute("session_loginname") %><br/>
<!-- request作用域 -->
request:<%=request.getAttribute("request_loginname") %><br/>
<!-- application作用域 -->
application:<%=application.getAttribute("application_loginname") %>
</body>
結果:
二、以IoC的方式實現
- action類關鍵代碼、其餘代碼同上
public class LoginAction implements RequestAware, SessionAware, ApplicationAware {
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
private User user;
@Override
public void setApplication(Map<String, Object> arg0) {
//注入appliction
this.application = arg0;
}
@Override
public void setSession(Map<String, Object> arg0) {
//注入session
this.session = arg0;
}
@Override
public void setRequest(Map<String, Object> arg0) {
//注入request
this.request = arg0;
}
public String login() {
//把用戶登陸名存入session
session.put("session_loginname", user.getLoginname());
//將用戶登錄名放入request作用域
request.put("request_loginname", user.getLoginname());
//將用戶登錄名放入application對象
application.put("application_loginname", user.getLoginname());
return "success";
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
基於此代碼我們可以封裝個BaseAction類用於繼承,這樣就不用每個Action類都寫這些代碼了
public class BaseAction extends ActionSupport implements RequestAware,
SessionAware, ApplicationAware {
//HttpServletRequest
protected Map<String, Object> request;
//HttpSession
protected Map<String, Object> session;
//application
protected Map<String, Object> application;
@Override
public void setApplication(Map<String, Object> arg0) {
this.application = arg0;
}
@Override
public void setSession(Map<String, Object> arg0) {
this.session = arg0;
}
@Override
public void setRequest(Map<String, Object> arg0) {
this.request = arg0;
}
}
三、ServletActionContext
Struts2提供了ServletActionContext來獲取原始的Servlet API
- 該對象提供了一些方法:
1、getRequest():獲取HttpServletRequest對象
2、getResponse():獲取HttpServletResponse對象
3、getServletContext():獲取ServletContext對象
4、getPageContext():獲取PageContext對象