当前位置 : 主页 > 编程语言 > java >

Response和Request对象

来源:互联网 收集:自由互联 发布时间:2022-08-15
/* *作者:呆萌老师 *☑csdn认证讲师 *☑51cto高级讲师 *☑腾讯课堂认证讲师 *☑网易云课堂认证讲师 *☑华为开发者学堂认证讲师 *☑爱奇艺千人名师计划成员 *在这里给大家分享技术、知


 

/*
*作者:呆萌老师
*☑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表示设置

  • 通过response设置响应体
  • 响应体设置文本
  • ​​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​​

    上一篇:数据表基本操作集
    下一篇:没有了
    网友评论