2011-07-29 29 views
1

做我输出的内容类型text/xml的浏览器我有一个Struts 1.3应用Ajax调用,我无法得到它有效的XML返回给浏览器。 XML的内容被正确发回,但浏览器仍然将响应类型重新组织为text/html。如何在Struts的1.3

我的动作类看起来是这样的:

public ActionForward newContractCAUAjax(ActionMapping actionMapping, 
     ActionForm actionForm, HttpServletRequest httpServletRequest, 
     HttpServletResponse httpServletResponse)throws Exception { 

    String target="forwardToCAUXML"; 

    DynaActionForm dynaActionForm = (DynaActionForm) actionForm; 

    httpServletResponse.setContentType("text/xml"); 
    httpServletResponse.setHeader("Content-type","application/xhtml+xml"); 

    ... 

    return actionMapping.findForward(target); 
} 

什么我目前做的只是抓住了XML字符串浏览器设置背部和使用jQuery的parseXML()方法来获得有效的XML,但是这似乎是一个黑客,我宁愿让struts发回响应作为一个有效的XML响应。

回答

8
httpServletResponse.setContentType("text/xml"); 
httpServletResponse.setHeader("Content-type","application/xhtml+xml"); 

这没有意义第二行覆盖第一个错误的内容类型。

至于具体的问题,我不这样做的Struts所以我可能是错的,但我会想象它有效地将请求转发到JSP。 JspServlet隐式使用text/html内容类型。这样,任何基于servlet的内容类型更改都将不起作用。在JSP中,你将需要由@page声明在JSP的顶部设置如下:(即页面编码也是非常重要的,XML标记默认为UTF-8)

<%@page contentType="text/xml" pageEncoding="UTF-8" %> 

不要忘记从Struts操作方法中删除这两行。

+1

添加内容类型到.JSP本身给了我一直在寻找的结果。 – bittersweetryan

相关问题