Technorati 标签: 

一、概述

    Servlet 有一个比较好的功能就是可以自动处理表单提交的数据。我们只需要调用HttpServletRequest#getParameter(String name),就可以获得指定参数的值(String),注意此方法是大小写敏感的。其返回值(String)与其对应的URL编码一致。当参数name存在可没有值的时候,会返回一个空串(“”),当参数name 不存在时,会返回 null。当某一个参数有多个值时,可以调用方法getParameterValues(String name),返回字符串数组。当指定参数不存在时,getParameterValues(String name)返回null;当指定参数只有一个值时,返回一个只有一个元素的数组(String)。

    接着谈一下的是,尽管大部分时候,servlet 都只需要获取指定参数的值。不过在调试时,获取整个参数列表也是一个不错的选择。调用方法 getParameterNames()可以获取表单参数名的枚举列表,每一条目都会强制转换为 String,可以用于getParameter(String name)和getParameterNames()。需要注意的是,所返回的枚举列表在任何情况下都不能保证各个元素的排列数序。

二、Demo

    Demo1,读取三个指定参数的值。如下,我们设计的一个简单的form,

    register.jsp代码如下:

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
collecting three parameters

collecting three parameters

    对应的,看一下Servlet ThreeParams.java 代码如下:

1: @WebServlet("/ThreeParams")
2: public class ThreeParams extends HttpServlet {
3:     private static final long serialVersionUID = 1L;
4:     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
5:         PrintWriter out = response.getWriter();
6:         response.setCharacterEncoding("text/html;chaset=gbk");
7:         String title = "collecting three parameters";
8:         out.print("

"

9:                 + title +"
  • name:"
  • 10:                 + request.getParameter("username") +""
    11:                 +"
  • password:"
  • 12:                 + request.getParameter("password") +""
    13:                 +"
  • email:"
  • 14:                 + request.getParameter("email") +"");
    15:         out.print("");
    16:     }
    17: }

         其输出效果如图:

        

        以上Demo演示了,如何获取一个指定参数的值,不过都一个个来获取的。有时候我们也许需要一次性获取所有参数的值,那怎么做呢???

       Demo2:一次性获取所有参数。form 表单设计如下:

        info.jsp代码如下:

    <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
     
     
     
    a sample form using post
     
     
  • 用户名:
  • 性别:帅哥
  • 美女
  • 爱好:篮球
  • 足球
  • 密码:
  • 确认密码:
  • email:
  • 自我描述:
  •  
     
     

        现在来看一下Servlet ShowParemeter.java 的代码设计:

    @WebServlet("/ShowParameters")
    public class ShowParameters extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "get all parameters of a form";
    out.println("

    " + title + "

    "
    + "
    ");
    Parameter name Parameter values
    Enumeration
    parameterNames = request.getParameterNames();
    while (parameterNames.hasMoreElements()) {
    String name = (String) parameterNames.nextElement();
    out.println("" + name + "");
    String[] parameterValues = request.getParameterValues(name);
    if (parameterValues.length == 1) {
    String parameterValue = parameterValues[0];
    if (parameterValue.length() == 0) {
    out.println("No value");
    } else {
    out.println("" + parameterValue + "");
    }
    } else {
    out.println("
      ");
    for (int i = 0; i < parameterValues.length; i++) {
    out.println("
  • " + parameterValues[i] + "
  • ");
    }
    out.println("");
    }
    }
    out.println("");
     
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
    }
    }

        其对应的输出如下:

        注意的是:getParameterNames()从不保证获取参数的顺序。