从零开始学习Servlet(2):获取表单数据

Servlet实例

通常通过扩展javax.servle.http.HttpServlet,实现Servelt接口的抽象类处理HTTP请求。

Hello World

package com.web.one;

import java.io.IOException;
import java.io.PrintWriter;

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 WebOneServlet
 */
@WebServlet("/WebOneServlet")
public class WebOneServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private String message;
    @Override
    public void init() throws ServletException {
        //执行必要的初始化操作
        message = "Hello Wrold";
    }

    public WebOneServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, 
            HttpServletResponse response)
                    throws ServletException, IOException 
    {
        // 设置响应内容的类型
        response.setContentType("text/html");
        //响应的逻辑
        PrintWriter outer = response.getWriter();
        outer.println("<h1>"+message+"</h1>");
    }
    @Override
    public void destroy() {
        //do nothing
    }
}

Servlet 表单数据

客户端(浏览器)到Web服务器 再到后台程序,都需要传递一些信息。
从客户端到Web服务器可以使用GET/POST两种方式传递信息。

GET

GET方法传递的是经过编码的信息,页面URL和编码的信息使用“?”号隔开:
http://www.xxx.com/xxxx?key=value&key=value
- GET是HTTP请求中默认的向Web服务器传递信息的方式。
- GET产生一个字符串,在地址栏中展示,包含页面地址和编码信息。
- GET方式传递的数据大小有限制:请求字符串的最大值为1024个字符
- GET方式不安全,向服务器传递密码等数据是不可使用
- Servlet使用doGet()方法处理GET类型的请求
- GET方式传递的信息使用QUERY_STRING 头传递,可以通过QUERY_STRING环境变量访问这些信息,在doGet方法中request.getQueryString(),即可获取这些信息

POST

POST方式打包信息的方式与GET方法基本相同,但是较为可靠安全,不把信息展示在URL中,而是作为单独的信息以标准输出的形式传递给后台。可以再doPost()中获取、处理这些数据。

Servlet读取表单数据

servlet读取表单数据的方法:
- getParameter():获取表单指定参数的值。如getParameter(“name”);
- getParameterValues():名字相同,但值有多个,数组变量,调用该方法返回多个值(复选框);
- getParameterNames():得到当前请求所有参数的参数名的完整列表。

doGet()处理表单数据:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String title = "使用 GET 方法读取表单数据";
        // 处理中文
        String name = new String(request.getParameter("name").getBytes("ISO8859-
        1"),"UTF-8");
        out.println(name);
    }

启动Tomcat,在地址栏中输入 ttp://localhost:8080/WebOneServlet?name=“test”.在网页上输出name的值test。或者在Eclipse项目中创建提交表单的HTML文件,放在WebContent目录下

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>提交表单</title>
</head>
<body>
<form action="WebOneServlet" method="GET">
Name:<input type="text" name="name">
<input type="submit" value="提交" />
</form>
</body>
</html>

运行HTML文件输入测试文字提交,经doGet处理可以在网页输出HTML页面输入的文字。若表单提交数据中包含ISO8859-1格式的中文,则需要进行处理 String name = new String(request.getParameter(“name”).getBytes(“ISO8859-1”),”UTF-8”);

doPost()处理表单数据:

修改HTML文件:method=”POST”

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>提交表单</title>
</head>
<body>
<form action="WebOneServlet" method="POST">
Name:<input type="text" name="name">
<input type="submit" value="提交" />
</form>
</body>
</html>

在Servlet的doPost()方法中处理数据:

   // 处理 POST 方法请求的方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String title = "使用 POST 方法读取表单数据";
        // 处理中文
        String name =new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");
        out.println(name);
    }

getParameterValues()和getParameterNames的使用

getParameterNames()读取表单参数名集合,遍历这个集合获取所有参数值。
创建HTML文件

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>读取复选框参数</title>
</head>
<body>
<form action="ReadParams" method="POST" target="_blank">
<input type="checkbox" name="maths" checked="checked" /> A
<input type="checkbox" name="physics"  /> B
<input type="checkbox" name="chemistry" checked="checked" /> C
<input type="submit" value="选择字母" />
</form>
</body>
</html>
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Enumeration paramNames = request.getParameterNames();
        while(paramNames.hasMoreElements()) {
            String paramName = (String)paramNames.nextElement();
            String[] paramValues = request.getParameterValues(paramName);
            // 读取单个值的数据
            if (paramValues.length == 1) {
                String paramValue = paramValues[0];
                if (paramValue.length() == 0)
                    out.println("没有值");
                else
                    out.println(paramValue);
            } else {
                // 读取多个值的数据
                for(int i=0; i < paramValues.length; i++) {
                out.println(paramValues[i]);
            }
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/yt618121/article/details/80477538