任庆博

导航

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 2021-12-14 17:05  不捡自然无  阅读(1534)  评论(0编辑  收藏  举报