`
sw1982
  • 浏览: 511495 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

扩展Struts2--自定义String和XML格式的Result

阅读更多

struts2虽然继承了webwork优秀的MVC分离,可是有很多地方让人百思不得其解!最让人离谱的是,返回的结果集中居然没有String,xml这两种非常常用的类型。还是自己动手,丰衣足食:

 

第一种方式:使用“PlainText Result”

 

    先看官方文档对plain text结果的定义:“A result that send the content out as plain text. Usefull typically when needed to display the raw content of a JSP or Html file for example.”这是一个纯扯蛋的说法。。。貌似感觉只能返回jsp页面似的,最起码他误导了我。

 

    其实使用“PlainText Result” ,返回的结果是未进行格式和编码定义的字符串。什么意思?就类似于“FreeMarker Result”  ,返回一个*.ftl格式的模板,你完全可以在*.ftl写string,那么结果就是string;也可以在里面写xml,那么结果就是xml。

 

   举例如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4.         "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6.     <package name="example" namespace="/example"
  7.         extends="struts-default">
  8.         <action name="outputXml"  method="outxml" class="example.OutputXml">
  9.             <result name="xmlMessage" type="plaintext"></result>
  10.         </action>
  11.     </package>
  12. </struts>

这里定义了xmlMessage为plain text结果,至于它具体是什么,看下面的Action类:

 

  1. public class OutputXml extends ActionSupport {
  2.     public void outxml() throws Exception {
  3.         HttpServletResponse response = ServletActionContext.getResponse();
  4.         response.setContentType("text/xml ");
  5.         PrintWriter pw = response.getWriter();
  6.         pw.print("<cc>cccccc</cc>");
  7.     }

    在代码中,我们显式的给response定义了ContentType。那么返回去的内容"<cc>cccccc</cc>"就会被接收方按xml进行解析。

 而如果需要返回的是String类型,那么contentType = "text/plain”。

如果进一步需要指明编码,那么contentType = "text/plain; charset=UTF-8";

 

    到这里理解“plain text的结果是未进行格式和编码定义的字符串”应该就不困难了。基于http的内容传输实际都是字符串型,类型的定义是放在response的contentType 中。

 

 

第二种方式: 直接扩展struts2的结果集StrutsResultSupport :

 

代码如下:

应该很容易懂了。。嘿嘿

  1. package commons.struts2;
  2. import java.io.PrintWriter;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.apache.struts2.dispatcher.StrutsResultSupport;
  5. import com.opensymphony.xwork2.ActionInvocation;
  6. /**
  7.  * result type for output string in action
  8.  * 
  9.  * @author songwei,yaolei <b>Example:</b>
  10.  * 
  11.  * <pre>
  12.  * <!-- START SNIPPET: example -->
  13.  * <result name="success" type="string">
  14.  *   <param name="stringName">stringName</param>
  15.  * </result>
  16.  * <!-- END SNIPPET: example -->
  17.  * </pre>
  18.  * 
  19.  */
  20. public class StringResultType extends StrutsResultSupport {
  21.     private static final long serialVersionUID = 1L;
  22.     private String contentTypeName;
  23.     private String stringName = "";
  24.     public StringResultType() {
  25.         super();
  26.     }
  27.     public StringResultType(String location) {
  28.         super(location);
  29.     }
  30.     protected void doExecute(String finalLocation, ActionInvocation invocation)
  31.             throws Exception {
  32.         HttpServletResponse response = (HttpServletResponse) invocation
  33.                 .getInvocationContext().get(HTTP_RESPONSE);
  34.         // String contentType = (String)
  35.         // invocation.getStack().findValue(conditionalParse(contentTypeName,
  36.         // invocation));
  37.         String contentType = conditionalParse(contentTypeName, invocation);
  38.         if (contentType == null) {
  39.             contentType = "text/plain; charset=UTF-8";
  40.         }
  41.         response.setContentType(contentType);
  42.         PrintWriter out = response.getWriter();
  43.         // String result = conditionalParse(stringName, invocation);
  44.         String result = (String) invocation.getStack().findValue(stringName);
  45.         out.println(result);
  46.         out.flush();
  47.         out.close();
  48.     }
  49.     public String getContentTypeName() {
  50.         return contentTypeName;
  51.     }
  52.     public void setContentTypeName(String contentTypeName) {
  53.         this.contentTypeName = contentTypeName;
  54.     }
  55.     public String getStringName() {
  56.         return stringName;
  57.     }
  58.     public void setStringName(String stringName) {
  59.         this.stringName = stringName;
  60.     }
  61. }

 

使用的方法:

1.Action

  1. package test;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. public class MyAction extends ActionSupport{
  4.     String  result="abc";
  5.     public String ajax() {
  6.         return "ajaxResponse";
  7.     }
  8.     // getter && setter
  9.     public String getResult() {
  10.         return result;
  11.     }
  12.     public void setResult(String result) {
  13.         this.result = result;
  14.     }
  15.     
  16. }

2.定义struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6.     <package name="test" extends="struts-default">
  7.         <result-types>
  8.             <result-type name="string" class="test.StringResultType"></result-type>
  9.         </result-types>
  10.         
  11.         <action name="myAction" class="test.MyAction" >
  12.             <result name="ajaxResponse" type="string">
  13.                 <param name="stringName">result</param>
  14.             </result>
  15.         </action>
  16.     </package>
  17. </struts>

无非也就是将string结果集进行申明,然后给返回“ajaxResponse”的结果绑定变量名。这里定义返回Action的String  result变量,即“abc”。

 

 

第三种方式:利用Velocity ResultFreeMarker Result

类似第一种方式,这里不再重复

分享到:
评论

相关推荐

    struts2-json-plugin-2.1.8jar包.zip

    Struts2 JSON Plugin是Apache Struts框架的一个扩展插件,主要功能是支持Struts2应用程序与JSON(JavaScript Object Notation)格式的数据进行交互。JSON是一种轻量级的数据交换格式,广泛用于Web服务和AJAX...

    Struts2--自定义拦截器

    自定义拦截器是Struts2中的一个重要特性,允许我们扩展框架的功能,以实现诸如日志记录、权限检查、性能监控等通用任务。在本文中,我们将深入探讨如何创建和使用自定义拦截器。 首先,了解拦截器的基本概念。在...

    struts2--json包

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。在Struts2中,JSON(JavaScript Object Notation)包是一个关键组件,它提供了与JSON数据格式交互的能力,使得Web应用能够...

    Struts2-2.1.6一个最简单的例子,以及需要的基础jar包

    Struts2是一个流行的Java web应用程序框架,用于构建和维护可扩展、模块化且易于管理的MVC(模型-视图-控制器)应用。在本文中,我们将深入探讨Struts2框架的基本概念,以及如何利用Struts2-2.1.6版本创建一个最简单...

    struts2集成struts-ssl-plugin插件实现https访问例子

    Struts2是一个非常流行的Java Web框架,用于构建可维护性和可扩展性良好的企业级应用程序。在Web应用中,为了确保数据传输的安全性,通常会使用HTTPS协议,它基于SSL/TLS来加密通信,保护用户的隐私信息。Struts2...

    struts2-struts入门

    配置常量时,有优先级顺序:default.properties、struts-default.xml、struts-plugin.xml、struts.xml和web.xml。在这些文件中,后出现的文件中的配置会覆盖前面文件中的相同配置。 例如,要配置项目的编码为UTF-8...

    Struts2-注解第一个例子

    在Java Web开发领域,Struts2框架因其丰富的功能和良好的扩展性受到广泛欢迎。其中,注解的应用更是大大简化了开发流程,使得开发者能够更加专注于业务逻辑而非繁琐的配置工作。本文将通过一个具体的示例介绍如何在...

    struts2的一个自定义拦截器小例子

    本示例将聚焦于如何在Struts2中实现一个自定义拦截器。 首先,我们需要了解拦截器在Struts2中的作用。拦截器是AOP(面向切面编程)的一个核心概念,它允许开发者在动作执行前后插入额外的逻辑,如日志记录、权限...

    Struts2--环境搭建

    在这个环境搭建的过程中,我们主要关注如何配置和准备必要的库文件,以便运行一个基本的Struts2应用程序。 首先,我们需要理解Struts2的核心组件和工作原理。Struts2框架通过拦截器(Interceptor)机制处理HTTP请求...

    Struts2-ActionError-ActionMessage-Example

    在Struts2框架中,ActionError和ActionMessage是处理用户输入验证和错误反馈的重要组件,它们使得开发者能够优雅地管理应用程序中的错误信息和用户消息。 ActionError类是用来存储错误信息的,它继承自`java.lang....

    struts2-ajax

    &lt;result-type name="json" class="org.apache.struts2.json.JSONResult"/&gt; &lt;/result-types&gt; &lt;!-- ... --&gt; ``` 接下来,我们需要创建一个Action,这个Action将处理来自Ajax请求的业务逻辑。在Action类中,我们...

    Struts2--为Action的属性注入值

    在Struts2的配置文件(通常为struts.xml或struts-default.xml)中,我们需要声明这个Action,并指定其对应的类和结果页面: ```xml &lt;package name="default" namespace="/" extends="struts-default"&gt; &lt;result ...

    Struts2--HelloWorld

    Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、模块化和易于管理的MVC(模型-视图-控制器)应用。这个“Struts2--HelloWorld”示例将引导我们深入理解Struts2的基础知识和核心概念。 在Java web...

    一个简单的 struts2-json 实例

    Struts2是一个流行的Java web框架,它主要用于构建和维护可扩展的企业级应用程序。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于服务器与客户端之间传递数据。在Struts2中,通过集成Struts...

    struts2-upLoad-photo.rar_photo upload_struts2

    Struts2是一个强大的MVC(模型-视图-控制器)框架,被广泛应用于Java Web开发中,用于构建可维护性和可扩展性高的企业级应用程序。本文将深入探讨如何使用Struts2实现图片上传和显示的功能。 一、Struts2图片上传...

    struts2--国际化入门

    在Struts2中实现国际化,首先你需要创建资源文件,这些文件通常以`.properties`为扩展名,例如`messages.properties`和`messages_zh_CN.properties`。前者是默认的语言,后者则是针对中文环境的。资源文件存储在`src...

    struts2----json----jquery小案例

    Struts2是一个流行的Java web框架,它为开发者提供了一种模型-视图-控制器(MVC)架构,便于构建可维护、可扩展的Web应用程序。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于服务器向...

    Struts2中使用JSON数据格式所需全部jar包

    当Action执行完成后,返回"success",Struts2的JSON插件会根据配置自动将`result`和`list`属性转换为JSON并发送给客户端。 总的来说,Struts2通过整合JSON,提高了Web应用的响应速度和用户体验,使得服务器与客户端...

    Struts2-JSON-Example

    在Struts2的配置文件(struts.xml或struts-default.xml)中,我们需要开启JSON支持。可以通过以下配置实现: ```xml &lt;constant name="struts.enable.SlashesInActionNames" value="true"/&gt; &lt;constant name="struts....

Global site tag (gtag.js) - Google Analytics