`
gaoyuntao2005
  • 浏览: 311081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Struts2 返回XML的问题

 
阅读更多

1. Action其实是一个POJO,所以我们可以直接把Action生成一个XML.只要把Result Type设为xslt就可以了:
      <action name="XmlModel" class="cpu.XmlModelAction">
            <result name="success" type="xslt" />
      </action>
里面包含了Action的所有属性,还有Locale等信息. 可以在浏览器里输入http://localhost:8080/XXX/XXX/XmlModel.action来看.

2. 为了定制自己想要的XML,我们可以输入参数来输出自己想要的Action的某个属性(属性可以是一个List).
      <action name="XmlModel" class="cpu.XmlModelAction">
            <result name="success" type="xslt">
                  <param name=”exposedValue”>modelList</param>
            </result>
      </action>

3. 如果有多于一个属性呢.加个大括号围起来
      <action name="XmlModel" class="cpu.XmlModelAction">
            <result name="success" type="xslt">
                  <param name=”exposedValue”>{modelList, type}</param>
            </result>
      </action>

4. 以上三个方法都是由Action 来控制生成格式.那么对于我们这种控制欲很强的人来说并不满足,最好是由我们自己来定义生成样子.那么这时我们就要做的就是在属性里生成一个 org.w3c.dom.Document属性.注意:不要用org.dom4j.Document类.要不会出现转化错误,死得很惨.
      <action name="XmlModel" class="cpu.XmlModelAction">
      <result name="success" type="xslt">
            <param name="exposedValue">xmlDoc</param>
      </result>
      </action>
上面的xmlDoc就是 Action里的org.w3c.dom.Document类型.

5. 我只会用并且非要用org.dom4j.Document类怎么办? 那就在最后转化成 org.w3c.dom.Document:
Java代码 复制代码
  1. import java.io.ByteArrayInputStream;     
  2. import java.io.IOException;     
  3.       
  4. import javax.xml.parsers.DocumentBuilderFactory;     
  5. import javax.xml.parsers.ParserConfigurationException;     
  6.       
  7. import org.xml.sax.SAXException;     
  8.       
  9. public class XmlUtil {     
  10.      
  11.       private XmlUtil() {     
  12.       }     
  13.       
  14.       public static org.w3c.dom.Document XmlString2W3cDom(String xml)     
  15.                   throws SAXException, IOException, ParserConfigurationException {     
  16.             byte[] byteArray = xml.getBytes("UTF-8");     
  17.             ByteArrayInputStream baos = new ByteArrayInputStream(byteArray);     
  18.             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();     
  19.             org.w3c.dom.Document doc = factory.newDocumentBuilder().parse(baos);     
  20.             return doc;     
  21.       }     
  22.       
  23.       public static org.dom4j.Document W3c2Dom4j(org.w3c.dom.Document doc) {     
  24.             if (doc == null) {     
  25.                  return (null);     
  26.             }     
  27.             org.dom4j.io.DOMReader xmlReader = new org.dom4j.io.DOMReader();     
  28.             return (xmlReader.read(doc));     
  29.       }     
  30.       
  31. }     
 import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
public class XmlUtil {
private XmlUtil() {
}
public static org.w3c.dom.Document XmlString2W3cDom(String xml)
throws SAXException, IOException, ParserConfigurationException {
byte[] byteArray = xml.getBytes("UTF-8");
ByteArrayInputStream baos = new ByteArrayInputStream(byteArray);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
org.w3c.dom.Document doc = factory.newDocumentBuilder().parse(baos);
return doc;
}
public static org.dom4j.Document W3c2Dom4j(org.w3c.dom.Document doc) {
if (doc == null) {
return (null);
}
org.dom4j.io.DOMReader xmlReader = new org.dom4j.io.DOMReader();
return (xmlReader.read(doc));
}
}

Action里加上一句: xmlDoc = Xmlutil.XmlString2W3cDom(dom4jDoc.asXML());
上面的xmlDoc就是 Action里的org.w3c.dom.Document类型.

6. 用org.dom4j.dom.DOMDocumentFactory()来建立 Document.而不要用DocumentHelper.createDocument()来产生.最后直接cast一下.
 
public String execute() throws UnsupportedEncodingException, ParserConfigurationException, SAXException, IOException {     
  1.   InfoCpuService cpuSvc = null;     
  2.   cpuSvc = (InfoCpuService) ServiceLocator.getInstance().getService(InfoCpuService.class);     
  3.       
  4.   modelList = cpuSvc.getModels(prodBrand);     
  5.       
  6.   log.info(ReflectionToStringBuilder.toString(this));     
  7.      
  8.  org.dom4j.Document dom4jDoc = new org.dom4j.dom.DOMDocumentFactory().createDocument();     
  9.     
  10.                Element root = dom4jDoc.addElement("root");     
  11.  root.addAttribute("prodType""CPU");     
  12.     
  13. for (Object o : modelList) {     
  14.   root.addElement("model").addAttribute("name", (String) o);     
  15.  }     
  16.      
  17. //xmlDoc = XmlUtil.XmlString2W3cDom(doc.asXML());     
  18.  xmlDoc = (Document) dom4jDoc;     
  19.      
  20.   HttpServletResponse response = ServletActionContext.getResponse();     
  21.   response.setContentType("text/xml;charset=UTF-8");     
  22.   response.setHeader("Cache-Control""no-cache");     
  23.        
  24.  return SUCCESS;     
  25.     
    public String execute() throws UnsupportedEncodingException, ParserConfigurationException, SAXException, IOException {
InfoCpuService cpuSvc = null;
cpuSvc = (InfoCpuService) ServiceLocator.getInstance().getService(InfoCpuService.class);
modelList = cpuSvc.getModels(prodBrand);
log.info(ReflectionToStringBuilder.toString(this));
org.dom4j.Document dom4jDoc = new org.dom4j.dom.DOMDocumentFactory().createDocument();
Element root = dom4jDoc.addElement("root");
root.addAttribute("prodType", "CPU");
for (Object o : modelList) {
root.addElement("model").addAttribute("name", (String) o);
}
//xmlDoc = XmlUtil.XmlString2W3cDom(doc.asXML());
xmlDoc = (Document) dom4jDoc;
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
return SUCCESS;
}

其中三句代码是为了防止生成中文乱码
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/xml;charset=UTF-8");
   response.setHeader("Cache-Control", "no-cache");

7. 在action中返回类型最好设置为import org.w3c.dom.Document;
private Document retXML;  
private Document retXML;

配置格式为:
Java代码
  1. <action name="XmlModel" class="com.XmlModelAction">   
  2.            <result name="success" type="xslt">   
  3.                  <param name=”exposedValue”>retXML</param>   
  4.            </result>   
  5.  </action>  
分享到:
评论

相关推荐

    struts2 jquery xml

    Struts2 jQuery XML 是一个基于Java的Web开发框架的组合,它将Apache Struts2的MVC架构与jQuery库结合,提供了丰富的用户界面组件和更流畅的AJAX交互。Struts2是一个强大的、灵活的MVC框架,而jQuery则简化了...

    struts2 xml

    Struts2是一个强大的MVC框架,它以XML配置文件为核心,允许开发者定义应用程序的行为和结构。在Struts2中,XML配置文件(通常命名为struts.xml)是整个框架的基石,它负责设置Action、拦截器、结果页面以及其他关键...

    Struts2中Struts.xml配置文件详解

    "Struts2 中 Struts.xml 配置文件详解" Struts2 中的 Struts.xml 配置文件是 Struts2 框架的核心配置文件,用于定义应用程序的行为和结构。在 Struts.xml 文件中,我们可以定义 package、action、interceptor、...

    struts2官方例子7-表单验证 xml形式的验证

    总结起来,Struts2的XML表单验证是通过创建XML文件定义验证规则,然后在Action类中处理数据,通过框架自动进行验证并返回错误信息。这种方式使得验证逻辑与业务逻辑分离,提高了代码的可维护性和复用性。对于大型...

    struts2返回json

    Struts2是一个非常流行的Java Web框架,...以上就是关于Struts2返回JSON数据类型的基本介绍和实现步骤。通过这些步骤,你可以轻松地在Struts2应用中实现从服务器向客户端传递JSON数据,从而提升Web应用的交互性和性能。

    struts2如何生成XML文件

    3. **配置Struts.xml文件**:在Struts2中,需要在`struts.xml`文件中配置结果类型为`xslt`,并指定`exposedValue`参数指向`getDocument()`方法返回的`Document`对象。 ```xml &lt;param name="exposedValue"&gt;...

    struts.xml(struts2配置)

    `struts.xml`是Struts2框架的核心配置文件,用于定义应用程序的行为、控制器、动作映射、结果类型和其他关键组件。下面我们将深入探讨`struts.xml`的各个方面。 1. **配置文件结构** `struts.xml`文件通常位于项目...

    struts2属性文件struts.xml的配置

    通过以上分析可以看出,`struts.xml`文件是Struts2项目的核心配置文件之一,它不仅定义了项目的全局配置,还具体指定了每个Action的行为和返回结果,是Struts2框架中不可或缺的一部分。开发者可以根据实际需求调整...

    SSH三大框架整合mini案例 struts 2(xml配置)+hibernate(注解)+spring(xml配置)

    在这个mini案例中,我们将深入理解SSH框架如何协同工作,以实现一个基于XML配置的Struts 2、注解驱动的Hibernate以及XML配置的Spring的整合。 **Struts 2框架** 是一个MVC(Model-View-Controller)架构,主要负责...

    struts.xml和struts.properties配置详解

    综上所述,`struts.xml`和`struts.properties`是Struts 2框架的两个重要配置文件,它们共同决定了应用程序的行为和运行时的属性。理解并熟练配置这两个文件对于开发和维护Struts 2应用至关重要。在实际开发中,应...

    Struts2手动搭建所有的jar包及相应的struts.xml和web.xml

    现在,当用户访问匹配Action的URL时,Struts2框架会解析`struts.xml`文件中的配置,执行对应的Action,然后根据结果类型返回相应的视图。你可以在此基础上扩展配置,比如添加更多的Action、结果类型、拦截器,以满足...

    Struts2 返回json对象

    Struts2 返回 JSON 对象 Struts2 是一个基于 MVC 模式的 Java Web 应用程序框架,它提供了一个强大的机制来处理用户的请求和响应。在 Struts2 中,返回 JSON 对象是通过 JSON 插件来实现的,这个插件提供了一个可以...

    struts2返回json数据的方法一 使用json-default

    本篇文章将详细讲解如何在Struts2中使用“json-default”拦截器来返回JSON数据。 首先,我们需要理解Struts2的拦截器(Interceptor)机制。拦截器是Struts2框架的核心组件之一,它们在Action执行前后执行特定的任务...

    struts.xml和applicationContext.xml、web.xml的配置

    总结来说,`struts.xml` 负责Struts2的Action配置,`applicationContext.xml` 管理Spring的Bean和依赖,而`web.xml` 定义了Web应用的基本结构和组件。这三个文件共同协作,构建了一个功能完善的Java Web应用,实现了...

    struts核心jar包及xml配置文件

    本压缩包包含了Struts2的核心库jar文件以及相关的XML配置文件,这些都是开发Struts2应用的基础组件。 **1. Struts2核心jar包** Struts2的核心jar包是实现框架功能的关键,主要包括以下几个部分: - **struts2-core...

    maven-web项目 Struts2 Struts注解 Struts2返回json

    关于Struts2返回JSON,这是现代Web应用中常见的需求,尤其是对于AJAX交互。Struts2提供了一个插件叫做“struts2-json-plugin”,它可以很方便地将Action的返回值转化为JSON格式,从而供前端JavaScript处理。要实现这...

    struts2小程序 struts2代码

    2. **配置文件**:Struts2使用XML配置文件(struts.xml或struts.properties)来定义Action、结果类型、拦截器等。这些配置是理解程序工作流程的关键。 3. **Interceptor拦截器**:拦截器允许在Action执行前后插入...

    Struts2教学视频

    以上就是关于Struts2的一些基础知识点,学习Struts2不仅可以帮助理解MVC模式在实际应用中的工作原理,还能提升Java Web开发的技能。通过观看教学视频,结合实践操作,可以更好地掌握这些概念和技术。

    struts2-jsondemo

    5. **Action中的JSON处理**:在Action中,我们可以使用Struts2提供的`@ResultType("json")`注解或者在配置文件中声明结果类型,使得Action可以直接返回Java对象,Struts2会自动将其转换为JSON。 6. **JSONParam注解...

Global site tag (gtag.js) - Google Analytics