Servlet项目部署Tomcat后,JSP文件无法访问及跳转问题咨询
解决Servlet项目中JSP无法访问的问题
嘿,刚接触Web开发遇到这种路径问题太正常了,我来帮你一步步理清楚:
核心问题所在
你的index.html和second.jsp放在了resources目录下,这个目录编译后会被打包到WEB-INF/classes里——而Tomcat的WEB-INF目录是受保护的,不允许浏览器直接访问的,同时JSP需要Tomcat的JSP引擎来解析处理,放在这个目录下既没法直接访问,也得不到正确解析。另外,你的Servlet只映射了/myFirstServlet路径,所以/myFirstServlet/second.jsp这种路径也不会被你的Servlet处理,自然返回404。
解决方案步骤
1. 调整资源文件的存放位置
把index.html和second.jsp移动到Web项目的根目录:
- 如果你是普通Web项目(非Maven),放到
WebContent目录下; - 如果你是Maven项目,放到
src/main/webapp目录下。
这个目录是Tomcat默认的Web资源根目录,里面的文件可以被直接访问或正确解析。
2. 修改Servlet读取index.html的方式
原来的代码是从类路径读取resources下的文件,现在要改成从Web根目录读取,用ServletContext来获取资源更合适:
@WebServlet(name = "myFirstServlet", urlPatterns = "/myFirstServlet") public class MyFirstServlet extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { // 从Web根目录读取index.html InputStream resource = getServletContext().getResourceAsStream("/index.html"); String result = new BufferedReader(new InputStreamReader(resource)) .lines() .collect(Collectors.joining("\n")); servletResponse.setContentType("text/html"); PrintWriter pwriter = servletResponse.getWriter(); pwriter.println(result); } }
(注:你不需要手动实现javax.servlet.Servlet接口,因为GenericServlet已经实现了它)
3. 正确设置index.html中的超链接
因为你的Servlet访问路径是http://localhost:8080/你的项目名/myFirstServlet,当前页面的上下文路径是/你的项目名/myFirstServlet,所以超链接要注意相对路径:
- 用绝对路径(推荐,避免路径混乱):
把<a href="/你的项目名/second.jsp">跳转到second.jsp</a>你的项目名换成你实际的项目名称(比如你部署后访问的路径是http://localhost:8080/MyWebApp/myFirstServlet,那项目名就是MyWebApp) - 用相对路径:
<a href="../second.jsp">跳转到second.jsp</a>../表示回到上一级目录,也就是Web根目录,这样就能找到second.jsp了。
4. 验证访问路径
现在你可以:
- 通过
http://localhost:8080/你的项目名/myFirstServlet访问Servlet输出的index.html,点击链接就能跳转到second.jsp; - 也可以直接访问
http://localhost:8080/你的项目名/second.jsp来验证JSP是否能正常解析。
内容的提问来源于stack exchange,提问作者DaveLillo
相关产品推荐
相关产品推荐

