问题:
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")