• servlet 笔记


     servlet 介绍:

    • javaWeb的核心技术!(servlet,filter,listenner)+(PageContext,ServletContext,ServletRequest,HttpSession)
    • 服务端运行的java类,service()方法:处理请求,完成响应。
    • Servlet3.0之前的版本要使用Servlet,需要在web.xml中进行配置。在web.xml中配置Servlet时可以配置一些初始化参数,在servlet中可以通过ServletConfig接口提供的方法来获取 这些参数。
    • 在Servlet3.0及3.0之后的版本,该版本新增了若干注解。

    servlet生命周期:

       实例化(构造函数) ----> 初始化init() ---->  服务service() ---->  销毁destroy()

    1.  创建,init阶段: 第一次访问该servlet类时,创建并初始化。默认注意并不是tomcat容器启动阶段!(但配置start on load参数>=0时,容器启动时加载 )
    2.  service阶段:每访问一次,执行一次。
    3.  destroy阶段:应用结束。

        整个生命周期,init和destroy只执行一次,主要任务在service函数。实现servlet的类要重写service逻辑,如HttpServlet类。

    自定义servlet类

      开发过程,根据业务逻辑创建的自定义servlet,实现servlet接口。

      常用的抽象类:javax.servlet.GenericServlet  和  javax.servlet.http.HttpServlet

    1. GenericServlet  抽象类,与协议无关,适配器模式:已实现servlet接口的全部方法。
        继承此类的自定义servlet不必实现servlet接口的全部方法,用哪个重写哪个--适配器模式。
    2. HttpServlet (继承GenericServlet)  抽象类,http实现类,模板方法设计模式
        service()方法为protected,所以它的实现类 只需重写doGet(),doPost()等方法。开发中常见

    servlet配置

    1. web.xml中配置
      name --> class --> urlpattern
    2. 注解配置
      @WebServlet("/hello")

    servlet参数

    private  ServletConfig servletConfig;
    
    //getInitParameter() 获取某个K-V 参数
    String name = servletConfig.getInitParameter("name");
    String password = servletConfig.getInitParameter("password");
    
    //getInitParameterNames() 获取全部参数
    Enumeration<String> en = servletConfig.getInitParameterNames();
    
    //上面获取的是具体某个servlet类的局部参数
    //下面servletConfig.getServletContext().getInitParameter获取全局参数
    //getServletContext()返回ServletContext对象!!!---comtext容器,全局唯一
     String k = servletConfig.getServletContext().getInitParameter("k");
    
    
    //注解方式,先setAttribute赋值参数,getAttribute取值。K-V
    ServletContext servletContext = this.getServletContext();
    servletContext.setAttribute("user","Tom");
    String user = (String)servletContext.getAttribute("user");

    ServletContext对象

      servletContext,应用的servlet上下文容器,单实例唯一。tomcat服务器启动应用时产生,tomcat关闭时销毁context.

      servletContext对象是web应用中所有servlet的共享变量,用于servlet间的数据共享。

    • 获取servletContext对象:ServletContext context = config.getServletContext();

    servletContext对象功能:JavaWeb四大域对象之一

    Enumeration getAttributeNames()等 获取所有域属性的名称。  
    public String getInitParamenter(String name) 等 获取全局配置信息  
    public String getRealPath(String path)等 获取资源文件路径  
    public <T extends Servlet> createServlet(Class<T> clazz) 创建servlet,filter, listenner等 Dynamic
    addFilter(), addListenner(), addServlet() 添加web组件 Dynamic

    servlet重定向和转发

    • 重定向:HttpServletResponse的sendRedirect()方法。
        例如 response.sendRedirect(“demo.jsp");  //重定向到demo.jsp,此处注意路径,忘记加项目根目录
        可重定向到任意地址,浏览器url地址变化,request参数不共享。
    • 转发:RequestDispatcher.forward(request, response)方法。
            例如 request.getRequestDispatcher (“demo.jsp"). forward(request,response);//转发到demo.jsp
         只转发到同一web应用, 浏览器url地址不变,共享request参数。

     注意:sendRedirect()方法不能转发到“/WEB-INF/”路径下的jsp页面资源,而getRequestDispatcher().forword()可以重定向到“/WEB-INF/”路径下的jsp页面资源。如 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); 

      web-inf 服务器的安全目录,浏览器无法直接访问。可通过servlet的forward,或者springMVC的视图解析,但都不是url直接访问的

     区别: 转发是HttpServletRequest中的方法,基于请求。重定向是HttpServletResponse中的方法,基于响应。

  • 相关阅读:
    常见的分布式协议与算法【转】
    Linux的文件系统及文件缓存知识点整理【转】
    linux内核启动内核解压过程分析【转】
    Linux内核分析:Linux内核启动流程分析【转】
    Linux内核Ramdisk(initrd)机制【转】
    基于tiny4412的Linux内核移植 -- 设备树的展开【转】
    linux中RamDisk的三种实现方式【转】
    (十四)Linux kernel mmc 框架说明,包括mmc_test使用方法【转】
    ApplicationContext的初始化与销毁&Bean的生命周期&BeanPostProcessor的使用&Aware使用(四)
    Spring技术与内幕IoC实现(二)
  • 原文地址:https://www.cnblogs.com/scmath/p/11182957.html
Copyright © 2020-2023  润新知