1.3(学习笔记)Servlet获取表单数据

时间:2024-02-26 08:49:45

 一、Servlet获取表单数据

  表单提交数据经由Servlet处理,返回一个处理结果显示在页面上,

  那么如何获取表单提交的参数进出相应的处理呢?

 

  主要用到以下方法:
  String  getParameter("paramName")

  以字符串形式返回请求参数对应的值,如果参数不存在返回null。

  此处的参数名是指表达中提交属性控件的name属性。

  例如:

    

  在这个表单中username后面是一个输入框,paramName就是name=“username”中的“name”,

  使用getParameter("username")获取的值就是输入到输入框中的内容。

  

  String[]  getParameterValues("paramName")

  返回包含给定请求参数所有值的字符串数组,如果参数不存在返回null,

  如果参数只有一个值,则数组长度为1.

  例如:

  

  爱好是一个多选项,这里设置的是复选框(CheckBox),而这个复选框的name是相同的,

  也就是说一个参数名可能对应多个值,这时就需要采用getParameterVlaues("like"),来获取

  所有被选中的复选框对应的value。

 

  Enumeration request.getParameterNames();

  返回此请求中所有的参数名称。如果没有参数返回空枚举。

  例如:

  

  使用getParameterNames()就可以获取当前请求中所有参数的名称(username、pwd、sex、like)

  获取了参数名称,后续就可以通过参数名获取对应的值。

  

二、例子

  

<!DOCTYPE html>
<!-- http://localhost:8080/TestServlet/Test.html -->
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!--表单提交调用servlet  -->
    <!-- http://localhost:8080/TestServlet/TestServlet.html -->
    <form name = f1 action = "/TestServlet/TestServlet.html" method = "post">
        username:<input type = "text" name = "username"></input><br>
        pwd:<input type = "password" name = "pwd"></input><br>
        性别:<input type = "radio" name = "sex" value = "0"><input type = "radio" name = "sex" value = "1"><br>
        爱好:<input type = "checkbox" name = "like" value = "1">篮球
            <input type = "checkbox" name = "like" value = "2">足球<br>
        <input type = "submit" value = "提交">
    </form>
    
</body>
</html>
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet{
//    private PrintStream out = System.out;
    private String initParam = null;
    private String contextParam = null;
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取输入的用户名。
        //String username = getParameter("username");
        PrintWriter out = resp.getWriter();
        //获取所有参数名
        Enumeration names = req.getParameterNames();
        //打印html头部代码
        printHtmlPage(out,true);
        //绘制html表格显示获取参数
        out.println("<table border = 2>");
        //遍历包含所有参数名的枚举对象
        while(names.hasMoreElements()) {//判断是否有更多元素
            String name = (String)names.nextElement();//获取当前枚举参数。
            //根据当前参数名获取对应值
            String[] values = req.getParameterValues(name);
            //输出参数名
            out.println("<tr>");
            out.print("<td>");
            out.print(name);
            out.print("</td>\n");
            //输出参数名所对应的值
            for(int i = 0; i < values.length; i++) {
                out.print("<td>");
                out.print(values[i]);
                out.print("</td>\n");
            }
            out.println("</tr>");
        }
        out.println("</table>");
        //打印html尾部代码
        printHtmlPage(out,false);
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
    
    //打印HTML页面,head为True打印HTML头部代码,为false打印尾部HTML代码
    private void printHtmlPage(PrintWriter out, boolean head) {
        if(head) {
            out.println("<!DOCTYPE html>\r\n" + 
                    "<!-- http://localhost:8080/TestServlet/Test.html -->\r\n" + 
                    "<html>\r\n" + 
                    "<head>\r\n" + 
                    "<meta charset=\"UTF-8\">\r\n" + 
                    "<title>Insert title here</title>\r\n" + 
                    "</head>\r\n" + 
                    "<body>");
        }else {
            out.println("</body>\r\n" + 
                    "</html>");
        }
    }
}

      

 在Servlet中对获取的值(0,1,2等)结合参数名称进行处理

 可以还原出选项所代表的中文信息。