Struts2(七) Struts2訪問Servlet的API

當接受表單參數,向頁面保持數據時。要用到Struts訪問Servlet 的API 。下面只作參考,有錯誤或不一樣意見能夠發送郵箱2440867831@qq.com  。建議你們看struts文檔,源代碼 java

1.struts2經過ActionContext訪問web

com.opensymphony.xwork2.ActionContext;類有不少方法這裏只列舉幾個經常使用的方法;apache

列舉個小例子api

Struts2的核心配置web.xml 就不作說明了  。前面已經操做過;瀏覽器

Struts.xml服務器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- 2.變量設置 在Struts.xml文件裏面配置 -->
    <!--i18n :國際化 解決post提交亂碼。輸出中文亂碼 省去過濾器字節編碼-->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <constant name="struts.devMode " value="true"></constant>
    <constant name="struts.action.extension" value="action,,"></constant>
        
    <package name="hello" namespace="/" extends="struts-default">
         <!-- 3注意 這裏沒有method屬性 默認對應的是Action類的execute方法 -->
         <action name="Demo1" class="com.sturts2.day02.action.RequestDemo1">
                 <result name="success">/demo2.jsp</result>
         </action>
    </package>
</struts>

RequestDemo1.java      Action類session

 1 public class RequestDemo1  extends ActionSupport{  2  @Override  3     public String execute() throws Exception {  4         //ac 至關於Servlet 的request
 5                 ActionContext ac=ActionContext.getContext();  6                 Map<String ,Object> paramMap=ac.getParameters();  7                 for(String key: paramMap.keySet()){  8                     String [] value=(String[]) paramMap.get(key);  9                     System.out.println(key+"  "+value[0]); 10  } 11                 
12                 ac.put("request1", "張三"); 13                 ac.getSession().put("session1","李四"); 14                 ac.getApplication().put("application1", "王五"); 15         return SUCCESS; 16  } 17 }

demo1.jspapp

<body>
    <h1>訪問Servlet API 方式之一</h1>
    <form action="${pageContext.request.contextPath}/Demo1.action" method="post"> 姓名:<input type="text" name="name"><br/> 年齡:<input type="text" name="age"><br/>
        <input type="submit" value="提交">
    </form>
</body>

demo2.jspjsp

<body>
     <h1>獲取數據</h1> requet: ${request1 } <br/><br/> session: ${session1 } <br/><br/> application: ${application1 } <br/><br/>
</body>

在服務器上運行 ,打開demo1 :ide

輸入數據提交表單: 控制檯顯示

 

 瀏覽器跳轉頁面:

 

 2.經過特定接口訪問

Struts2 的ActionContext訪問Servlet API  沒法直接得到Servlet  API 實例。如下接口能夠直接訪問Servlet  API ;

  • ServletRequestAware  :實現該接口的Action能夠直接訪問web應用的HttpServletRequest
  • ServletResponseAware  :實現該接口的Action能夠直接訪問web應用的HttpServletResponse
  • SessionAware :實現該接口的Action能夠直接訪問web應用的TttpSession
  • ServletContextAware  :實現該接口的Action能夠直接訪問web應用的ServletContex實例
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC  3  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  4  "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <package name="api" namespace="/" extends="struts-default">
 7     
 8          <action name="Demo5Action" class="com.sturts2.day02.b_api.Demo5Action">
 9                  <result name="success" >/api.jsp</result>
10          </action>
11         
12     </package>
13 </struts>

 

3.經過ServletActionContext訪問

藉助ServletActionContext 類,避免action實現ServletRequestAware  ,ServletResponseAware、SessionAware 和ServletContextAware 等 XxxAware接口。但Action直接與ServletAPI耦合,不利於程序的解耦。建議使用ActionContext

代碼以下:

  • static HttpServletResquest getRequest();  獲取Web應用HttpServletResquest對象
  • static HttpServletResponse getResponse();  獲取Web應用HttpServletResponse對象
  • static ServletContext  getServletContext();    獲取Web應用ServletContext對象
  • static PageContext getPageContext();       獲取Web應用pageContext對象

struts.xml配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC  3  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  4  "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6     <package name="api" namespace="/" extends="struts-default">
 7     
 8          <action name="Demo5Action" class="com.sturts2.day02.b_api.Demo5Action">
 9                  <result name="success" >/api.jsp</result>
10          </action>
11          
12                  
13        
14     </package>
15 </struts>

 Action類

package com.sturts2.day02.b_api; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; public class Demo5Action  extends  ActionSupport  implements ServletRequestAware { private HttpServletRequest request; @Override public String execute() throws Exception { System.out.println("原生request:"+request); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request=request; } }

api.jsp

1 <body>
2     request:${request1 } <br/>
3     session:${session1 }   <br/>
4     application:${application1 } <br/>
5     
6 </body>

頁面顯示:

控制檯輸出

相關文章
相關標籤/搜索