本文共 1754 字,大约阅读时间需要 5 分钟。
由发表在
在Internet中,用户除了访问Web应用获取信息,还会主动创造信息——这种交互是通过HTML表单来完成的。在浏览器用户填写表单,通过HTTP通讯协议传送到服务器,相应的Servlet获取数据并处理,最后将结果返回浏览器。这一节我们将学习如何在Servlet/JSP中处理表单数据。
HTML表单用于收集不同类型的输入,应用场景非常的广泛。HTML表单不仅仅是在浏览器(客户端)上展示一个输入界面,更加重要的是用户输入数据会通过HTTP通讯协议传送到服务器上的处理程序(Servlet/JSP),下图就是一个标准的表单处理流程:
为了在博客中添加文章,我们需要一个表单来输入文章的标题、内容等等信息,表单的内容都是静态的,所以不妨直接将create.html
内容作为Web应用的静态资源:
其中非常重要的是<form>
标签的action
属性,它决定了表单数据交给服务器的哪一个URL进行处理(也就是对应的Servlet/JSP),同时表单还包含一个type="submit"
的<button>
,按下这个按钮的默认行为是提交表单,向指定的URL发出HTTP请求。
上述表单提交后,我们会发现浏览器的地址变成了:
http://localhost:8080//create.jsp?title= <用户输入内容> &content= <用户输入内容>用户输入内容> 用户输入内容>
在默认情况下,<form>
提交后发送的HTTP请求的方法(Method)是GET
。对于GET请求,数据会以name/value
对的格式附加在URL之后,其中name
由表单输入对象(例如<input>
标签)的name
属性决定。虽然HTTP协议没有对URL的长度进行限制,但现代浏览器以及Web服务器都存在一定的限制。
从安全性方面考虑,也应该使用POST提交表单数据。例如用户登录的表单如果使用GET请求,那么密码就会被明文附加到URL上,这样通过浏览器的历史记录有可能查看到明文密码。
另外,如果需要通过文件输入框上传文件到服务器,必须是使用POST方法。
在表单中指定HTTP请求的方法非常简单:
POST方法传输数据的方式和GET方法也不相同,表单数据会作为HTTP请求的内容(body)部分,但数据编码的方式和GET是一样的:
当HTTP请求发送到服务端时,相应的JSP/Servlet需要获取表单数据并进行处理。处理的办法都是通过HttpServletRequest
对象的getParameter()
方法。本节的例子以JSP为例,相应的Servlet代码也很容易写出。
文章标题:<%= request.getParameter("title") %>
文章内容:<%= request.getParameter("content") %>
在create.jsp
中可以加入处理逻辑:
<%!boolean logic(String title, String content) { return true;}%><% if (request.getMethod().equals("POST")) { String title = request.getParameter("title"); String content = request.getParameter("content"); if (logic(title, content)) { out.println("文章创建成功"); } else { out.println("文章创建失败"); }}%>
在上面的代码中,logic()
方法用于处理表单数据,根据返回结果需要返回不同的内容提示用户。当然也可以把这段代码嵌入到更复杂的页面里。
更多文章请访问