我想知道是否有人遇到过我遇到的这个问题,如果有的话,是否可以为我提供解决方案。
我有一个'index.jsp'页面,它位于WEB-INF文件夹之外,由以下代码组成:
<html>
<body>
<%response.sendRedirect("home.htm");%>
</body>
</html>
页面应重定向到位于WEB-INF文件夹内的“home.jsp”。
我遇到的问题是,当我使用Eclipse在tomcat中部署我的应用程序时,重定向工作正常!
但是,当我通过在tomcat / bin文件夹中运行'startup.sh'在tomcat中启动我的应用程序时,我收到'HTTP Status 404'错误。
我正在使用tomcat 6.0.33
答案 0 :(得分:1)
/WEB-INF
文件夹中的文件无法公开访问。该文件夹用于不应由webbrowser直接访问的资源,例如JSP包含文件,需要预处理的JSP文件(前端控制器)servlet等等。
您的home.jsp
似乎只是一个普通的JSP文件,可以通过URL直接访问。所以,将放在的/WEB-INF
文件夹中。这种方式只能由http://localhost:8080/context/home.jsp提供。
至于你的具体要求,让index.jsp
重定向到别的东西真的没意义。只需将<welcome-file>
中的web.xml
设置更改为home.jsp
,而不是index.jsp
。
<welcome-file-list>
<welcome-file>home.jsp</welcome-file>
</welcome-file-list>
这样,当最终用户直接访问http://localhost:8080/context文件夹而不指定任何资源文件时,将会打开home.jsp
。
哦,请注意.htm
扩展名与.jsp
扩展名不同。如有必要,也要相应地修复。
答案 1 :(得分:0)
如果你想重定向到&#39; home.jsp&#39;,你必须写&#39; home.jsp&#39; as sendRedirect参数。
答案 2 :(得分:0)
首先,要转到的初始页面由元素在web.xml文件中控制。在独立的Tomcat中,默认为/index.html,然后是/index.htm,最后是/index.jsp。
可能是当你从Eclipse中启动tomcat时,web插件使用默认的web.xml自行完成,因此默认值可能略有不同。
其次,如果您只想将index.jsp重定向到home.htm,则不应使用HTML标记标记包装scriptlet。如果tomcat在执行scriptlet之前决定刷新输出,则将忽略sendRedirect()方法,因为HTTP头已经被写入。
最后,我假设您在Web应用程序中设置了某种映射,用于处理'home.htm'请求并转发到home.jsp?
答案 3 :(得分:0)
当home.jsp
的参数为sendRedirect
时,为什么期望它重定向到home.htm
?有拼写错误吗?如果该文件实际上位于WEB-INF
下,则浏览器将无法访问该文件。向世界公开WEB-INF
的内容会打开许多潜在的安全漏洞。如果您希望home.jsp
包含WEB-INF/home.htm
的内容,则需要执行以下操作:
<jsp:include page="/WEB-INF/home.htm" />