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),下图就是一个标准的表单处理流程:

9217316598ac74fa4515271018472ed6.png

你登陆天码营时,就需要在表单中输入用户名和密码,天码营后端的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是一样的:

25cac16cb2b5dafaeb0cecbd10281966.png

在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("");

}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部