zoukankan      html  css  js  c++  java
  • Servlet快速入门

    一、servlet的生命周期

    1. 第一次调用到服务器关闭
    2. 如果servlet配置 load-on-startup为1时,生命周期为服务器启动到服务器关闭。
      注意:init方法是对servlet进行初始化的一个方法,会在servlet第一次加载进行存储时执行。destroy方法是在servlet被销毁时执行,也就是服务器关闭时。

    二、Service方法和doGet方法和doPost方法的区别

    1. Service方法:可以处理get/post方式的请求,如果servlet中有service方法,会优先调用service方法
    2. doGet方法:处理get方式的请求
    3. doPost方法:处理post方式的请求
      注意:在父类的service方法中,会判断请求方式来执行doGet或者doPost方法。所以,一般不在重写的service中调用父类的service方法,避免出现错误。

    三、request对象学习

    • 作用:request对象中封存了挡当前请求中的所有请求信息

    • 使用:

      • 获取请求行数据
        • req.getMethod(); 获取请求方式
        • req.getRequestURL(); 获取请求URL信息
        • req.getRequestURI(); 获取请求URI信息
        • req.getScheme(); 获取协议
      • 获取请求头数据
        • req.getHeader(键名); 返回指定的请求头信息
        • req.getHeaderNames(); 返回请求头的键名的枚举集合
      • 获取用户数据
        • req.getParameter(键名); 返回指定的用户数据
        • req.getParameterValues(键名); 返回同键不同值的请求数据(多选),返回的数组
        • req.getParameterNames() 返回所有用户请求数据的枚举集合
    • 注意:request对象由tomcat服务器创建,并作为实参给处理请求的servlet的service方法

    四、respons对象学习

    • 作用:用来响应数据到浏览器的一个对象
    • 使用:
      • 设置响应头

        • setHeader(String name,String value);在响应头中添加响应信息,但是同键会覆盖
        • addHeader(String name,String value);在响应头中添加响应信息,但是不会覆盖
      • 设置响应状态

        • sendError(int num,String msg);自定义响应状态码
      • 设置响应实体

        • resp.getWriter().writer(String str);响应具体的数据给浏览器
      • 设置响应编码格式:

        • resp.setContentType("text/html;charset=utf-8");
        • resp.setHeader("content-type","text/html;charset=utf-8");

    service请求处理代码流程

    • 设置响应编码格式
    • 获取请求数据
    • 处理请求数据(MVC思想)
    • 响应处理结果

    五、请求中文乱码的解决

    1. 使用String进行数据重新编码
      uname=new String(uname.getBytes("iso8859-1"),"utf-8");
    2. 使用公共配置
      • get方式:
        步骤1:req.setCharacterEncoding("utf-8");
        步骤2:在tomcat的conf目录下的server.xml文件中,在Connector标签中增加属性useBodyEncodingForURI=true
      • post方式:
        req.setCharacterEncoding("utf-8");

    六、servlet流程总结

    1. 浏览器发送请求到服务器
    2. 服务器接受请求,进行解析,创建request对象存储请求数据
    3. 服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法
    4. servlet的方法进行请求处理(需要实现):
      • 设置请求编码格式
      • 设置响应编码格式
      • 获取请求信息
      • 处理请求信息
        • 创建业务层对象
        • 调用业务层对象的方法
      • 响应处理结果

    七、请求转发

    • 作用:实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确
    • 使用:req.getRequestDispatcher("page").forward(req,resp);
    • 特点:一次请求,浏览器地址栏信息不改变
    • 注意:请求转发后直接return结束即可

    八、request对象的作用域

    • 作用:使用请求转发后,为了让不同的servlet之间进行数据的共享,实现数据在不同servlet之间的流转,使用request对象的作用域解决了一次请求内的不同servlet的数据共享问题。
    • 使用:
      • req.setAttribute(Object name,Object value)
      • req.getAttrubute(Object obj)
    • 作用域:基于请求转发,一次请求中的servlet共享
    • 注意:使用Reques对象进行数据流转,数据只在一次请求内有效
    • 特点:
      • 服务器创建
      • 每次请求都会创建
      • 生命周期一次请求

    九、重定向

    • 问题:
      • 如果当前的请求,servlet无法进行处理怎么办
      • 如果使用请求转发,造成表单数据重复提交怎么办
    • 解决:使用重定向
    • 使用:resp.sendRedirect(String url);
    • 特点:
      • 两次请求,两个request对象
      • 浏览器地址栏信息改变
    • 时机:
      • 如果请求中有表单数据,而数据又比较重要,不能重复提交,建议使用重定向
      • 如果请求被servlet接收后,无法进行处理,建议使用重定向定位到可以处理的资源

    十、Cookie

    • 作用:解决了发送的不同请求的数据共享问题
    • 使用:
      • cookie的创建和存储
        • 创建Cookie对象:Cookie c = new Cookie(String name,String value);
        • 设置cookie
          • 设置有效期:c.setMaxAge(int seconds);
          • 设置有效路径:c.setPath(String uri);
        • 响应Cookie信息给客户端:resp.addCookie(c);
        • cookie的获取
          • 获取cookie信息数组: Cookie cks=req.getCookies();
          • 遍历数组获取cookie信息:使用for循环遍历即可,先进行非空判断
      • 注意:一个Cookie对象存储一条数据。多条数据,可以多创建几个Cookie对象进行存储。
    • 特点:
      • 浏览器端的数据存储技术
      • 存储的数据声明在服务器端
      • 临时存储:存储在浏览器的运行内存中,浏览器关闭即失效
      • 定时存储:设置了Cookie的有效期,存储在客户端的硬盘中,在有效期内符合路径要求的请求都会附带该信息。
      • 默认cookie信息存储好之后,每次请求都会附带,除非设置有效路径,这样当浏览器访问设置的uri时,发送的请求才会带上cookie。

    十一、session技术学习

    • 作用:解决一个用户的不同请求处理的数据共享问题
    • 原理:用户第一次访问服务器。服务器会创建一个session对象给此用户,并将该session对象的JSESSIONID使用cookie技术存储到浏览器中,保证用户的其他请求能够获取到同一个session对象,也保证了不同请求能够获取到共享的数据。
    • 特点:
      • 存储在服务器端,服务器进行创建
      • 依赖cookie技术
      • 一次会话
      • 默认存储时间是30分钟
    • 使用:
      • 创建或获取session对象:HttpSession hs = req.getSession();.如果请求中拥有session的标识符也就是JSESSIONID,则返回其对应的session对象;如果请求中没有session的标识符也就是JSESSIONID,则创建新的session对象,并将其JSESSIONID作为cookie数据存储到浏览器内存中。如果session对象失效了,也会重新创建一个session对象,并将其JSESSIONID存储在浏览器内存中。
      • 设置session存储时间:hs.setMaxInactiveInterval(int seconds);在指定时间内session对象没有被使用则销毁,如果使用了则重新计时。
      • 设置session强制失效:hs.invalidate();
      • 存储和获取数据
        • 存储:hs.setAttribute(String name,Object value);
        • 获取:hs.getAttribute(String name) 返回的数据类型为Object
        • 存储和取出的动作发生在不同的请求中,但是存储要先于取出执行。
      • 使用时机:一般用户在登录web项目时会将用户的个人信息存储到session中,供该用户的其他请求使用。
      • 总结:session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session对象不失效的情况下,用户的任意请求都能够获取到同一个session对象。
      • 作用域:一次会话。在JSESSIONID和session不失效下为整个项目。
      • session失效处理:将用户请求中的JSESSIONID和后台获取到的SESSION对象的JSESSIONID进行比对,如果一直则session没有失效,如果不一致则证明session失效了。重定向到登录页面。
    • 注意:JSESSIONID存储在了cookie的临时存储空间中,浏览器关闭即失效

    十二、ServletContext学习

    • 作用:解决不同用户共享数据的问题
    • 特点:服务器创建,用户共享
    • 作用域:整个项目内
    • 生命周期:服务器启动到服务器关闭
    • 使用:
      • 获取ServletContext对象

        1. ServletContext sc=this.getServletContext();
      • 使用ServletContext对象完成数据共享

        • 数据存储:sc.setAttribute(String name,Obejct value);
        • 数据获取:sc.getAttribute(String name);返回的是object类型
        • 不同的用户可以对ServletContext对象进行数据的存储,获取的数据不返回null。
      • 获取web.xml文件的全局配置数据(将静态数据和代码进行解耦)

        • sc.getInitParameter(String name);根据键名返回web.xml配置的全局数据的值,返回String类型。如果数据不存在返回null
        • sc.getInitParameterNames();返回简明的枚举
        • 配置方式:一对context-param只能存储一组键值对
          <context-param> <param-name>name</param-name> <param-value>value</param-value> </context-param>
      • 获取web目录下的绝对路径:String path=sc.getRealPath(String path).获取的路径为项目根目录,path参数为项目根目录中的路径。

    十三、ServletConfig对象学习

    • 作用:获取在web.xml中给每个servlet单独配置的数据
    • 使用:
      • 获取ServletConfig对象:ServletConfig sc = this.getServletConfig()
      • 获取web.xml中servlet的配置信息:标签配置

    十四、web.xml文件使用总结

    • 作用:存储项目相关的配置信息,保护Servlet.解耦一些数据对程序的依赖
    • 使用位置:
      • 每个Web项目中
      • Tomcat服务器中(在服务器目录conf目录中)
    • 区别:
      • web项目下的web.xml文件为局部配置,针对本项目的配置
      • Tomcat下的web.xml文件为全局配置,配置公共信息
    • 内容(核心组件):
      • 全局上下文配置(全局配置参数)
      • Servlet配置
      • 过滤器配置
      • 监听器配置
    • 加载顺序:web容器会按ServletContext->context-param->listener->filter->servlet这个顺序加载组件,这些元素可配置在web.xml文件中的任意位置。
  • 相关阅读:
    【转】关于维生素的那些事
    【转】MaBatis学习---源码分析MyBatis缓存原理
    【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
    【转】Java学习---垃圾回收算法与 JVM 垃圾回收器综述
    Qt 中的对象模型(Object Model)
    The Property System
    Qt--core模块概述
    QtCore概述
    在Android Studio中下载Android SDK的两种方式(Android Studio3.0、windows)
    同一个进程的多个线程堆栈共享状况
  • 原文地址:https://www.cnblogs.com/ylcc-zyq/p/12546988.html
Copyright © 2011-2022 走看看