Servlet 表单数据

很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序。浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。

使用 Servlet 读取表单数据

不区分GET和POST

Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析:

  • getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。
  • getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。
  • getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。
  • 注意:如果表单提交的数据中有中文数据则需要转码:

    String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
  • tomcat默认用ISO8859-1解码浏览器发来的数据,用此编码重新编码,再用实际编码解码为字符串即可获得原始数据

  • 注意!POST方式获得的数据会被受上述过程影响,GET方式附加在URL上的数据似乎没有被tomcat默认解码,不需要调整编码即可使用


读取所有的表单参数

以下是通用的实例,使用 HttpServletRequest  request的 request.getParameterNames() 方法读取所有可用的表单参数name的枚举(自动去重名)。该方法返回一个枚举,其中包含未指定顺序的参数名。

一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的name。

再用String[] request.getParameterValues(name)获得每个name可能具有的values 根据返回String[] values的values.length分单value和多value进行处理。


附简单例子:

ParseForm.java

package hentai.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class Main
*/
@WebServlet("/ParseForm")
public class ParseForm extends HttpServlet {
private static final long serialVersionUID = 1L; //
private String msg = ""; /**
* Default constructor.
*/
public ParseForm() {
// TODO Auto-generated constructor stub
} @Override
public void init() throws ServletException {
// TODO 自动生成的方法存根
super.init();
//
msg = "1314233";
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
//判断提交方式以决定如何转换编码
boolean isPOST = false;
if(request.getMethod().toUpperCase().equals("POST"))
isPOST = true;
//设置响应格式与编码
response.setContentType("text/html;charset=utf-8");
//获得响应输出
PrintWriter out = response.getWriter();
//输出
out.println("<h1>" + request.getMethod() + "</h1>");
//遍历请求参数并打印回浏览器
Enumeration<String> allNames = request.getParameterNames();
while (allNames.hasMoreElements()) {
String name = allNames.nextElement();
String[] values = request.getParameterValues(name);
if (values.length == 1) {
String value = values[0];
if(isPOST)
value = new String(value.getBytes("ISO8859-1"), "utf-8");
out.println("<p>" + name + ":" + value + "</p>");
} else {
for (String value : values) {
if(isPOST)
value = new String(value.getBytes("ISO8859-1"), "utf-8");
out.println("<p>" + name + "s:" + value + "</p>");
}
} }
// out.println(request.getContextPath());
//response.sendRedirect("form.html");
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} @Override
public void destroy() {
// TODO 自动生成的方法存根
super.destroy();
} }

 form.html

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<title>form</title>
</head> <body> <form method="post" action="ParseForm" id="dataForm">
<input type="text" name="uName" />
<input type="password" name="uPwd" /> <input type="radio" name="sex" value="1" />男
<input type="radio" name="sex" value="0" />女
<input type="radio" name="sex" value="-1" />保密 <input type="checkbox" name="hobby" value="game" />游戏
<input type="checkbox" name="hobby" value="music" />音乐
<input type="checkbox" name="hobby" value="write" />写作 <input type="submit" value="submit" />
<!--<input type="button" value="提交" />
<script>
var dataFormChilds = document.getElementById("dataForm").getElementsByTagName("input");
for (var i = 0; i < dataFormChilds.length; i++) {
if (dataFormChilds[i].getAttribute("type") == "button") {
dataFormChilds[i].onclick = function () {
alert(this);
this.parentElement.submit();
}
}
}
</script>-->
</form> </body> </html>

单选按钮名字需要一样,Servlet获得参数时获得是被选中的radio的value

多选框,......获得的是被选中的框的value的值的数组

其他待补充......

Servlet处理表单数据的更多相关文章

  1. 1.3(学习笔记)Servlet获取表单数据

    一.Servlet获取表单数据 表单提交数据经由Servlet处理,返回一个处理结果显示在页面上, 那么如何获取表单提交的参数进出相应的处理呢? 主要用到以下方法: String  getParame ...

  2. 用Servlet获取表单数据

    用Servlet获取表单数据 在webroot下新建userRegist2.jsp 代码如下: <%@ page contentType="text/html;charset=gb23 ...

  3. JSP简单练习-用Servlet获取表单数据

    // javaBean代码 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.* ...

  4. Servlet 笔记-读取表单数据

    Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析: getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值. get ...

  5. Servlet学习笔记(二):表单数据

    很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. 1.GET 方法:GET 方法 ...

  6. Servlet 表单数据

    很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. GET 方法 GET 方法向页 ...

  7. IT兄弟连 JavaWeb教程 Servlet表单数据

    很多情况下,需要传递一些信息,从浏览器到Web服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到Web服务器,分别为GET方法和POST方法. 1.GET方法 GET 方法向页面请求发送已编 ...

  8. Servlet表单数据

    1.GET 方法 GET 方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用 ? 字符分隔,如下所示: http://www.test.com/hello?key1=value1&k ...

  9. Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据

    用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...

随机推荐

  1. CodeForces - 891C: Envy(可撤销的并查集&最小生成树)

    For a connected undirected weighted graph G, MST (minimum spanning tree) is a subgraph of G that con ...

  2. 242. Valid Anagram Add to List

    Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...

  3. npm init node 通过指令创建一个package.json文件及npm安装package.json

    描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...

  4. 如何用nodejs启一个前端服务

    1.新建文件夹,如 notice 2.新建页面和js文件,如 index.html server.js 3.index.html页面内容随你写,如: <!DOCTYPE html> < ...

  5. 前端优化规范 webApp

  6. STM32 -- 故障记录

    1.串口2无法发送数据 1)串口2和串口1使用的时钟总线不同: usart1:RCC_APBPeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); usart2:R ...

  7. Python内置函数:get()

    文章转载于:https://www.cnblogs.com/wushuaishuai/p/7738118.html(博主:IT技术随笔) 描述 Python 字典 get() 方法和 setdefau ...

  8. CodeForces - 510B Fox And Two Dots (bfs或dfs)

    B. Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. Hanoi双塔问题(递推)

    Hanoi双塔问题 时间限制: 1 Sec  内存限制: 128 MB提交: 10  解决: 4[提交][状态][讨论版][命题人:外部导入] 题目描述 给定A,B,C三根足够长的细柱,在A柱上放有2 ...

  10. C# 获取图片某像素点RGB565值

    Project Source Download: http://download.csdn.net/detail/mostone/6360007 [csharp] view plain copy pu ...