Servlet处理表单数据

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的值的数组

其他待补充......

原文地址:https://www.cnblogs.com/Mimick/p/8284419.html

时间: 2024-10-15 06:07:10

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

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

// javaBean代码 package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class AcceptUserRegist extends HttpServlet { public String codeToString(String str) // 处理中文字符串的函数 { String s=str; try { byte tempB[]=s.getByt

用Servlet获取表单数据

在webroot下新建userRegist2.jsp 代码如下: <%@ page contentType="text/html;charset=gb2312"%> <script language="javascript"> function on_submit(){//验证数据的合法性 if (form1.username.value == ""){ alert("用户名不能为空,请输入用户名!")

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

很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序.浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法. 1.GET 方法:GET 方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用 ? 字符分隔,如下所示:http://www.test.com/hello?key1=value1&key2=value2 GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中.如果您

Servlet表单数据

1.传递数据需要用到GET和POST方法 GET 方法向页面请求发送已编码的用户信息.页面和已编码的信息中间用 ? 字符分隔. POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息. 2.使用Servlet读取表单数据 getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值. getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框. get

Servlet实现表单提交(注册小功能),后台获取表单数据

用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="/RequestDemo/RequestDemo3"

怎么获取表单数据

import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpS

使用jQuery实现跨域提交表单数据

我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据. 在jQuery中,我们使用json数据类型,通过getJSON方法来实现从服务端获取或发送数据,而当要向不同远程服务器端提交或者获取数据时,要采用jsonp数据类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务器端应当在JSON数据前加上回调函数名,以便

Struct2提交表单数据到Acion

Struct2提交表单数据到Action,Action取表单的数据,传递变量.对象 HTML.jsp <form action="reg.do" method="post"> <input> LoginAction get post 1.action里通过属性获取get.set方法获取. 2.模型驱动 3.model对象 action中要有和表单域对应的属性名,并且要有相应的符合javabean规范的set和get方法 http://blog

jQuery 序列化表单数据 serialize() serializeArray()

1.serialize()方法 格式:var data = $("form").serialize(); 功能:将表单内容序列化成一个字符串. 这样在ajax提交表单数据时,就不用一一列举出每一个参数.只需将data参数设置为 $("form").serialize() 即可. 2.serializeArray()方法 格式:var jsonData = $("form").serializeArray(); 功能:将页面表单序列化成一个JSON