1.HTML中的form表单简单介绍
HTML中的form表单在JAVA企业级开发中拥有十分重要的地位,HTML表单用于收集用户输入的信息,并将收集到的用户信息发送到web服务器中。在初级阶段,form表单常常使用在设计用户登录、用户反馈和用户选择上。
下面是一个基于form表单的一个简单登录系统:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>
一个简单登录系统
</title>
</head>
<body>
<form>
Username:<input type="text" name="user"><br>
Password:<input type="password" name="password"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
![](https://img-blog.csdnimg.cn/adb93f770b2f4ec7b3fba7c04703130d.png)
2.HTML表单中的action用法
在HTML表单中可以在form表单后添加一个action属性,action属性的值是表单提交给的url,当HTML表单提交信息后,提交的信息就会交给action的属性值,不填action或者填为action="",那么表单就会默认提交到当前页面。
下面是一个使用到action属性的登录系统例子:
Servlet代码:
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username = " + username );
System.out.println("password = " + password );
response.setContentType("text/html");
response.getWriter().println("Login Success!");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
HTML源码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="login">
用户名:<input type="text" name="username"> <br>
密 码:<input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>
浏览器演示效果:
当我们输入数据,然后点击登录在编译器的控制台中就会显示我们刚刚输入的数据,并且浏览器就会跳转到登录成功页面。
![](https://img-blog.csdnimg.cn/c507934498c446179defd77dc937b609.png)
![](https://img-blog.csdnimg.cn/fc29f4af7e6146fab8eb31562648d1ec.png)
3.form表单action的属性值填写中路劲问题
首先action需要能成功执行,需要action属性的值在对应的路径下能够找到,这就需要正确理解路径的写法。我们先理解路径中‘/’的具体意义。
一般情况,在服务器端看,/就是项目的根目录。如http://127.0.0.1:8080/Test/,Test后的/就是指的根目录。
从客户端看,/指的是服务器的虚拟跟目录webapps,如http://127.0.0.1:8080/,8080后的/就是虚拟跟目录。
在action路径书写中,./代表的就是本级目录,../代表的就是上一级目录。
例如在上一个例子中:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<form action="login">
用户名:<input type="text" name="username"> <br>
密 码:<input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>
action="login",这里不没有加/意思也是在本级目录中去找。而找的对象则是在web.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
值得注意的是,在web.xml文件中用的是/login,在form表单中应该为login。
又因为直接写login,就是在本级目录中找,所以action中login换为./login也可以。
![](https://img-blog.csdnimg.cn/8500f4c8c2de411a84126b09574b451f.png)
但是不能换为/login,因为换为/login那么就会在html所在目录的根目录下去寻找,就找不到web.xml文件了。
直接写/login会在webapp目录下找,无法找到web.xml文件。
同理当html文件在web.xml文件下一级目录中,那么久需要改为../了。
例子: