chaoz的杂货铺

生命有息、学无止境、折腾不止

0%

java-web 之请求与响应学习

HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使用HttpServletResponse响应信息分为三部分:响应行、响应头、响应正文(响应体)

1.1发送状态码的相关方法:

1.设置状态码

setStatus(int sc):参数就是状态码。
setstatus(int sc,String sm):第一个参数表示状态码,第二个参数就状态码的描述。

常见的状态码:200响应成功

302重定向
404请求资源找不到
500服务器代码出异常。

2.错误信息方法:

sendError(int sc):参数状态码
sendError(int sc,String sm):第一个参数表示状态码,第二个参数就状态码的描述。

1.2发送响应消息头相关的方法:

响应消息头的数据格式:key-value的形式,有的是一个key,一个value,有的是一个key,多个value

image.png

1.设置响应消息头:

  • 一个key,一个value
    setHeader(String key,String value);
    image.png
  • 一个key,对应多个value
    addHeader(String key,String value);
    image.png

2.设置响应数据的长度:setContentLength(int src)方法

3.设置处理乱码的方法:

  • setCharacterEncoding(String a);参数就是一个码表格式,比如:“utf-81
  • setContentType(String a);参数代表响应数据的类型和码表格式,比如:“text/html;charset=utf-8”

结论:在处理字符流和字节流输出中文乱码时,都采用response.setContentType(
注意:常见的编码格式:
GBKGB18030GB2312都是支持中文的编码格式,当然支持其它一些字符。
UTF-8:万能码表格式,支持所有的字符。
ISO-8859-1:不支持中文。

1.3.HttpServletRequest请求对象

HttpServletRequest它是一个接口,它的父接口ServletRequest,在开发中,常用的是带协议的请求对象。
请求消息:请求行,请求头,请求参数。

1.获取请求行消息的相关方法:

常用的请求行方法:

  • 1.获取请求提交的方式:getMethod();>>>2.获取请求的协议:getProtocol();
  • 3.获取项目名称:getcontextPath();
  • 4.获取servlet路径:getServletPath();
  • 5.获取请求路径:getRequsetuRI(),getRequestURL()

    2.获取请求消息头相关的方法

  • 1.根据消息头,获取值:String value=getHeader(消息头的名称);
  • 2.获取所有的消息头:Enumeration er=getHeaderNames();根据Referer请求消息头,做一个防盗链的案例:
    防盗链
    • 难点:怎么判断这个发起的下载请求是从别的网站上发起的?
      解决方法:根据Referer请求头对应的值,是否包含了服务器的名称如果包含,就说明是从本网站下载的,否则就不是。

      3.获取请求参数相关的方法:

  • 1.根据name属性值,获取用户输入的值:string value=getParameter(name属性对应的值);
  • 2.根据name属性值,获取用户选择的值:String[]vaules=getParameterValues(name属性对应的值);
  • 3.没有参数,获取所有值:Map<String,String[]>map=getParameterMap();

    4.解请求参数的中文乱码问题:

    中文乱码处理分两种情况:
  • 第一种情况:处理get方式提交的中文乱码
    使用的String的构造方法解决的中文乱码:new String(字节数组,编码格式);
    代码:
    String nevalue=new String(value.getBytes(”IS08859-1”),”utf-8”);
  • 第二种情况:处理post请求的中文乱码问题:
    post提交,会把参数首先提交到request对象的缓冲区中,缓冲区默认编码是IS08859-1,不支持中文处理方法:把request缓冲区的编码给设置成支持中文的码表格式。
    代码:
    request.setCharacterEncoding(”utf-8”);

5.通过Requset对象传递数据

什么域对象:在一定的范围内,可以存值和取值。
request域对象:在一次请求中,可以存值和取值。

  • 存值:setAttribute(String key,Object obj);>>>取值:Object obj=getAttribyte(String key);
  • 移除:removeAttribute(String key);

    1.4 RequestDispatcher接口

    在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向方法来实现,也可以RequestDispatcher转发对象的forward方法来实现。
    得到转发对象:
    RequestDispatcher forwardobj=request.getRequestDispatcher(”另一个资源的路径”);
    常用方法:
  • 1.实现请求转发:forwardObj.forward(request,response);
  • 2.实现请求包含:forwardobj.include(request,response);

  • 1.请求转发:
    特点:发送了一次请求,响应一次,和request域对象配合使用,可以实现值得传递。
    转发路径:转发动作是在服务器内部实现的,所以转发路径不要携带项目名称。

    • 2.请求重定向:
      特点:发送了两次请求,响应了两次,不能喝request域对象配合使用。
      重定向路径:重定向动作在浏览器端执行的,所以路径需要携带项目名称。
      image.png
  • 2.请求包含:
    特点:发送一次请求,请求包含是由服务器完成。
    请求包含路径:在服务器内部完成的,路径不需要携带项目名称。

喜欢这篇文章?打赏一下作者吧!

欢迎关注我的其它发布渠道