- _nosay
使用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>
效果如图:
建立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 { } }
前台提交用户名和密码后,后端运行效果如图所示
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 { } }