表单的提交方式
一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。
HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。
根据HTTP规范,POST可能会修改服务器上的资源的请求。比如知乎编写文章,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。
get和post的区别
1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据
实例
1.创建一个HTML文件,写出一个表单,这里为了格式整齐一点用了表格。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="RegisterController1" method="post">
<table border="1" cellpadding="0" cellspacing="0" width="50%" height="500px">
<tr>
<td colspan="2" align="center">用户注册</td>
</tr>
<tr>
<td>用户名:</td>
<td><input type="text" value="" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" value="" name="password"></td>
</tr>
<tr>
<td>生日:</td>
<td><input type="text" value="" name="birthday"></td>
</tr>
<tr>
<td>性别:</td>
<td>
<input type="radio" value="男" name="gender">男
<input type="radio" value="女" name="gender">女
</td>
</tr>
<tr>
<td>爱好:</td>
<td>
<input type="checkbox" value="篮球" name="hobby">篮球
<input type="checkbox" value="唱" name="hobby">唱
<input type="checkbox" value="跳" name="hobby">跳
<input type="checkbox" value="rap" name="hobby">rap
</td>
</tr>
<tr>
<td>地址:</td>
<td>
<select name="address">
<option value="北京">北京</option>
<option value="四川">四川</option>
<option value="广州">广州</option>
<option value="上海">上海</option>
</select>
</td>
</tr>
<tr>
<td>备注:</td>
<td>
<textarea cols="80" rows="20" name="remark">
</textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="注册">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
2.新建一个Java类extends继承HttpServlet,用来接收表单的数据,后在web.xml文件中注册对应的servlet或者在新建的类使用注解@WebServlet的方式来注册servlet
配置web.xml文件的方式如下
<servlet>
<servlet-name>RegisterController</servlet-name>
<servlet-class>com.RegisterController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterController</servlet-name>
<url-pattern>/RegisterController</url-pattern>
</servlet-mapping>
注意servlet-class标签中的连接路径,可以鼠标右键Java类,选择Copy Reference复制全类名
将全类名填土servlet-class标签中就可以了。
写注解@WebServlet的方式
3. 实现其中的service方法
@WebServlet("/RegisterController")
public class RegisterController extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
中文乱码的问题:
因为浏览器的编码和java的编码不一致,所以会出现乱码的情况
一般使用utf-8
*/
//浏览器的编码调整
resp.setContentType("text/html;charset=utf-8");
//java的编码调整
req.setCharacterEncoding("utf-8");
//使用变量来接收数据(注意getParameter方法中的字符串要和表单中name的值一致,不然会拿
//不到数据)
String username = req.getParameter("username");
String password = req.getParameter("password");
String gender = req.getParameter("gender");
//因为爱好是复选框所以用了一个String的数组来接收
String[] hobby = req.getParameterValues("hobby");
String address = req.getParameter("address");
String remake = req.getParameter("remake");
String birthday = req.getParameter("birthday");
//最后输出一下
System.out.println(username+","+password+","+gender+","+ Arrays.toString(hobby)+","+address+","+remake);
}
}
5.在地址栏输入正确路径
6.填入数据
最后得到提交的数据