初学java web,在使用servlet处理jsp时发现很多提交表单时发生的错误都是因为提交路径出错造成的。
现以自己为例说明:
项目目录结构如下:
web.xml文件主要内容如下:
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>RegisterLoginServlet</servlet-name>
<servlet-class>RegisterLoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterLoginServlet</servlet-name>
<url-pattern>/servlet/RegisterLoginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
1、在主页index.jsp或者pages/login.jsp中
使用如下语句:
<form action="servlet/RegisterLoginServlet" method="post">
...
</form>
都可以正常跳转到目标servlet,链接如下:
2、而如此使用则会报404错误(在最前面加了一个 : /):
<form action="/servlet/RegisterLoginServlet" method="post">
...
</form>
浏览器报错如下(重点注意链接):
链接中缺失了项目名!
3、再将代码改为:
<form action="/SDUMap/servlet/RegisterLoginServlet" method="post">
...
</form>
测试通过,与第1次测试相同
出错原因分析:
/代表根目录,如果使用/开头,对于Tomcat而言就是webApp那个目录,直接找相应的servlet当然找不到,只要再加上项目名即可。
总结:
JSP页面提交表单给servlet时有两种写法:
(一). 相对路径: <form action=servlet/RegisterLoginServlet method=post>...</form>
(二). 绝对路径:
1) <form action="/项目名/servlet/RegisterLoginServlet " method=post>...</form>
其实绝对路径还有第二种方法:
2) <formaction="<%=request.getContextPath()%>/servlet/RegisterLoginServlet " method=post>...</form>
关于Servlet中转发和重定向的路径问题还可参考该文:http://m.blog.csdn.net/article/details?id=51802534