由于某种原因,JSP文档输出XML而不是HTML

时间:2010-01-15 21:08:13

标签: java jsp jsf

好的,所以我正在尝试设置一个简单的JSF应用程序。我正在使用NetBeans 6.8,Glassfishv3和Maven2。我制作了一个JSP文档:

<?xml version="1.0" encoding="utf-8"?>
<html xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
<f:view>
    <head>
        <title><h:outputText value="#{Welcome.title}"/></title>
    </head>
    <body>
        <h:outputText value="Welcome"/>
    </body>
</f:view>
</html>

问题是,如果我导航到此页面(http://myHost/myApp/faces/welcome.jspx),它将作为XML文档返回,但填充了${Welcome.title}值:

<?xml version="1.0" encoding="UTF-8"?>
<html><head><title>Gymix - Welcome</title></head><body>Welcome</body></html>

在Internet Explorer中,这看起来像是我打开了一个XML文档。在谷歌浏览器中,标题打印在欢迎文本旁边,而不是标题,页面的URL将打印在选项卡上。

如果我将JSP文档更改为普通的JSP页面(taglibs而不是xmlns等),它可以工作,我会返回一个正确的页面。关于什么是错的任何想法?谢谢!

编辑:遗憾的是没有一个快速解决方法修复此问题,所以我会更多地研究这个问题。顺便说一下,我的pom.xml有jsf-api和jsf-impl依赖项,两者的版本都设置为1.2_14

3 个答案:

答案 0 :(得分:2)

我认为您需要输入有效的doctype。

这将低于你的xml声明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

答案 1 :(得分:2)

除了您需要设置正确的doctypecontent type以便浏览器知道如何处理页面这一事实之外,您还应该摆脱旧式{{1}格式化并使用jspx格式来获得Java EE 6发布的JSF 2.0和Facelets的最大好处。

应将给定代码更改为:

xhtml

请注意,包含doctype,并且JSF 2.0 / Facelets会在<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>#{welcome.title}</title> </h:head> <h:body> Welcome </h:body> </html> 组件的帮助下自动关注正确的内容类型。另请注意,缺少<h:head>标记,Facelets中不再需要它。

您可能还需要重新配置您的webapp以充分利用JSF 2.0和Facelets的全部功能。要了解有关JSF 2.0和Facelets的更多信息,我强烈建议您浏览Java EE 6 tutorial part II chapters 4-9

祝你好运。

根据{{​​3}}

更新:我会添加一个重要说明;确实,XML声明(第一行)会混淆某些webbrowsers的呈现模式(也可以看到上面doctype链接背后的网站),但这肯定是这里的问题。 Facelets 在生成页面的HTML期间删除 XML声明。 XML声明就在那里,因为Facelets需要首先使用基于XML的工具来解析页面。我们讨论的是基于组件的MVC框架和基于XML的模板技术,而不是简单的普通HTML页面;)

答案 2 :(得分:0)

您必须告诉浏览器您要发送的内容。我不太确定如何在JSP中做到这一点,所以你必须弄清楚自己或等到比我更有知识的人告诉你。

您必须发送Content-Type HTTP标头,表明您的文件是text/html; charset=UTF-8

Content-Type: text/html, charset=UTF-8