當接受表單參數,向頁面保持數據時。要用到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 ;
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
代碼以下:
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>
頁面顯示:
控制檯輸出