struts2的action中用out

在java開發中,有時在Struts2的action方法中僅須要直接輸出一些文本信息,好比ajax請求,返回僅僅須要一些文本信息便可,Struts2一樣支持,首先編寫action類,在action類的方法中獲得輸出流而後進行文本輸出,而後在struts2的配置文件中配置action,[後面步驟其實可不用]若有result則設置其type屬性設置爲plainText,即html

 

[html]  view plain copy
 
  1. <result name="xName" type="plainText">...</result>  

同時在result元素中給action設置一些參數便可完成,具體步驟分下面兩種方案以下:java

 

方案一:[常見,不推薦使用]ajax

1,在Struts配置文件中配置action
便於理解,首先看struts2的配置文件(實際配置文件應該是最後一步完成的), 其中僅僅定義一個action,注意result元素的各個屬性和內部的param元素;apache

 

 

[html]  view plain copy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   
  3.  "http://struts.apache.org/dtds/struts-2.1.dtd">  
  4. <struts>  
  5.     <package name="myStruts2" extends="struts-default" namespace="/">  
  6.         <action name="testAction" class="com.xxxName.actions.TestAction" method="myExecute">  
  7.             <result name="success" type="plainText">  
  8.                 <!-- 該name="success"的result必須有 -->  
  9.                 <param name="charSet">UTF-8</param>  
  10.                 <!-- 設置輸出字符編碼,防止英文和數字之外的字符(如中文)出現亂碼  -->  
  11.                 <param name="location">/testout.jsp</param>  
  12.                 <!-- 設置依附的本地文件,該文件必須實際存在,且路徑指向正確;但該文件內容能夠爲空,僅起本地依附做用-->  
  13.             </result>           
  14.         </action>  
  15.     </package>  
  16. </struts>  


2,創建本地依附文件服務器

 

在合適路徑下建立一個JSP文件,提供action進行依附,該文件內容能夠爲空,也可含HTML元素等,但實際都不用到,僅僅提供action進行本地依附做用,可多個action共享該文件;

3,Action類文件編寫jsp

[java]  view plain copy
 
  1. package com.xxxName.actions;  
  2. import java.io.IOException;  
  3. import java.io.PrintWriter;  
  4. import java.util.Date;  
  5. import javax.servlet.ServletException;  
  6. import org.apache.struts2.ServletActionContext;  
  7. import com.opensymphony.xwork2.ActionSupport;  
  8.   
  9. public class TestAction extends ActionSupport{  
  10.     private String contentType = "text/html;charset=utf-8";       
  11.     public String myExecute() throws ServletException, IOException{  
  12.         //指定輸出內容類型和編碼  
  13.         ServletActionContext.getResponse().setContentType(contentType);   
  14.         //獲取輸出流,而後使用  
  15.         PrintWriter out = ServletActionContext.getResponse().getWriter();   
  16.         try{  
  17.             //輸出文本信息  
  18.             out.print("Hello java, 這裏是struts2, 在action方法中直接輸出文本信息.");  
  19.             out.print("Time: " + (new Date()).getTime());   
  20.             out.flush();  
  21.             out.close();  
  22.         }catch(Exception ex){  
  23.             out.println(ex.toString());  
  24.         }  
  25.         return "success";   
  26. //由於直接輸出,故上面一行實際已沒用,僅僅爲了符合函數返回值的要求而已,也可返回空,即return "";  
  27. //也可把函數返回類型改成void類型,便可不用返回,直接輸出;注意:雖然返回可無論,但配置文件仍是須要name="sccess"的result元素  
  28.     }     
  29. }  

 

方案二,[ 簡潔,推薦使用 ]函數

方案二其實跟上面的的原理類似,具體不一樣緣由分析,由於是直接輸出文本信息,即action的方法中沒有必要進行返回操做,故函數返回值類型可爲void,再看action僅僅在Struts2的配置文件中進行配置,僅讓Struts2找到action,再也不須要任何的result元素;整個流程即:讓Struts2找到action,而後在action方法中直接進行輸出文本信息便可,具體以下:編碼

1,在Struts配置文件中配置actionspa

便於理解,首先看struts2的配置文件(實際配置文件應該是最後一步完成的),其中僅僅在Struts2中配置action;.net

 

[html]  view plain copy
 
  1. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   
  2.  "http://struts.apache.org/dtds/struts-2.1.dtd">  
  3. <struts>  
  4.     <package name="myStruts2" extends="struts-default" namespace="/">  
  5.         <action name="test2Action" class="com.xxxName.actions.Test2Action" method="myExecute">              
  6.             <!-- 僅僅在Struts2中配置該action,目的是讓Struts2認識/找到該action,不須要任何result,因返回爲void -->                  
  7.         </action>  
  8.     </package>  
  9. </struts>  


2,Action類文件編寫

[java]  view plain copy
 
  1. package com.xxxName.actions;  
  2. import java.io.IOException;  
  3. import java.io.PrintWriter;  
  4. import java.util.Date;  
  5. import javax.servlet.ServletException;  
  6. import org.apache.struts2.ServletActionContext;  
  7. import com.opensymphony.xwork2.ActionSupport;  
  8.   
  9. public class Test2Action extends ActionSupport{  
  10.     private String contentType = "text/html;charset=utf-8";       
  11.     public void myExecute() throws ServletException, IOException{  //返回類型爲void  
  12.         //指定輸出內容類型和編碼  
  13.         ServletActionContext.getResponse().setContentType(contentType);   
  14.         //獲取輸出流,而後使用  
  15.         PrintWriter out = ServletActionContext.getResponse().getWriter();   
  16.         try{  
  17.             //直接進行文本操做  
  18.             out.print("Hello java, 這裏是struts2, 在action方法中直接輸出文本信息.");  
  19.             out.print("Time: " + (new Date()).getTime());  
  20.             out.flush();  
  21.             out.close();  
  22.         }catch(Exception ex){  
  23.             out.println(ex.toString());  
  24.         }         
  25.         //說明:因函數返回類型爲void類型,便可不用返回,直接輸出;  
  26.     }     
  27. }  

方案二中省去了本地文件的創建,同時配置文件也變得至關簡單,只須要在action的方法中獲取輸出流,設置輸出類型和編碼,而後便可直接進行文本輸出操做,推薦使用方案二;

 

固然這裏僅僅涉及到於此標題有關呢的關鍵步驟,整個項目要運行起來還須要其它創建,最後若是項目創建完成了,配置到服務器(如Tomcat中),
假設Tomcat端口爲8080,項目名爲J2EE001,action匹配的後綴爲.action,那麼訪問以下URL:

http:localhost:8080/J2EE001/test2Action.action 便可看到直接輸出地文本,而不是轉到別的頁面。

相關文章
相關標籤/搜索