zoukankan      html  css  js  c++  java
  • .Net转Java自学之路—基础巩固篇二十五(Response、Request)

    服务器处理请求流程:

      服务器每次收到请求时,都会为这个请求开辟一个新的线程;服务器会把客户端的请求数据都封装到request对象中,request就是请求数据的载体;服务器还会创建response对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应。

    Response:

      其类型为:HttpServletResponse

      常见状态吗:200 成功;302 重定向;404 客户端错误,资源不存在;500 服务器端错误

    sendError(int sc);//发送错误状态码
    sendError(int sc,String msg);//发送错误状态码
    setStatus(int sc);//发送成功状态码,可以用来发送302

      响应头:Content-Type、Refresh、Location等

    setHeader(String,String);//单值响应头
    addHeader(String,String);//多值响应头
    setIntHeader(String,int);//单值的int类型的响应头
    addIntHeader(String,int);//多值的int类型的响应头
    setDateHeader(String,long);//单值的毫秒类型的响应头
    addDateHeader(String,long);//多值的毫秒类型的响应头
    
    /******************************************/
    
    //例:
    response.setHeader("aaa","AAA");
    response.setIntHeader("Content-Length",123);
    response.setDateHeader("expires",1000*60*60);//过期时间
    
    //禁用浏览器缓存
    response.setHeader("Cache-Control","no-cache");
    response.setHeader("pragma","no-cache");
    response.setHeader("expires",-1);

      响应体:通常是http、也可以是图片

        response的俩个流:ServletOutStream、PrintWriter。俩个流不能同时使用。

        ServletOutStream:向客户端发送字节数据。response.getOutputStream();

        PrintWriter:向客户端发送字符数据,需要设置编码。response.getWriter();

      重定向:

        sendRedirect(String);

    Request:

      其类型为:HttpServletRequest 。封装了所有的请求数据。

      获取常用信息:

        客户端IP地址:request.getRemoteAddr();

        请求方式:request.getMethod();

      获取请求头:

    String getHeader(String);//单值头
    int getIntHeader(String);//单值int类型的请求头
    long getDateHeader(String);//单值毫秒值类型的请求头
    Enumeration<String> getHeaders(String);//多值请求头

      获取请求URL:

    getScheme();//获取协议
    getServerName();//服务器名
    getServerPort();//服务器端口号
    getContextPath();//获取项目名
    getServletPath();//获取Servlet路径
    getQueryString();//获取参数部分
    getRequestURI();//获取请求URI,项目名 + Servlet路径
    getRequestURL();//获取请求URL,不包含参数的整个请求路径

      获取请求参数:

    String getParameter(String);//获取指定名称的请求参数值,适用于单值请求参数。
    String[] getParameterValues(String);//获取指定名称的请求参数值,适用于多值请求参数
    Enumeration<String> getParameterNames();//获取所有请求参数名称
    Map<String,String[]> getParameterMap();//获取所有请求参数,key 参数名称,value 参数值

      请求转发和请求包含:是一个请求

    RequestDispatcher rd=request.getRequestDispatcher("被转发/被包含的Servlet的路径");
    rd.forward(request,response);//请求转发
    rd.include(request,response);//请求包含

        有时一个请求需要多个Servlet协作才能完成,所以需要在一个Servlet跳转到另一个Servlet。所以一个请求跨多个Servlet需要使用转发和包含。

        请求转发:有下一个Servlet完成响应体,当前Servlet可以设置响应头(留头不留体)

        请求包含:有俩个Servlet共同来完成响应体(都留)

        无论是请求转发还是请求包含,都在一个请求范围内,使用同一个request和response

      request域:

        Servlet中有三大域对象:request、session、application

        三大域对象都有如下三个方法:

    setAttribute(str,obj);//设置属性
    Object getAttribute(str);//获取属性
    removeAttribute(str);//移除

        属性:是Servlet在转发或包含时用来传递值

        同一请求范围内使用request.setAttribute()、request.getAttribute()来传值。前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。

      请求转发和重定向的区别:

        1、请求转发时一个请求一个响应;而重定向时俩次请求俩次响应。

        2、请求转发地址栏不变化;而重定向会显示后一个请求的地址。

        3、请求转发只能转发到本项目其他Servlet,而重定向不止能重定向到项目的其他Servlet,还能重定向到其他项目。

        4、请求转发时服务端行为,只需给出转发的Servlet路径;而重定向需要给出requestURI,即包含项目名称。

  • 相关阅读:
    程序员面试金典题解
    Leetcode 解题报告
    常用小算法
    BestCoder 百度之星2016
    jQuery 删除或是清空某个HTML元素。
    dataTable 默认排序设定
    jquery tableExport 插件导出excel (无乱码) 比较简单的表格
    php 根据周数获取当周的开始日期与最后日期
    thinkphp5使用load和use引入第三方类
    判断checkbox是否选中
  • 原文地址:https://www.cnblogs.com/zltao/p/10388264.html
Copyright © 2011-2022 走看看