任庆博

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

jsp表单无法访问Servlet;路径问题

在使用servlet处理jsp时发现很多提交表单时发生的错误都是因为提交路径出错造成的。

就是一直报404,的问题。

web.xml配置如下:

<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>Com.Ren.Servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/Servlet/LoginServlet</url-pattern>
</servlet-mapping>


(1)当login.jsp和login.html中form表单配置如下


<form action="Servlet/LoginServlet" method="get">
用户名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>

是可以正常访问

(2)当login.jsp和login.html中form表单配置如下时(多加了一个/):
<form action="/Servlet/LoginServlet" method="get">
用户名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>
就无法访问,报404

(3)当login.jsp中form表单配置如下时:
<form action="${pageContext.request.contextPath}/Servlet/LoginServlet" method="get">
用户名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>

或者 login.html中表单为:
<form action="/虚拟目录/Servlet/LoginServlet" method="get">
用户名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>

或者(前面加一个.)
<form action="./Servlet/LoginServlet" method="get">
用户名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>

都是可以正常访问的


总结:

(1) /    代表根目录(就是tomcat软件中webapps目录)

(2) .  代表当前目录(个人设置的虚拟目录其实就等于idea中webapp目录)


补充:
关于重定向和转发遇到的路径问题
有一个很好地观点:https://blog.csdn.net/qq_42744046/article/details/105110803
是说:在用地址的时候,需要判断是给浏览器用还是给服务器用。如果是给浏览器用需要加上虚拟地址;如果是给服务器用就不需要加上虚拟地址;
这也很好理解:浏览器是访问别人的资源,地址当然要详细,“/” 所代表的根目录是tomcat服务器下的webApps目录。
而服务器的转发只是转发自己内部的资源,所以它的"/"根目录就是代表虚拟目录;
简而言之:就是服务器项目中使用的根目录“/”就是虚拟目录;浏览器使用的根目录“/”是tomcat下webapps目录;


 

 

 今天练习文件上传,关于Io流中“/”路径问题,因为我做的事WEB项目,所以该处的“/”根路径表示tomcat所安装目录的根路径,此处是D盘;

还是,看路径的时候,需要想到是谁在用,就能想明白根路径在哪了;

 

 

 

posted on   不捡自然无  阅读(1696)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示