struts2的action中用out

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

[html] view plaincopy

  1. <result name="xName" type="plainText">...</result>

同时在result元素中给action设置一些参数即可完成,具体步骤分下面两种方案如下:

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

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

[html] view plaincopy

  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类文件编写

[java] view plaincopy

  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. public class TestAction extends ActionSupport{
  9. private String contentType = "text/html;charset=utf-8";
  10. public String myExecute() throws ServletException, IOException{
  11. //指定输出内容类型和编码
  12. ServletActionContext.getResponse().setContentType(contentType);
  13. //获取输出流,然后使用
  14. PrintWriter out = ServletActionContext.getResponse().getWriter();
  15. try{
  16. //输出文本信息
  17. out.print("Hello java, 这里是struts2, 在action方法中直接输出文本信息.");
  18. out.print("Time: " + (new Date()).getTime());
  19. out.flush();
  20. out.close();
  21. }catch(Exception ex){
  22. out.println(ex.toString());
  23. }
  24. return "success";
  25. //因为直接输出,故上面一行实际已没用,仅仅为了符合函数返回值的要求而已,也可返回空,即return "";
  26. //也可把函数返回类型改为void类型,即可不用返回,直接输出;注意:虽然返回可不管,但配置文件还是需要name="sccess"的result元素
  27. }
  28. }

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

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

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

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

[html] view plaincopy

  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 plaincopy

  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. public class Test2Action extends ActionSupport{
  9. private String contentType = "text/html;charset=utf-8";
  10. public void myExecute() throws ServletException, IOException{  //返回类型为void
  11. //指定输出内容类型和编码
  12. ServletActionContext.getResponse().setContentType(contentType);
  13. //获取输出流,然后使用
  14. PrintWriter out = ServletActionContext.getResponse().getWriter();
  15. try{
  16. //直接进行文本操作
  17. out.print("Hello java, 这里是struts2, 在action方法中直接输出文本信息.");
  18. out.print("Time: " + (new Date()).getTime());
  19. out.flush();
  20. out.close();
  21. }catch(Exception ex){
  22. out.println(ex.toString());
  23. }
  24. //说明:因函数返回类型为void类型,即可不用返回,直接输出;
  25. }
  26. }

方案二中省去了本地文件的建立,同时配置文件也变得相当简单,只需要在action的方法中获取输出流,设置输出类型和编码,然后即可直接进行文本输出操作,推荐使用方案二;

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

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

时间: 2024-10-25 08:33:14

struts2的action中用out的相关文章

Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中

struts2的关于method="{1}"意思详解 <action   name= "Login_* "   method= "{1} "   class= "mailreader2.Login ">中Login_*带*是什么意思?method= "{1} "带{}这个是什么意思?====================================================name=

Struts2中Action接收参数的方法主要有以下三种:

Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=jim: 2.使用DomainModel接收参数:     a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法

struts2的action是线程安全的,struts1的action不是线程安全的真正原因

为什么struts2的action是线程安全的,struts1的action不是线程安全的? 先对struts1和struts2的原理做一个简单的讲解 对于struts1 ,当第一次**.do的请求过来时,在内存中的actionmapping中找到相对应的action,然后new出这个action放在缓存中,当第二次一样的请求过来时,还是找的这个action,所以对于struts1来说,action是单实例的 ,只有一个,如果在action中定义变量,就要非常小心了,因为并发问题,可能带来灾难性

Struts2中Action取得表单数据的几种方法

Struts2中Action取得表单数据的几种方法 Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form action="sys/login.action" method="post"> <input type="text" name="username"> <input type="submit"

在Struts2的Action中取得请求参数值的几种方法

把参数放到作用域里面去. 如:action 中: request.setAttribute("参数名","值");   页面上:  request.getAttribute("参数名"); request.getParameter()方法完全可以获得URL参数,检查下是否参数名写错 你使用的是不是BaseAction.如果就是server.getRequest().getParameter() 看看你的控件是不是 name 属性!如果id的话就获

struts2的action从request获取参数值的几种方式

使用jquery框架的ajax能够方便的向后台传递参数,以$.post为例,参数有2种方式字符串和键值对: $.post(url, "name=aty&age=25")和$.post(url, {"name":"aty","age":25}).显然,使用json的方式比使用字符串拼接要方 便.对于后台的action来说,这2种方式是等价的,而且jquery也提供了param.serialize.serialize能够实

【Struts2】★☆之struts2对Action提交方法进行验证

[Struts2]★☆之struts2对Action提交方法进行验证 在实际的开发项目中,我们通常采用的是js对我们输入的值进行验证,例如,用户名的长度,密码长度,等等.但是这样做,不好之处就是我们可以通过人为的将开发者的验证js注掉,这样就导致验证失败,对后台安全性是一个很大的威胁,在采用struts2进行开发时,我们可以采用框架内置的校验器,对我们的Action进行校验.本文所讲诉的就是如何使用重写struts2中的ActionSupport里面的validate方法对输入值进行校验. ok

Struts2中Action接收参数的方法

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=Magci: 2.使用DomainModel接收参数:   

浅析Struts1和Struts2的Action线程安全问题

[问题描述]最近公司安排我面试Java的FreshMan,面试者一般是工作1年多点的新人(这里我就装老一下,其实我也才工作3年不到),在被问及Struts1和Struts2的Action的线程安全问题的时候,大多是支支吾吾,答不出所以然.所以在这里我整理一下我个人的理解. [问题答案] 这是由于Servlet的工作原理产生的.我们先来简单回顾一下Servlet的生命周期“初始化->init->service->destroy->卸载”. 这里大家都知道,我们在web.xml里面定义