谈谈表单在提交到Servlet时action中的路径问题

前言

表单提交到Servlet,是一个很简单的功能,可是其中涉及到的一些细节你注意到了吗?今天就大家可能出现问题的一个地方进行一个说明。

实现

首先我们需要一个Servlet

public class HelloServlet implements Servlet {

很简单,多余的代码我就不给出了,因为我们今天讨论的重点是路径问题,然后我们需要在web.xml中注册和映射这个Servlet

<!--注册  -->
  <servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.study.javaweb.HelloServlet</servlet-class>
  </servlet>
  <!-- 映射 -->
 <servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    //注意:这里的url-pattern配置的是当前Servlet对外的访问路径
    <url-pattern>/hello</url-pattern>
 </servlet-mapping>

Servlet已经配置好了,接下来我们写一个表单,这里创建一个login.html,内容如下

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/hello" method="post">
        用户名:<label for="username"><input type="text" name="username"/></label> <br>
        密码:<label for="password"><input type="password" name="password"/></label> <br>
        <input type="submit"/>
    </form>
</body>
</html>

这里form的action我们需要指定Servlet的访问路径,也就是hello,那么这个时候可能有人会有问题了,这个hello到底应该不应该加/呢,下面给大家放出测试的效果图,首先来个带斜杠的,也就是action=”/hello”

这里写图片描述

我们发现,加上斜杠以后报错了,找不到Servlet,此时浏览器的地址变成了http://localhost:8888/hello,很明显这个路径是错的,没有带上我们的项目名称
那么原因是什么呢?

原因

在JavaWeb中,斜杠(/)在不同地方代表的不同的路径,总结如下:

  代表当前Web应用的根路径(/需要交给servlet处理),也就是localhost:8080/contextPath/
                a:请求转发
                b:web.xml中配置的
        代表当前站点的跟路径(浏览器处理),localhost:8080
                a:超链接
                b:表单中的action
                c:请求重定向

这下大家明白了没,这里如果我们加上写/,就相当于去站点的根目录下找hello这个Servlet,很显然没有,所以报错了,此时浏览器的地址栏为

http://localhost:8888/hello

,这个是有问题的,正确的应该是

http://localhost:8888/JavaWebStudy/hello

而要实现这样,我们就不能给action的路径中加入斜杠,或者这样写

<form action="/JavaWebStudy/hello" method="post">

也是可以的。

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值