Struts2-訪問Servlet API

一、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="登陸" />&nbsp;&nbsp;
    <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對象
發佈了50 篇原創文章 · 獲贊 305 · 訪問量 83萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章