我在 Struts 1.3 应用程序中有一个 Ajax 调用,但无法让它向浏览器返回有效的 XML。 XML 的内容被正确发送回来,但是浏览器仍然将响应类型重新识别为 text/html。
我的动作类看起来像这样:
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,但这看起来像是一个 hack,我宁愿让 struts 将响应作为有效的 XML 发送回来回复。
httpServletResponse.setContentType("text/xml");
httpServletResponse.setHeader("Content-type","application/xhtml+xml");
这毫无意义第二行用错误的内容类型覆盖第一行。
至于具体问题,我不使用Struts,所以我可能是错的,但我想象它有效地将请求转发到JSP。 JspServlet 隐式使用
text/html
内容类型。这样,任何基于 servlet 的内容类型更改都将完全无效。在 JSP 中,您需要通过 JSP 顶部的 @page
声明来设置它,如下所示:
<%@page contentType="text/xml" pageEncoding="UTF-8" %>
(页面编码也很重要,XML标记默认为UTF-8)
不要忘记从 Struts 操作方法中删除这两行。