zoukankan      html  css  js  c++  java
  • 浅析Java编程中常用的Servlet对象:HttpServletRequest(客户端请求)、HttpServletResponse(响应)、Cookie对象、HttpSession(客户端会话)、ServletContext(应用程序信息)

    一、HttpServletRequest对象

      HttpServletRequest对象:用来接收客户端发送过来的请求信息,例如:请求参数,发送的消息头信息等都属于客户端发来的信息。

    1、常用方法:记几个常用的,其他需要用的时候 idea 会有提示

      getRequestURL() :获取客户端发出请求时的完整URL

      getQueryString() :获取请求行中的参数部分

    2、获取请求头

      getHeader(String) :获取单个请求头内容

      Enumeration getHeaderNames() :获取所有的请求头名称集合

    3、获取客户端请求参数

      getParameter(name) 获取指定名称的参数

      getParameterValues(String name) 获取指定名称参数的所有值

      getParameterNames() 获取一个包含请求消息中的所有参数名的Enumeration对象

      getParameterMap() 获取一个保存了请求信息中的所有参数名称和值的Map对象

    4、请求乱码解决

      由于现在的request是属于客户端的参数,所以用的客户端中的编码格式,在服务端中解析一定会造成乱码问题,要想解决乱码问题,需要设置request中的编码方式

    // 方式一:(该方式只针对POST有效)
    req.setCharacterEncoding("UTF-8");
    
    // 方式二:
    new String(req.getParameter(name).getBytes("ISO-8859-1"));

    二、HttpServletResponse对象

      Web服务器收到客户端的请求,会针对每个请求,做出不同的响应,req是代表请求对象,response是代表响应对象。

      HttpServletResponse 的主要功能用于服务器对客户端的请求进行响应,将 Web 服务器处理后的结果返回给客户端。 service()方法中形参接收的是 HttpServletResponse 接口的实例化对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方 法。

    1、常用方法

      getWriter() 获取输出字符流

      getOutputStream 获取输出字节流

      setContentType(String ContentType) 设置响应类型

    2、response的乱码解决需要服务器和客户端的解码编码的格式统一

    response.setCharacterEncoding("UTF-8");
    response.setHeader("content-type", "text/html;charset=UTF-8");
    
    // 也可以一句话解决
    response.setContentType("text/html;charset=UTF-8");

    三、Cookie对象

    1、Cookie的创建和发送

      通过 new Cookie(“key”,”value”); 来创建一个 Cookie 对象,要想将 Cookie 随响应发送到客户端,需要先添加到 response 对象中,resp.addCookie(cookie);此时该 cookie 对象则随着响应发送至了客户端。在浏览器上可以看见。

    //创建一个Cookie
    Cookie cookie = new Cookie("name","***");
    //在响应给浏览器
    resp.addCookie(cookie);

    2、Cookie获取

      在服务器端只提供了一个 getCookies() 的方法用来获取客户端回传的所有 cookie 组成的一个数组,如果需要获取单个 cookie 则需要通过遍历,getName()获取 Cookie 的名称,getValue()获取 Cookie 的值。

    //获取到所有的Cookie
    Cookie[] cookies = req.getCookies();
    //遍历打印
    for (Cookie cookie2 : cookies) {
        System.out.println("键:"+cookie2.getName()+" 值:"+cookie2.getValue());
    }

    3、Cookie时间设定:通过 setMaxAge(int time);方法设定 cookie 的最大有效时间,以秒为单位。大于 0 的整数,表示存储的秒数; 若为负数,则表示不存储该 cookie; 若为 0,则删除该 cookie。

    4、Cookie的覆盖:如果服务器发送的Cookie是个重复Cookie,那么会覆盖原有的Cookie的值。

    四、HttpSession对象

      对于服务器而言,每一个连接到它的客户端都是一个 session,servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。会话将保留指定的时间段,跨多个连接或来自用户的页面请求。一个会话通常对应于一个用户,该用户可能多次访问一个站点。可以通过此接口查看和操作有关某个会话的信息, 比如会话标识符、创建时间和最后一次访问时间。在整个 session 中,最重要的就是属性的操作。

      session 无论客户端还是服务器端都可以感知到,若重新打开一个新的浏览器,则无法取得之前设置的 session,因为每一个 session 只保存在当前的浏览器当中,并在相关的页面取得。

    1、如何获得一个HttpSession对象?

    HttpSession session = req.getSession();
    //获取Session的唯一id
    String sid = session.getid();

    2、Jsession

      每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSION 的 cookie,如果没有则认为这是一次新的会话,会创建 一个新的 session 对象,并用唯一的 sessionId 为此次会话做一个标志。如果有 JESSIONID 这个 cookie 回传,服务器则会根据 JSESSIONID 这个值去查看是否含有 id 为 JSESSION 值的 session 对象,如果没有则认为是一个新的会话,重新创建一个新的 session 对象,并标志此次会话; 如果找到了相应的 session 对象,则认为是之前标志过的一次会话,返回该 session 对象,数据达到共享。

      这里提到一个叫做 JSESSION 的 cookie,这是一个比较特殊的 cookie,当用户请求服务器时,如果访问了 session,则服务器会创建一个名为 JSESSION,值为获取到的 session(无论是获取到的还是新创建的)的 sessionId 的 cookie 对象,并添加到 response 对象中,响应给客户端,有效时间为关闭浏览器。

    3、作为域对象

      Session 用来表示一次会话,在一次会话中数据是可以共享的,这时 session 作为域对象存在,可以通过 setAttribute(name,value); 方法向域对象中添加数据, 通过 getAttribute(name) 从域对象中获取数据,通过 removeAttribute(name) 从域对象中移除数据。

      即使通过重定向打开的网页,session中的数据依然存在,当然,只要session存在,这里的数据就不会丢失。

    //设置session对象的值
    session.setAttribute("uname", "***");

    4、Session 的销毁

      Session的默认存在事件是30min,这期间你不可以对网页进行任何操作,30min过后这个对象被销毁,生成新的对象,存在的数据也随着新的session的诞生就对象的销毁而销毁。

      我们也可以自己设置静默操作的销毁事件的值

    // 我们也可以自己设置静默操作的销毁事件的值
    session.setMaxInactiveInterval(int);    //int 为多少秒
    
    // 也可以让session即刻销毁
    session.invalidate();
    
    // 关闭浏览器,结束本次会话,session 销毁
    // 非正常关闭服务器,服务器会把session对象写在磁盘上,下次启动,自动加载。

    五、ServletContext 对象

      每一个 web 应用都有且仅有一个 ServletContext 对象,又称 Application 对象,从名称中可知,该对象是与应用程序相关的。在 WEB 容器启动的时候,会为每一个 WEB 应用程序创建一个对应的 ServletContext 对象。

      该对象有两大作用,第一、作为域对象用来共享数据,此时数据在整个应用 程序中共享; 第二、该对象中保存了当前应用程序相关信息。例如可以通过 getServerInfo();方法获取当前服务器信息 , getResourceAsStream(String path); 方法以流的形式获取某个资源,getRealPath(String path);获取资源的真实路径等。

    1、如何使用ServletContext?

    // 获取服务器的版本
    String serverInfo = request.getServletContext().getServerInfo();
    System.out.println(serverInfo);
            
    // 获取当前项目的真实路径(在服务器上的路径)
    String realPath = request.getServletContext().getRealPath("/");
    System.out.println(realPath);

    2、获取ServletContext的多种方法

    /**
             * 获取 ServletContext 对象的途径有很多
             *     1、通过 request 对象可以
             *     2、通过 session 可以
             *     3、通过servletConfig可以,在 Servlet 标准中提供了获取 ServletConfig 的方法
             *     4、本身Servlet标准后期的实现类中也提供了直接获取 ServletContext 的方法
             */
    // 1、通过 request 对象可以
    ServletContext servletContext = request.getServletContext();
            
    // 2、通过 session 可以
    ServletContext servletContext2 = request.getSession().getServletContext();
    HttpSession session = request.getSession();
    ServletContext servletContext3 = session.getServletContext();
    
    // 3、通过servletConfig可以,在 Servlet 标准中提供了获取 ServletConfig 的方法
    ServletConfig servletConfig = getServletConfig();
    ServletContext servletContext4 = servletConfig.getServletContext();
      
    // 4、本身Servlet标准后期的实现类中也提供了直接获取 ServletContext 的方法
    ServletContext servletContext5 = getServletContext();
  • 相关阅读:
    OCP-1Z0-053-V12.02-285题
    OCP-1Z0-053-V12.02-281题
    今天博客抽风了,我也抽风了
    OCP-1Z0-053-V12.02-278题
    OCP-1Z0-053-V12.02-271题
    OCP-1Z0-053-V12.02-269题
    OCP-1Z0-053-V12.02-256题
    OCP-1Z0-053-V12.02-249题
    OCP-1Z0-053-V12.02-248题
    OCP-1Z0-053-V12.02-244题
  • 原文地址:https://www.cnblogs.com/goloving/p/15263455.html
Copyright © 2011-2022 走看看