Servlet再一次回顾(三)
HttpServletRequest接口与HttpServletResponse接口
一、HttpServletRequest接口
HttpServletRequest是ServletRequest的子接口,功能和方法更加强大,HttpServletRequest接口提供了用于读取HTTP请求中的相关信息的方法
a.HttpServletRequest类有什么作用
每次只要有请求进入Tomcat服务器,Tomcat服务器就会吧请求过来的HTTP协议信息解析好封装到Request对象中
然后传递到service方法(doGet()和doPost())中给我们使用,我们可以通过HttpServletRequest对象获取所有请求的信息
b.HttpServletRequest类的常用方法
1.getRequestURI() 获取请求的资源路径
2.getRequestURL() 获取请求的统一资源定位符(绝对路径)
3.getRemoteHost() 获取客户端的ip地址
4.getHeader() 获取请求头
5.getParamter() 获取请求参数
6.getParameterValues() 获取请求参数(多个值的时候使用)
7.getMethod() 获取请求的方式
8.setAttribute(key,value) 设置域数据
9.getAttribute(key) 获取域数据
10getRequestDispatcher 获取请求转发对象
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.getRequestURI() 获取请求的资源路径
System.out.println("URI"+request);
// 2.getRequestURL() 获取请求的统一资源定位符(绝对路径)
System.out.println("绝对路径"+request.getRequestURL());
// 3.getRemoteHost() 获取客户端的ip地址
System.out.println("客户端ip地址"+request.getRemoteHost());
// 4.getHeader() 获取请求头
System.out.println("请求头User-Agent"+request.getHeader("User-Agent"));
// 5.getParamter() 获取请求参数
// 6.getParameterValues() 获取请求参数(多个值的时候使用)
// 7.getMethod() 获取请求的方式
System.out.println("请求方式"+request.getMethod());
}
二、HttpServletResponse接口
在Servlet中,当服务器响应客户端的一个请求时,就要用到HttpServletResponse接口。HttpServletResponse接口是ServletReponse的子接口,HttpServletResponse接口提供了与HTTP协议相关的一些方法,用于设置HTTP响应头和向客户端写Cookie
1.HttpServletResponse类的作用
HttpServletResponse和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个Response对象
传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,
我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置
2.两个输出流的说明
方法 | 用途 | |
---|---|---|
字节流: | getOutputStream() | 常用于下载(传递二进制数据) |
字符流: | getWriter() | 常用于回传字符串(常用) |
两个流同时只能使用一个,
使用了字节流就不能在使用字符流,反之亦然,不然报错
3.解决中文乱码问题
法一:
//response 默认回传编码为ISO-8859-1
//设置服务器字符集为UTF-8
response.setCharacterEncoding("UTF-8");
//通过响应头,设置浏览器也使用UTF-8
response.setHeader("Content-type","text/html;charset=UTF-8");
法二:
//设置服务器字符集为UTF-8
//setContentType 它会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
//此方法一定要在获取流对象之前才有效
response.setContentType("text//html;charset=UTF-8");