在jsp页面中显示xhtml内容

问题描述:

我有一个显示XHTML内容的JSP页面。我已经包含在我的JSP页面的顶部以下行:在jsp页面中显示xhtml内容

<?xml version="1.0" encoding="UTF-8"?> 
<% response.setContentType("application/xhtml+xml"); %> 
<% request.setCharacterEncoding("UTF-8"); %> 

如果我改变上述行来:

<?xml version="1.0" encoding="UTF-8"?> 
<% response.setContentType("application/xhtml+xml;charset=UTF-8"); %> 
<% request.setCharacterEncoding("UTF-8"); %> 

页停止呈现,并抛出XML解析错误,如“分号预计某处在我的javascript“或”处理指令未找到“等等。

从response.setContentType中除去”charset = utf-8“会使页面呈现。唯一的问题是→显示为questin标记“?”

页面停止呈现,并抛出XML解析错误,如“分号预计介于我的javascript”或“处理指令未找到”等等等等

如果声明会发生XHTML作为XML而不是“带XML语法的HTML”。确实摆脱了那个XML声明。如果可以的话,我会更进一步,将HTML用作真正的HTML,即使用<!doctype html>或任何其他HTML strict文档类型。另见http://hsivonen.iki.fi/doctype/

<% request.setCharacterEncoding("UTF-8"); %> 

首先细节是,request.setCharacterEncoding("UTF-8")是远远多余的。在这个阶段,现在已经太迟了。第二个细节是你正在使用scriptlets。我建议不要这样做。在适当的地方使用taglibs/EL。如果这是不可能的,那么代码逻辑实际上属于Java类,直接或间接地在Servlet或Filter类中。

从response.setContentType中删除“charset = utf-8”会使页面呈现。唯一的问题是→显示为一个questin标记“?”

response.setContentType(..)是多余的,如果你已经将它作为HTML <head>这是恕我直言,干净多了一个<meta>标签。

最后,您还需要设置响应字符编码(这是自定的内容类型不同!)如下:

<%@ page pageEncoding="UTF-8" %> 

这顺便也隐式创建为content-type一个<meta>标签。更多的背景信息和提示可以在here找到。

希望这会有所帮助。

+0

删除了request.setCharacterEndocding,包括

下,页面呈现但→仍显示为问号。 – 2009-11-18 19:37:30
+0

我编辑了我的答案,如何正确设置响应编码。在设计中XHTML中忽略带字符集的 – BalusC 2009-11-18 20:31:55

+0

。它只适用于HTML(并且在IE中使用HTML伪装成XML)。 – Kornel 2009-11-18 21:05:16

你可能有这样的代码:

<script type="text/javascript"> if (a && b) </script> 

这是禁止在XHTML模式,但需要text/html模式。你会在Sending XHTML as text/html Considered Harmful找到这个问题的解释。

和代码,如:

<a href="foo?bar&baz"> 

没有在HTML或XHTML的任何版本允许的。它必须始终写为:

<a href="foo?bar&amp;baz"> 

显然你不使用XML串行器(它不会让你创建无效实体或不正确的编码字符)生成页面,因此,我建议你使用HTML 4严格或取而代之的是HTML5-as-text/html,它们更适合手写编码标记。