/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*/

Response和Request对象_服务器

Response和Request

HttpServletResponse

我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response

HttpServletResponse常用操作

通过response设置响应行

设置响应行的状态码

setStatus​(int sc)​

通过response设置响应头

addHeader​(​​​​String​​​​ name, ​​​​String​​​​ value)​

addIntHeader​(​​​​String​​​​ name, int value)​

addDateHeader​(​​​​String​​​​ name, long date)​

setHeader​(​​​​String​​​​ name, ​​​​String​​​​ value)​

setDateHeader​(​​​​String​​​​ name, long date)​

setIntHeader​(​​​​String​​​​ name, int value)​

其中,add表示添加,而set表示设置

  1. 通过response设置响应体
  1. 响应体设置文本

​PrintWriter​getWriter​()​

获得字符流,通过字符流的​write​​​(​​​​String​​​​ s)​​方法可以将字符串设置到response   缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览    器端。

关于设置中文的乱码问题

原因:response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过    response的setCharacterEncoding​(​​​​String​​​​ charset)​​设置response的编码

但我们发现客户端还是不能正常显示文字

原因:我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系   统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以   手动修改浏览器的编码是UTF-8。

我们还可以在代码中指定浏览器解析页面的编码方式,

通过response的setContentType​(​​​​String​​​​ type)​​方法指定页面解析时的编码是UTF-8

response.setContentType("text/html;charset=UTF-8");

上面的代码不仅可以指定浏览器解析页面时的编码,同时也内含            setCharacterEncoding的功能,所以在实际开发中只要编写 response.setContentType("text/html;charset=UTF-8");就可以解决页面输出中文乱码问题。

HttpServletRequest常用操作

1、通过request获得请求行

获得客户端的请求方式:​​String​getMethod​()​

获得请求的资源:

​String​getRequestURI​()​

​StringBuffer​getRequestURL​()​

​String​getContextPath​()​​​​ ---web​​​​应用的名称​

​String​getQueryString​()​​​​ ---- get​​​​提交​​​​url​​​​地址后的参数字符串​

​username=zhangsan&password=123​

注意:request获得客户机(客户端)的一些信息

request.getRemoteAddr() --- 获得访问的客户端IP地址

2、通过request获得请求头

​long​getDateHeader​(​​​​String​​​​ name)​

​String​getHeader​(​​​​String​​​​ name)​

​Enumeration​getHeaderNames​()​

​Enumeration​getHeaders​(​​​​String​​​​ name)​

​int​getIntHeader​(​​​​String​​​​ name)​

referer头的作用:执行该此访问的的来源

做防盗链

3、通过request获得请求体

请求体中的内容是通过post提交的请求参数,格式是:

username=zhangsan&password=123&hobby=football&hobby=basketball

key ---------------------- value

username                    [zhangsan]

password                    [123]

hobby                         [football,basketball]

                       

以上面参数为例,通过一下方法获得请求参数:

​String​getParameter​(​​​​String​​​​ name)​

​String​​​​[]​getParameterValues​(​​​​String​​​​ name)​

​Enumeration​getParameterNames​()​

​Map​​<String,String[]>getParameterMap​()​

      注意:get请求方式的请求参数 上述的方法一样可以获得

      解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

      解决get提交的方式的乱码:

            parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

request的其他功能

request是一个域对象

request对象也是一个存储数据的区域对象,所以也具有如下方法:

setAttribute​(​​​​String​​​​ name, ​​​​Object​​​​ o)​

getAttribute​(​​​​String​​​​ name)​

removeAttribute​(​​​​String​​​​ name)​

注意:request域的作用范围:一次请求中

        request完成请求转发

获得请求转发器----​​path​​​​是转发的地址​

RequestDispatchergetRequestDispatcher​(​​​​String​​​​ path)​

通过转发器对象转发

requestDispathcer.forward​(​​​ServletRequest​​ request, ​​​ServletResponse​​ response)​

​注意:​​​​ServletContext​​​​域与​​​​Request​​​​域的生命周期比较?​

​         ServletContext​​​​:​

​创建:服务器启动​

​销毁:服务器关闭​

​域的作用范围:整个​​​​web​​​​应用​

​         request​​​​:​

​创建:访问时创建​​​​request​

​销毁:响应结束​​​​request​​​​销毁​

​域的作用范围:一次请求中​

​注意:转发与重定向的区别?​

​         1​​​​)重定向两次请求,转发一次请求​

​         2​​​​)重定向地址栏的地址变化,转发地址不变​

​         3​​​​)重新定向可以访问外部网站​​​​转发只能访问内部资源​

​         4​​​​)转发的性能要优于重定向​

​注意:客户端地址与服务器端地址的写法?​

​客户端地址:​

​是客户端去访问服务器的地址,服务器外部的地址,特点:写上​​​​web​​​​应用名​​​​称​

​直接输入地址:​

​重定向   ​

​服务器端地址:​

​服务器内部资源的跳转的地址,特点:不需要写​​​​web​​​​应用的名称​

​转发​

​总结:​

​request​​​​获得行的内容​

​      request.getMethod()​

​      request.getRequestURI()​

​      request.getRequestURL()​

​      request.getContextPath()​

​      request.getRemoteAddr()​

​request​​​​获得头的内容​

​      request.getHeader(name)​

​request​​​​获得体(请求参数)​

​      String request.getParameter(name)​

​      Map<String,String[]> request.getParameterMap();​

​      String[] request.getParameterValues(name);​

​注意:客户端发送的参数​​​​到服务器端都是字符串​

​获得中文乱码的解决:​

​         post:request.setCharacterEncoding(“UTF-8”);​

​         get:​

​parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);​

​request​​​​转发和域​

​      request.getRequestDispatcher(​​​​转发的地址​​​​).forward(req,resp);​

​      request.setAttribute(name,value)​

​      request.getAttribute(name)​

更多关注

​https://edu.51cto.com/course/20519.html​