`
sllizhimei
  • 浏览: 166040 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Servlet介绍(2)-----读取表单参数

阅读更多
一、HttpServlet读取html中form的参数
1、html中form参数提交的两种方式
   html中form提交参数一般通过post和get这两种方法,其中get提交参数的方法对应于HttpServlet的doGet方法,而post提交参数的方法对应于HttpServlet的doPost方法。get方法提交参数的话会在url上显示,假如我们有的数据不想让别人看到(如密码等)则我们不应该让form通过get方法提交(如果我们的html中form的method属性不显示制定的话,默认值为get)。post方法提交的参数不会在url上显示。

2、HttpServlet中如何读取form中的参数
   对于HttpServlet中读取html form中传递过来的参数是一件很简单的事情,可以不必关心,form的提交方式为get或者post(有的情况下还是稍微有一点不同的,比如servlet和jsp中常见的一个问题:中文乱码的问题,有的form使用post提交到servlet后,中文的参数值可以正常显示,但是如果换成get提交的话,中文可能出现乱码)。
   我们都可以通过HttpServletRequest接口的String getParameter(String name)和String[] getParameterValues(String name)这两个方法来读取参数的值。String getParameter(String name) name为参数名,返回的结果是参数的值。

   如果一个参数有很多个值得话,这里只返回一个。如果参数名存在,但是对应的值没有的话,返回值为””(也就是一个空字符串)。假如参数名本身不存在的话,返回值为null。
   需要注意的是这里对参数名的大小写是敏感的,也就是说html的form中参数名如果为Name的话,使用getParameter(“name”)是取不到对应的值的。String[] getParameterValues(String name)当使用这个方法时,一般是name这个参数名可能存在多个参数值,它将返回一个由参数值组成的数组。

   举一个简单的例子,注册一个网站的时候,当需要客户的兴趣爱好资料的时候,一般会给出一个多选框(假设参数名为habit),让用户自己选择。当然每个人的爱好不同,每个人爱好的个数可能是0-N个(让我们先假设一个人可以没有任何爱好),那么我们的HttpServlet读取form的habit的时候,显然应该使用String[] getParameterValues(String name)而不是String getParameter(String name),如果客户有一个到多个爱好时,我们会得到一个表示他爱好的String[]。但是假如我们的客户没有任何爱好的话。。。这个时候的返回值可能是null。

   所以我们在处理的时候需要先判断返回值是否为null(这个真是一个不友好的做法,友好的做法是返回一个0个元素的String[],很遗憾目前Servlet的API没有这么规定),加入我们不对返回值进行判断而直接开始对String[]做迭代的话,我们会得到一个java.lang.NullPointerException。当然当name的参数名不存在的时候,返回值显然为null。

   同样String[] getParameterValues(String name)对name的值得大小写也一样是敏感的。读取form表单参数还可以使用Map getParameterMap()方法,这里不多做介绍。
   加入对form表单可能提交上来的参数名不是很明确的话,可以考虑使用Enumeration getParameterNames()方法来获取form表单的参数名。form提交的所有参数名将存放于一个java.util.Enumeration对象中(对Enumeration对象的迭代方法不做介绍)。

   最后还是以一个例子来结束HttpServlet读取html中form的参数的介绍。

   在这之前为了避免万恶的汉字乱码的问题,让我们先修改tomcat的一个配置文件。添加<tomcat install dir>/conf/server.xml中的Connector结构的属性

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" /> 在/>之前添加属性useBodyEncodingForURI="true",修改后如下:

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true" />

提交form用的html页面,param.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<META http-equiv="Content-Type" content="text/html; charset=GBK" />
<script type="text/javascript">...
      
      
function changemethod()
{
       var a = document.getElementsByName("methodtype");
       for(i = 0; i < a.length; i++)
       {
              if(a[i].checked==true)
              {
                     fm.method=a[i].value;
                     break;
              }
       }
}
</script>

        <title>parameter.html</title>
</head>



<body bgcolor="#FDF5E6">

<h2>参数传递示范</h2>

<form name ="fm" method="get" action="ShowParameter">
 
  <p>姓名:<input type="text" name="username" size="15" /> </p>
  <p>密码:<input type="password" name="password" size="15" /> </p>
  <p>性别:<input type="radio" name="sex" value="Male" checked /> 男
                  <input type="radio" name="sex" value="Female" /> 女 </p>
 
  <p>年龄:
      <select name="old">
             <option value="10">10 - 20</option>
             <option value="20" selected>20 - 30</option>
             <option value="30">30 - 40</option>
             <option value="40">40 - 50</option>
      </select>
  </p>
 
  <p>兴趣:
      <input type="checkbox" name="habit" value="Reading" />看书
      <input type="checkbox" name="habit" value="Game" />玩游戏
      <input type="checkbox" name="habit" value="Travel" />旅游
      <input type="checkbox" name="habit" value="Music" />听音乐
      <input type="checkbox" name="habit" value="Tv" />看电视 
  </p>
 
  <p>提交方式:
  <input name="methodtype" value="get" type="radio" onclick="changemethod()" checked />
       Get
  <input name="methodtype" value="post" type="radio" onclick="changemethod()" />
       Post
  </p>
  <p>
  <input value="确认" type="submit" />
  <input value="清除" type="reset" />
  </p>
</form>


</body>
</html>
在这个html页面中写了一个写了一个简单的javascript函数,其实现的功能是当用户选择提交方式为get时,采用get方式提交;当选择为post时,采用post方式提交。请注意采用不同方式提交时URL的变化。 我们的HttpServlet来了:

package squall.servlet.basic;



import java.io.IOException;

import java.io.PrintWriter;



import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class ShowParameter extends HttpServlet

{

       protected void doGet(HttpServletRequest req, HttpServletResponse resp)

                     throws ServletException, IOException

       {

              System.out.println("doGet invoke!");

             

              showParam( req,  resp);

       }



       protected void doPost(HttpServletRequest req, HttpServletResponse resp)

                     throws ServletException, IOException

       {

              System.out.println("doPost invoke!");

              showParam( req,  resp);

       }

      

       private void showParam(HttpServletRequest req, HttpServletResponse resp) throws IOException

       {

              req.setCharacterEncoding("GBK");

              resp.setContentType("text/html; charset=GBK");

              PrintWriter out = resp.getWriter();

              String docType = "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ";



              String name = req.getParameter("username");

              String password = req.getParameter("password");

              String sex = req.getParameter("sex");

              String old = req.getParameter("old");

              String habit[] = req.getParameterValues("habit");

              String unknow = req.getParameter("unknow");

              out.println(docType + "<HTML> " + "<HEAD><TITLE> showparam"

                            + "</TITLE></HEAD> " + "<BODY BGCOLOR="#FDF5E6"> "

                            +"     姓名:" + name + "   </br>"

                            +"     密码:" + password + "   </br>"

                            +"     性别:" + sex + "   </br>"

                            +"     年龄:" + old + "   </br>"

                            +"     兴趣:"

                            );

              if(habit == null)

                     out.println(habit);

              if(habit != null)

              for(int i = 0; i < habit.length; ++i)

                     out.println(habit[i] + " ");

              out.println("</br>");

              out.println("     未知:" + unknow + "   </br>");

              out.println("     提交方式:" + req.getParameter("methodtype") + " </br>");

              out.println("</body></html>");

       }

      

}


部署:将param.html存放于<tomcat install dir>/webapps/train目录下。ShowParameter部署后,mapping至/ShowParameter。ShowParameter这个Servlet除了在显示html页面外,还会在tomcat的控制台打印调用了doGet还是doPost方法。
分享到:
评论

相关推荐

    Servlet-1-filter-3.rar

    例如,用户填写表单并提交后,Servlet可以处理这些数据并生成相应的网页反馈。 然而,当涉及到跨语言环境的Web应用时,乱码问题经常出现。GET和POST请求中携带的数据可能会因为编码不一致导致显示乱码。GET请求通常...

    Java Web应用开发 48 课堂案例-应用Servlet读取指定HTML表单数据.docx

    2. **Servlet根据名称读取表单元素**:在Servlet中,可以使用`HttpServletRequest`接口提供的`getParameter`方法来根据表单元素的名称获取其值。 ```java String userName = request.getParameter("NAME"); ...

    Servlet-Basics-Chinese

    3. **初始化参数**: 可以通过`init`方法设置Servlet的初始化参数。 4. **资源释放**: `destroy`方法用于在Servlet实例被销毁时释放资源。 **Servlet的主要功能**包括: - **读取客户端发送的显式数据**:如表单提交...

    JSP与Servlet复习

    - **web.xml**: Servlet容器启动时读取的应用程序配置文件,包含Servlet的映射关系。 - **lib目录**: 存放JAR包 (`servlet-api.jar` 等),支持Servlet的运行。 - **webapps目录**: 部署Web应用程序的地方。 **2....

    JSF教程国外大学的一个课件 Servlet+JSP-Review

    可以通过访问 [http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/](http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/) 获取更多关于Servlet 2.5版本的信息。 - 此外,Marty Hall提供...

    Servlet表单Get和Post方式读取

    2. **参数值为null**:如果表单字段没有值或者用户没有填写,`getParameter()`会返回`null`,所以需要进行空值检查。 3. **多个相同名字的参数**:对于POST请求,如果表单中有多个同名参数,`getParameter()`只会...

    超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题(转)

    - 对于POST请求,由于在读取请求参数前可以设置编码,因此在Servlet中使用上述方法可以解决问题。 - 但是,如果需要同时处理GET和POST,以及避免每个Servlet都写相同的代码,那么创建一个全局Filter是最好的解决...

    Java Web应用开发 49 课堂案例-应用Servlet读取所有HTML表单数据.docx

    在这个Java Web应用开发的课堂案例中,我们关注的是如何使用Servlet来读取HTML表单提交的所有数据。这个案例主要涉及了以下几个关键知识点: 1. **Servlet基础**:Servlet是Java Web开发中的一个核心组件,它扩展了...

    servlet-crud.zip

    - **读取(Read)**: 查询所有学生和查询单个学生功能由不同的Servlet处理。`DisplayAllStudentsServlet`获取数据库中的所有学生信息并展示在`displayStudents.jsp`上,`FindStudentServlet`则根据用户提供的ID查找...

    Servlet 获得参数

    2. **Servlet API获取参数方法** - `HttpServletRequest`接口提供了多种方法来获取参数: - `getParameter(String name)`:返回指定参数的单个值,如果参数不存在则返回null。 - `getParameterValues(String name...

    jsp,servlet普通表单+文件上传

    2. **配置Servlet**: 在`web.xml`文件中,需要配置一个`servlet`来处理这个表单的提交。例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;FileUploadServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;...

    Servlet

    2. 初始化:创建实例后,服务器调用`init()`方法进行初始化,通常在这里进行配置文件读取、数据库连接等初始化操作。 3. 服务:每当有请求到达,服务器都会调用`service()`方法,根据请求类型分发到`doGet()`或`...

    servlet读取数据库代码到jsp页面表格示例

    在本文中,我们将深入探讨如何使用Servlet、JSP和MySQL构建一个简单的Web应用程序,该程序可以从数据库读取数据并将其显示在JSP页面的表格中,同时实现CRUD(创建、读取、更新和删除)操作。这个示例是开发Java Web...

    servlet程序设计引导

    ### Servlet程序设计引导 ...通过以上介绍,我们可以看到Servlet为开发者提供了一个强大且灵活的框架,可以用来构建复杂的Web应用程序。理解Servlet的基本原理和工作流程对于掌握其使用方法至关重要。

    jdbc-servlet-jsp01-实现登录-增删改查

    此外,Servlet还负责处理其他CRUD(创建、读取、更新和删除)操作,通过JDBC与数据库进行交互。 3. **JSP**: JSP是动态网页开发技术,它允许在HTML页面中嵌入Java代码。在这个项目中,JSP主要用于生成动态的用户...

    Jsp-Servlet-JavaBean企业事务管理系统

    在本系统中,JSP主要用于展示数据和处理用户的前端交互,比如显示新闻列表、接收用户提交的表单信息等。开发者可以使用JSP的内置对象如request、response、session等来处理HTTP请求,以及EL(Expression Language)...

    servlet重点讲解

    - **加载Servlet**:容器读取`web.xml`文件中的配置,加载指定的Servlet类。 - **初始化Servlet**:容器调用`init()`方法对Servlet进行初始化。 - **处理请求**:容器调用`service()`方法处理客户端请求。 - **...

    servlet课件(工作原理,处理表单)

    处理表单数据时,Servlet可以通过`request.getParameter()`方法获取POST或GET请求中的参数。例如: ```java String yonghu = request.getParameter("yonghu"); String mima = request.getParameter("mima"); // ......

    java servlet 两个小例子

    // 处理GET请求的逻辑,如输出欢迎信息或读取请求参数 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 处理POST请求的逻辑...

    【Demo Project】ajaxSubmit+Servlet表单文件上传和下载

    5. **文件保存**:Servlet读取Part的内容,将其写入服务器指定的文件路径,完成文件保存。 6. **响应反馈**:Servlet构建响应消息,告知前端文件上传成功或失败,通过Ajax的success回调处理。 四、文件下载流程 1. ...

Global site tag (gtag.js) - Google Analytics