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 便可看到直接输出地文本,而不是转到别的页面。

相关文章
相关标签/搜索