java 处理表单_Servlet处理表单数据

Servlet表单数据

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

使用 Servlet 读取表单数据

不区分GET和POST

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

getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值。

getParameterValues():如果参数出现一次以上,则调用该方法,并返回多个值,例如复选框。

getParameterNames():如果您想要得到当前请求中的所有参数的完整列表,则调用该方法。

注意:如果表单提交的数据中有中文数据则需要转码:

Stringname =newString(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("

" + request.getMethod() + "

");

//遍历请求参数并打印回浏览器

Enumeration 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("

" + name + ":" + value + "

");

} else {

for (String value : values) {

if(isPOST)

value = new String(value.getBytes("ISO8859-1"), "utf-8");

out.println("

" + name + "s:" + value + "

");

}

}

}

// 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

form

保密

游戏

音乐

写作

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

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

其他待补充......

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值