JSP显示源代码而不是执行

时间:2011-01-15 02:45:48

标签: java jsp tomcat

我是jsp的新手,遇到了一些麻烦。最初,jsp文件和相关的java类是在测试Tomcat服务器上构建和测试的。现在,他们已经转换到我认为是相同设置的另一台服务器(除了它现在是linux而不是windows)。但是当访问jsp页面时,显示源代码而不是实际执行的jsp。我已经google了一段时间但没有成功。

以下是我正在测试的jsp文件的代码:

<HTML>
<BODY>
Hello!  The time is now <%= new java.util.Date() %>
</BODY>
</HTML>

这是导航到页面时我在浏览器中看到的内容:

 Hello! The time is now <%= new java.util.Date() %> 

页面的来源是在示例文件中输入的确切代码:

<HTML>
<BODY>
Hello!  The time is now <%= new java.util.Date() %>
</BODY>
</HTML>

服务器似乎正在运行。以下是我从Firebug获得的响应标头:

Date    Sat, 15 Jan 2011 20:53:24 GMT
Server  Apache/2.2.3 (CentOS)
Last-Modified   Sat, 15 Jan 2011 02:20:18 GMT
Etag    "b385d8-55-499d931205c80"
Accept-Ranges   bytes
Content-Length  85
Content-Type    text/html; charset=UTF-8

我原以为this page可能会解决问题,因为我没有引用我正在使用的jsp文件,甚至还没有引用WEB-INF文件夹中我的web.xml文件中的以下代码片段:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>logVerbosityLevel</param-name>
        <param-value>WARNING</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

我尝试插入这些行并重新启动Tomcat,但没有成功。有什么想法吗?

4 个答案:

答案 0 :(得分:3)

来自回复标题:

  

服务器Apache / 2.2.3(CentOS)

这不是由Apache Tomcat提供的,而是由Apache HTTPD提供的。您根本没有将它部署到Tomcat。

答案 1 :(得分:3)

我刚遇到同样的问题,这就是我偶然发现这篇文章的原因。对我来说,事实证明问题是CATALINA_HOME和CATALINA_BASE之间的区别。我想很多人都没有意识到这是两个不同的地方。在我的Ubuntu上,CATALINA_HOME位于/ usr / share / tomcat6中,但CATALINA_BASE位于/ var / lib / tomcat6中。这很重要,因为您需要将您的jsp文件放在CATALINA_BASE中。所以,事实上,我会说Tomcat没有找到你的代码,即使你的浏览器找到了这个文件,并且很高兴为你显示它,就像它有其他文本文件一样。

希望这可以帮助其他来这里遇到同样问题的人 - 这是我第一次尝试在StackOverflow上发布答案。

答案 2 :(得分:1)

查看“logVerbosityLevel”和“WARNING”的位置?将警告更改为DEBUG。您还可以找到catalina.sh脚本并找到您的java命令,并确保标志-DDEBUG包含在启动选项中。

查看完整调试模式的日志将告诉您在新服务器上启动Tomcat是否有任何问题。

例如,您可能缺少依赖性或依赖性冲突,而这些冲突未显示信息量较少的日志记录级别。

最后,您是否尝试过一个简单的JSP测试页?

      <% out.println("Hello"); %>

如果你把它放在JSP中并尝试加载它,你会看到JSP还是输出?

您是否尝试在请求中使用Tomcat端口?通常,这是8080.我认为其中一位评论员提到了这种可能性。

答案 3 :(得分:0)

迁移Java 6-> 8,tomcat 5-> 8 如果您在 app web.xml

中有类似的内容
<!--need this so that this work:  jsp:include page="WEB-INF...xxx.jspf-->
<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jspf</url-pattern>
</servlet-mapping>

它将生成 JSP显示源代码,而不是在tomcat 8上执行,因为它似乎在tomcat Web xml中滚动了有关jsp的内容。

解决方案是删除 app web.xml中的这段代码,并将所有内容放入 tomcat web.xml中,例如:

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
    <url-pattern>*.jspx</url-pattern>
    <url-pattern>*.jspf</url-pattern>
</servlet-mapping>