• Java Servlet 笔记3


    Servlet 表单数据

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

      1.GET 方法

        GET 方法向页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔,如下所示:

    1 http://www.test.com/hello?key1=value1&key2=value2

    GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中。如果您要向服务器传递的是密码或其他的敏感信息,请不要使用 GET 方法。GET 方法有大小限制:请求字符串中最多只能有 1024 个字符。这些信息使用 QUERY_STRING(获取查询语句,获取的是?后面的值) 头传递,并可以通过 QUERY_STRING 环境变量访问,Servlet 使用 doGet() 方法处理这种类型的请求。

      2.POST方法

    另一个向后台程序传递信息的比较可靠的方法是 POST 方法。POST 方法打包信息的方式与 GET 方法基本相同,但是 POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,您可以解析和使用这些标准输出。Servlet 使用 doPost() 方法处理这种类型的请求。

      3.使用 Servlet 读取表单数据

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

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

      4.读取所有的表单参数

    以下是通用的实例,使用 HttpServletRequest 的 getParameterNames() 方法读取所有可用的表单参数。该方法返回一个枚举,其中包含未指定顺序的参数名。一旦有一个枚举,就可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称。

     

     1 package com.run.test;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 import java.util.Enumeration;
     6 
     7 import javax.servlet.ServletException;
     8 import javax.servlet.annotation.WebServlet;
     9 import javax.servlet.http.HttpServlet;
    10 import javax.servlet.http.HttpServletRequest;
    11 import javax.servlet.http.HttpServletResponse;
    12 
    13 /**
    14  * Servlet implementation class FormServlet
    15  */
    16 @WebServlet("/FormServlet")
    17 public class FormServlet extends HttpServlet {
    18     private static final long serialVersionUID = 1L;
    19 
    20     /**
    21      * @see HttpServlet#HttpServlet()
    22      */
    23     public FormServlet() {
    24         super();
    25         // TODO Auto-generated constructor stub
    26     }
    27 
    28     /**
    29      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
    30      *      response)
    31      */
    32     protected void doGet(HttpServletRequest request, HttpServletResponse response)
    33             throws ServletException, IOException {
    34         // TODO Auto-generated method stub
    35         response.setContentType("text/html;chartset=GBK");
    36         PrintWriter out = response.getWriter();
    37         String title = "Title";
    38         String docType = "<!DOCTYPE html> 
    ";
    39         out.println(docType + "<html>
    " + "<head><title>" + title + "</title></head>
    "
    40                 + "<body bgcolor="#f0f0f0">
    " + "<h1 align="center">" + title + "</h1>
    "
    41                 + "<table width="100%" border="1" align="center">
    " + "<tr bgcolor="#949494">
    "
    42                 + "<th>name</th><th>value</th>
    " + "</tr>
    ");
    43         Enumeration<String> paramNames = request.getParameterNames();
    44 
    45         while (paramNames.hasMoreElements()) {
    46             String paramName = (String) paramNames.nextElement();
    47             out.print("<tr><td>" + paramName + "</td>");
    48             String[] paramValues = request.getParameterValues(paramName);
    49             // 读取单个值的数据
    50             if (paramValues.length == 1) {
    51                 String paramValue = paramValues[0];
    52                 if (paramValue.length() == 0)
    53                     out.println("<td><i>没有值</i></td>");
    54                 else
    55                     out.println("<td>" + paramValue + "</td>");
    56             } else {
    57                 // 读取多个值的数据
    58                 out.println("<td><ul>");
    59                 for (int i = 0; i < paramValues.length; i++) {
    60                     out.println("<li>" + paramValues[i]);
    61                 }
    62                 out.println("</ul></td>");
    63             }
    64             out.print("</tr>");
    65         }
    66         out.println("
    </table>
    </body></html>");
    67     }
    68 
    69     /**
    70      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
    71      *      response)
    72      */
    73     protected void doPost(HttpServletRequest request, HttpServletResponse response)
    74             throws ServletException, IOException {
    75         // TODO Auto-generated method stub
    76         doGet(request, response);
    77     }
    78 
    79 }

     

     

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/lyj-gyq/p/8527665.html
Copyright © 2020-2023  润新知