在jsp页面中显示xhtml内容

时间:2009-11-18 19:01:09

标签: jsp xhtml

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

<?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”会使页面呈现。唯一的问题是→显示为查询标记“?”

2 个答案:

答案 0 :(得分:1)

  

该页面停止呈现并抛出XML解析错误,例如“在我的javascript中某处预期的半冒号”或“未找到处理指令”等等。

如果您将XHTML声明为XML而不是“使用XML语法的HTML”,则会发生这种情况。确实摆脱了那个XML声明。如果可以的话,我会更进一步,只使用HTML作为真正的HTML,即使用<!doctype html>或任何其他HTML strict doctype。另请参阅http://hsivonen.iki.fi/doctype/

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

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

  

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

response.setContentType(..)如果您已将其设置为HTML <meta>中的<head>标记,那么它就是多余的。

最后,您还需要设置响应字符编码(与设置内容类型不同!),如下所示:

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

顺便说一下,这也为<meta>隐式创建了content-type标记。可以找到更多背景信息和提示here

希望这有帮助。

答案 1 :(得分:1)

你可能有这样的代码:

<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 Strict或HTML5-as- text/html代替,哪种更适合手写标记。