java中post请求实战_Post请求与表单处理 | 关于Servlet/JSP实战教程:搭建博客系统的第5部分内容 | 天码营 - 实战开发技术学习服务平台...
表单简介
在Web应用中,用户除了访问Web应用获取信息,还会主动创造信息——这种交互是通过HTML表单来完成的。在浏览器用户填写表单,通过HTTP通讯协议传送到服务器,相应的Servlet获取数据并处理,最后将结果返回浏览器。这一节我们将学习如何在Servlet中处理表单数据。
表单标签(又称表单控件)是一类特殊HTML标签,在HTML中负责接受用户输入。
比如用户注册的文本框、密码框,以及填写信息时需要的数字、邮件、选择框等等。
先来看一个表单的例子:
First name:
Last name:
Submit
这个表单看起来是这个样子
First name:
Last name:
Submit
通常所有的表单控件都应放在一个
标签中;可以定义表单提交时HTTP请求的URL(action属性),以及HTTP请求方法(method属性);其中的都是用来接受用户输入的,设置type="text"表示接受纯文本(还可以是number, email等);
最后的用来显示一个按钮,点击该按钮浏览器会提交表单(发送HTTP请求)到服务器。
常用的的type属性包括:password, text, select, hidden, radio, file。
其实HTML5又新增了十几种type,这些type可能仍然有兼容性问题,不过长远来看是推荐使用的:
color, date, datetime, datetime-local, month, week, time, email, number, range, search, tel 以及 url。
表单的使用场景
HTML表单用于收集不同类型的输入,应用场景非常的广泛。HTML表单不仅仅是在浏览器(客户端)上展示一个输入界面,更加重要的是用户输入数据会通过HTTP通讯协议传送到服务器上的处理程序(Servlet/JSP),下图就是一个标准的表单处理流程:

你登陆天码营时,就需要在表单中输入用户名和密码,天码营后端的Servlet会判断用户名密码是否匹配来做后续操作。
创建表单——新建博客文章页面
回到博客应用,为了在博客中添加文章,我们需要一个表单来输入文章的标题、内容等等信息,表单的内容都是静态的。请将参考代码中的create.html和相应的静态资源(css、img和lib目录)放入到WebContent目录下,这样就可以通过http://localhost:8080/blog/create.html访问到该页面。
标题
内容
保存
其中非常重要的是
标签的action属性,它决定了表单数据交给服务器的哪一个URL进行处理(也就是对应的Servlet),同时表单还包含一个type="submit"的,按下这个按钮的默认行为是提交表单,向指定的URL发出HTTP请求。同时我们创建一个Servlet来处理新建文章的请求,这里简单输出一句话:
@WebServlet("/create")
public class CreateBlogServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
// 如果不指定method,则默认是Get请求
response.setCharacterEncoding("UTF-8");
response.getWriter().append("创建博客");
}
}
HTTP POST方法
上述表单提交后,我们会发现浏览器的地址变成了:
http://localhost:8080//create?title=&content=
在默认情况下,
提交后发送的HTTP请求的方法(Method)是GET。对于GET请求,数据会以name/value对的格式附加在URL之后,其中name由表单输入对象(例如标签)的name属性决定。注意
注意参数的命名是name属性决定,而不是id属性决定。
一种更好的选择是使用POST方法来提交请求。
虽然HTTP协议没有对URL的长度进行限制,但现代浏览器以及Web服务器都存在一定的限制。如果内容太长的话就可能超过浏览器的限制。
从安全性方面考虑,也应该使用POST提交表单数据。例如用户登录的表单,如果使用GET请求,那么密码就会被明文附加到URL上,这样通过浏览器的历史记录有可能查看到明文密码。
此外,如果需要通过文件输入框上传文件到服务器,必须是使用POST方法。
在表单中指定HTTP请求的方法非常简单,设置method属性即可:
POST方法传输数据的方式和GET方法也不相同,表单数据会作为HTTP请求的内容(body)部分,但数据编码的方式和GET是一样的:

在Servlet中获取表单数据
当HTTP的Post请求发送到服务端时,相应的Servlet的doPost()方法就会被调用,此时需要获取表单数据并进行处理。处理的办法也是通过HttpServletRequest对象的getParameter()方法。
doPost()方法,首先获取博客标题和博客内容,然后返回显示这篇博客的HTML内容:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
String title = request.getParameter("title");
String content = request.getParameter("content");
Blog blog = new Blog(title, content);
blogRepository.add(blog);
response.getWriter().append("
天码营博客");response.getWriter().append(String.format("
%d. %s
", blog.getId(), blog.getTitle()));response.getWriter().append(String.format("
这是天码营博客的第一篇文章
", blog.getContent()));response.getWriter().append("");
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
