关于jsp表单提交中action所指向Servlet路径问题的总结

初学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


  • 31
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值