• [JavaWeb] Servlet


    前言 : 本文的Web服务器使用的是apache的开源TomCat  版本为8

    一.什么是Servlet

      Servlet是Java部署在Web服务器的一个应用程序,如在 Tomcat 中,Tomcat 作为一个Web容器,获得用户浏览器对服务器发送的请求,然后发送给部署在Web内的Java程序Servlet,然后通过Servlet对该请求进行响应

    简单的讲,用户传请求给Tomcat,Tomcat把请求转化为Request 然后 发给Servlet应用程序,该程序使用Response 对请求进行回应后通过Web容器发送给用户

    二.HttpServlet

      1.Servlet接口

      一个Java的Servlet应用程序类应该实现 javax.servlet.Servlet 这一接口,才能拥有一个Servlet应用程序的基本功能能力,这个接口定义了五个抽象方法

        i.init()       初始化方法

        ii.getServletConfig()    获取Servlet配置的方法

        iii.getServletInfo()  获取Servlet信息的方法

        iv.service()  Servlet的服务方法,对于用户的请求,以及Servlet应用程序具体对该请求的操作都会在此方法内实现,然后通过Web服务器对其进行调用

        v.destory()  Servlet的销毁方法

      2.一个Servlet应用程序的生命周期

        i.首先当一个连接连接至该程序时,Web容器调用此Servlet类,调用init() getServletConfig() getServletInfo() 三个方法对该Servlet进行初始化,然后通过service()方法对该用户进行服务

        ii.在第一个连接之后的连接每次请求进来都会只使用service()方法进行服务,而不再需要使用初始化方法对该Servlet进行初始化

        iii.当Web容器关闭前的最后一个连接结束之后,Web容器会调用该Servlet的destroy()方法对该Servlet进行销毁

        特别的 : 当Servlet的配置文件中配置了<startonload></startonload>标签之后,如果参数设置了非负整数,(0则是取决于Tomcat是否想加载   大于零则是必定加载)    会在服务器开启时就对该Servlet进行加载

      3.HttpServlet抽象类

        问题:程序员编写一个Servlet如果都要去实现Servlet接口的话,初始的五个方法就很让人头疼,然后service()方法内该写什么呢?

        所以为了减少Java编程人员的工作量增加开发效率.在javax.servlet包内有个抽象类 : GenericServlet .该抽象类实现了Servlet接口,该抽象类对除了service()方法外的其他四个属于Servlet的方法都进行了实现.

        而HttpServlet抽象类则是继承了上述的GenericServlet 对service()方法进行了重写, 其在service()方法内定义了一些判断,即判断浏览器的请求方式为什么,如果是post则调用该类内的doPost()方法,如果是get则调用该类内的doGet()方法,如果是其他,则调用其他的do方法

      4.继承HttpServlet

        继承了HttpServlet之后,重写抽象类内的doGet()doPost()等方法,当Tomcat调用此类内的service()方法时会因为父类内定义的判断寻找到子类中相对应的方法.此设计模式为模板设计模式,通过父类规定子类应该进行的行为操作.

    三.Servlet内重要的对象

      1.HttpServletRequest HttpServletResponse

        这两个对象分别对应着用户浏览器的请求  和  Web服务器给用户的相应反馈

        request.getParameter() 方法 可以获取用户发送请求的参数

        response.getWrite() 等方法可以获取一个可以对用户浏览器进行写入的对象

        Important :

            重定向: response.sendRedirect()

            转发: request.getRequesDispatcher().forward()

            区别:

              url不一样 : 重定向会明显的让用户浏览器更改url然后访问相应的网页, 转发对用户完全透明,用户无法知道服务器进行了什么操作,服务器在自己内部进行相应的资源获取

              参数 : 重定向不能携带参数进行访问 , 而转发则可以让请求体的域内设置参数然后通过请求体域获取参数

      2.Session

        一个Session代表一次用户和服务器之间的会话对象,当用户离开此服务器亦或如直接关闭浏览器则算会话结束,而一个Session若服务器无特别规定,当会话结束时此对象可再保持一段默认的时间,若此段时间之内该用户并未重新带着这个SessionId进入服务器,则该对象会被销毁回收

        SessionID创建方法,当request使用了getSession()方法时,服务器自动分配一个SessionID放入响应头内发送给用户,用户浏览器接收之后会存入Cookie中,当然若是用户浏览器并未开启Cookie功能则此ID
    并不会存入用户的浏览器内.

        在此Session对象存活期间,此ID可指引唯一一个对象

        SessionID在Tomcat的计算方式为 :  随机数+JvmID + 时间

        Session域  :

          由上述可知一个Session代表一次会话  那么存在此Session域内的数据可被此会话当中的任一资源获取

      3.Cookie

       

    Cookie cookie = new Cookie();   //Cookie实例的创建
    cookie.setValue();    
    cookie.getValue();    //cookie值得获取和设置
    cookie.getPath();
    cookie.setPath();      //cookie有效路径的设置和获取
    cookie.setDomain;
    cookie.getDonmain;    //cookie有效域的设置和获取
    
    Cookie[] cookies = request.getCookies();    //通过请求对象获取用户发送的所有Cookie数组
    
    response.addCookie();    //通过响应对象发送cookie    

        Cookie是储存在客户端的浏览器上的,Cookie只能储存String类型的数值

      4.ServletContext

        一个Web服务器开启时便会创建一个ServletContext对象,该对象的生命周期从服务器开启那一刻便生成了,然后直到服务器关闭才销毁.

        因此该对象的域是全局的,只要该服务器的任一对象需要都可以使用该对象的域,所以此对象的域一般用来储存一些不机密的数据,亦或是是全局都用的着的常量之类的

        此对象可以通过请求对象的request.getServletContext() 获得

      5.重要:

        1.Servlet应用程序内共拥有三个作用域 : HttpServletRequest域  HttpSession域  ServletContext域 一共有这三个域,从作用域的大小可排 : context > session > request

        2.Cookie 和 Session 的区别

          Cookie是服务器生成保存在客户浏览器端的,而Session是服务器生成保存在服务端的,但是SessionID会随着Cookie一同发送到客户端内

          Cookie只能保存String  Session能保存Java对象

          Cookie是在设定的路径和设定的作用域下才有效  Session在一次会话中的全局都有效

          Cookie由于是发给客户端浏览器自行保存的,所以Cookie的安全性极低  而Session安全性由服务器来保障

    四.Filter Listenner

      1.Filter

        Filter是一道在客户浏览器和服务器端的一道过滤屏障,用于过滤用户请求和服务端响应,一般来讲一个服务器可以拥有多个FIlter对象,而这些对象则被统一称为Filter链

        Filter共有三个方法:

          init()  该方法位Filter的初始化方法

          doFIlter()  该方法为放行方法,放至下一个FIlter亦或是终端

          destroy()  该方法为Filter的销毁方法,Web服务器关闭时就会销毁此Filter

      2.Listener

        欸 我不写了  欸 哈哈哈哈哈

    五.注册方法

      1.<servlet>

        <servlet-name>demo</servlet-name>

        <servlet-class>com.lzzy.controller.DemoServlet</servlet-class>

       </servlet>

       <servlet-mapping>

        <servlet-name>demo</servlet-name>

        <url-pattern>/demo</url-pattern>

       </servlet-mapping>

      2.@WebServlet("/demo")

  • 相关阅读:
    Android进阶篇软件下载及安装
    Android进阶篇访问Https链接
    Android进阶篇时间日期工具类
    Android进阶篇左右滑屏
    java:环境变量设置
    Android进阶篇录音
    Android进阶篇图片选择功能
    Android基础篇异步获取网络图片
    java进阶篇解压缩zip rar文件
    Android进阶篇Sqlite使用(一)
  • 原文地址:https://www.cnblogs.com/Lzzycola/p/13618092.html
Copyright © 2020-2023  润新知