在Struts2的action类的方法中直接输出文本信息

来源:互联网 发布:刷业务平台软件 编辑:程序博客网 时间:2024/06/06 17:27

在java开发中,有时在Struts2的action方法中仅需要直接输出一些文本信息,比如ajax请求,返回仅仅需要一些文本信息即可,Struts2同样支持,首先编写action类,在action类的方法中得到输出流然后进行文本输出,然后在struts2的配置文件中配置action,[后面步骤其实可不用]如有result则设置其type属性设置为plainText,即

<result name="xName" type="plainText">...</result>
同时在result元素中给action设置一些参数即可完成,具体步骤分下面两种方案如下:


方案一:[常见,不推荐使用]

1,在Struts配置文件中配置action
便于理解,首先看struts2的配置文件(实际配置文件应该是最后一步完成的), 其中仅仅定义一个action,注意result元素的各个属性和内部的param元素;

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="myStruts2" extends="struts-default" namespace="/"><action name="testAction" class="com.xxxName.actions.TestAction" method="myExecute"><result name="success" type="plainText"><!-- 该name="success"的result必须有 --><param name="charSet">UTF-8</param><!-- 设置输出字符编码,防止英文和数字以外的字符(如中文)出现乱码  --><param name="location">/testout.jsp</param><!-- 设置依附的本地文件,该文件必须实际存在,且路径指向正确;但该文件内容可以为空,仅起本地依附作用--></result></action></package></struts>

2,建立本地依附文件

在合适路径下创建一个JSP文件,提供action进行依附,该文件内容可以为空,也可含HTML元素等,但实际都不用到,仅仅提供action进行本地依附作用,可多个action共享该文件;

3,Action类文件编写

package com.xxxName.actions;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import javax.servlet.ServletException;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport{private String contentType = "text/html;charset=utf-8"; public String myExecute() throws ServletException, IOException{//指定输出内容类型和编码ServletActionContext.getResponse().setContentType(contentType); //获取输出流,然后使用PrintWriter out = ServletActionContext.getResponse().getWriter(); try{//输出文本信息out.print("Hello java, 这里是struts2, 在action方法中直接输出文本信息.");out.print("Time: " + (new Date()).getTime()); out.flush();out.close();}catch(Exception ex){out.println(ex.toString());}return "success"; //因为直接输出,故上面一行实际已没用,仅仅为了符合函数返回值的要求而已,也可返回空,即return "";//也可把函数返回类型改为void类型,即可不用返回,直接输出;注意:虽然返回可不管,但配置文件还是需要name="sccess"的result元素}}


方案二,[ 简洁,推荐使用 ]

方案二其实跟上面的的原理相似,具体不同原因分析,因为是直接输出文本信息,即action的方法中没有必要进行返回操作,故函数返回值类型可为void,再看action仅仅在Struts2的配置文件中进行配置,仅让Struts2找到action,不再需要任何的result元素;整个流程即:让Struts2找到action,然后在action方法中直接进行输出文本信息即可,具体如下:

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

便于理解,首先看struts2的配置文件(实际配置文件应该是最后一步完成的),其中仅仅在Struts2中配置action;

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="myStruts2" extends="struts-default" namespace="/"><action name="test2Action" class="com.xxxName.actions.Test2Action" method="myExecute"><!-- 仅仅在Struts2中配置该action,目的是让Struts2认识/找到该action,不需要任何result,因返回为void --></action></package></struts>

2,Action类文件编写
package com.xxxName.actions;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import javax.servlet.ServletException;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class Test2Action extends ActionSupport{private String contentType = "text/html;charset=utf-8"; public void myExecute() throws ServletException, IOException{  //返回类型为void//指定输出内容类型和编码ServletActionContext.getResponse().setContentType(contentType); //获取输出流,然后使用PrintWriter out = ServletActionContext.getResponse().getWriter(); try{//直接进行文本操作out.print("Hello java, 这里是struts2, 在action方法中直接输出文本信息.");out.print("Time: " + (new Date()).getTime());out.flush();out.close();}catch(Exception ex){out.println(ex.toString());}//说明:因函数返回类型为void类型,即可不用返回,直接输出;}}
方案二中省去了本地文件的建立,同时配置文件也变得相当简单,只需要在action的方法中获取输出流,设置输出类型和编码,然后即可直接进行文本输出操作,推荐使用方案二

当然这里仅仅涉及到于此标题有关呢的关键步骤,整个项目要运行起来还需要其它建立,最后如果项目建立完成了,配置到服务器(如Tomcat中),
假设Tomcat端口为8080,项目名为J2EE001,action匹配的后缀为.action,那么访问如下URL:

http:localhost:8080/J2EE001/test2Action.action 
即可看到直接输出地文本,而不是转到别的页面。


原创粉丝点击