使用HttpServletResponse获取请求参数以及响应

2017-11-18 14:14:53

    获取请求参数:

    1.getParameter(String name):用于获取某个指定名称的参数值,如果请求中没有包含指定名称的参数,则返回null,如果有指定参数但是没有给设置值,则返回空串"",如果包含多个参数的值,则返回第一个出现的参数值。

    2.getParameterNames():该方法用于返回一个包含请求消息中所有参数名的Enumernation

    3.getParameterMap():该方法用于将请求中的所有参数和值装入一个map对像然后返回。


    下面进行测试

    首先在首页index.jsp中,建立一个简单的from页面,具体代码如下所示

<%--
  Created by IntelliJ IDEA.
  User: nosay
  Date: 11/18/17
  Time: 10:48 AM
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <h2>发起HTTP post请求</h2>
    <form action="test2" method="post">
      <p>帐号:<input type="text" name="username"></p>
      <p>密码:<input type="password" name="password"></p>
      <input type="submit" value="提交">
    </form>
  </body>
</html>

    效果如图:

    2.png

    建立Test2Servlet文件,具体代码如下:

package net.zixue.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "Test2Servlet",urlPatterns = "/test2")
public class Test2Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("输入的用户名是:" + username);
        System.out.println("输入的密码是:" + password);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

        前台提交用户名和密码后,后端运行效果如图所示

    3.png


    HttpServletResponse简介

    在servlet的api中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用于封闭HTTP的响应,由于HTTP响应包含着响应行,响应头,和响应体三部分,因此在HttpServletResponse中分别定义了发送响应行,响应头,响应体的相关方法。

    其中发送响应行的相关方法:

    1.setStatus(int status):当Servlet向客户端回送响应消息时,需要设置一个状态码,该方法用于设置HTTP响应消息的状态码,并生成响应状态行。由于响应状态行中状态的描述直接和状态码相关,而HTTP协议版本由服务器决定,因此只需要设置该方法,就可以发送一个响应行,正常情况下,web服务器会默认发送一个200的状态码。

    2.sendError(int code):该方法用于发送错误信息的状态码,例如404找不到访问的资源,他还有一种重载的形式sendError(int code,String errorMessage),errorMessage可以以文本形式显示在客户端浏览器。

   3.addHeader(String name, String value):该方法用来设置HTTP协议的响应头字段,其中name是响应头字段名,value是响应字段的值.

    4.setHeader(String name,String value):该方法和addHeader相同,唯一区别是addHeader可以重复添加一个同名的响应头字段,setHeader会覆盖之前添加的同名的响应头。

    5.addIntHeader(String name,int value)、setIntHeader(String name,int value):这两个方法将value值为int的字段加入到响应头中。

    6.setContentLength():该方法用于设置HTTP响应消息的内容大小,单位是字节。

    7.setContentType():该方法用于设置Servlet输出内容的类型,也就是HTTP协议中的Content-Type响应头。例如发送到客户端的内容是jpeg格式的图像数据,就需要将响应头字段的类型设置为"image/jpeg",另外,如果相应的内容是文本,那这个时候setContentType还可以设置字符编码,例如,text/html;charset:UTF-8

    8.setCharacterEncoding(String charset)

    

    由于在HTTP响应消息中,大量的数据都是通过响应体传递的,因此ServletResponse遵循以IO 传递大数据的设计理念,定义了两个与输出流相关的方法,具体如下:

    1.getOutputStream()方法:该方法获取的字节流输出对象为ServletOutputStream类型,它是OutputStream的子类,因此可以直接输出字节数组中的二进制数据。

    2.getWrite()方法:该方法获得的字符输出流对象是PrintWriter类型由于它可以直接输出文本类型,因此要输出网页文档,需要使用这个方法。


    相关代码demo:

package net.zixue.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "Test2Servlet",urlPatterns = "/test2")
public class Test2Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("输入的用户名是:" + username);
        System.out.println("输入的密码是:" + password);

        String result = "恭喜你,登陆成功";
        response.setContentType("text/html;charset=utf-8");
//        ServletOutputStream outputStream = response.getOutputStream();
//        outputStream.write(result.getBytes());

        PrintWriter writer = response.getWriter();
        writer.write(result);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}