WebContent的子目录下jsp文件无法访问Servlet报404错误问题小结

问题:

WebContnet下的test文件夹中的folderfile.jsp访问不到demoServlet
在这里插入图片描述

项目结构及内容:

在这里插入图片描述
在这里插入图片描述

解决方案:

将deomServlet文件中的

@WebServlet("/demoServlet")

改成

@WebServlet("/test/demoServlet")

结果:

访问成功
在这里插入图片描述

解决思路:

jsp是从其文件所在目录下搜索WEB-INF文件并访问其中的servlet.class文件。(由于对Servlet和jsp的机制不算太熟悉,这里只是对表面现象的描述,但这个确实是解决问题的思路。实际上jsp文件在运行时也要编译成servlet文件才能运行)
在此项目中WEB-INF在项目根目录上,而folderfile.jsp在根目录的test文件夹下,jsp访问servlet需要在被访问的servlet中指定文件夹路径,或者在jsp的表单的action向上跳一级到根目录。

jsp和servlet运行原理:
https://blog.csdn.net/zxfly6/article/details/80990991

分析过程:

在demoServlet中我打印了当前demoServlet文件的路径:

D:/javahome/apache-tomcat-9.0.27/wtpwebapps/pathtext/WEB-INF/classes/

查看项目目录
在这里插入图片描述

在此文件夹下找到demoServlet

D:\javahome\apache-tomcat-9.0.27\wtpwebapps\pathtext\WEB-INF\classes\Servlet

在这里插入图片描述
推测:jsp是从其文件所在目录下搜索WEB-INF文件并访问其中的servlet.class文件
验证:将folderfile.jsp中的
在这里插入图片描述
改成:

<form action="../demoServlet">

将demoServlet路径不变中的仍为

@WebServlet("/demoServlet")

结果:
访问成功
在这里插入图片描述
推测成立,但这只是表面现象。实际的运行过程比较复杂,我还无法详细解释。但这种写法不推荐,一般的写法是在配置servlet路径时添加上jsp文件所在文件夹的名称,如上文的

@WebServlet("/test/demoServlet")
发布了24 篇原创文章 · 获赞 4 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_44804750/article/details/104545420