JavaWeb--Servlet、Tomcat

Servlet容器/web容器

  1. Serlvet和Servlet容器

  2. Servlet和jsp存在再Servlet容器中

  3. Servlet容器为JavaWeb应用提供运行环境,它负责管理Servlet和JSP的生命周期,以及它们的共享数据

  4. Servlet容器也被称为:JavaWeb应用容器,或者Servlet/JSP容器

  5. 目前流行的Servlet容器

    • Tomcat(免费开源)
    • Resin(商用)

Web服务器

  1. 常见的Web服务器:
    • WebLogic:Oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范
    • WebSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范
    • JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范
    • Tomcat:Apache公司,中小型JavaEE服务器,支持少量的JavaEE规范

Tomcat

  1. Tomcat目录下

  2. Tomcat是什么?

    • 是一个Servlet容器,用来管理servlet/jsp
    • 修改端口号,conf目录下server.xml文件,打开后找到Connector标签,修改其port属性,就是修改了端口号
    • Tomcat默认端口号是8080
  3. 动态项目和静态项目:

    • 静态项目就是一些HTML,JAVASCRIPT网页图片之类的
    • 目录结构:
  java动态目录:
    -- 项目名称
       -- WEB-INF
          -- web.xml:该项目的核心配置文件
          -- calsses目录:放置字节码文件
          -- lib目录:放置目录依赖的jar包
  1. 将Tomcat集成到IDEA中

Servlet

  1. server applet:运行在服务器端的小程序

  2. servlet就是一个接口,定义可Java类被浏览器访问到(Tomcat识别)的规范

  3. 将来我们自定义一个类,实现Servlet接口,重写方法

  4. 快速入门:

    • 创建JavaEE项目
    • 实现Servlet接口,重写Servlet的方法
    • web.xml中配置servlet
  /**
    xml中配置servlet
  */
  <servlet>
    <servlet-name>demo01</servlet-name>
    <servlet-class>cn.edu.tit.servlet.ServletDemo01</servlet-class>
  </servlet>
  //路径配置,后期可以用注解代替,在url中直接访问这个路径
  <servlet-mapping>
    <servlet-name>demo01</servlet-name>
    <url-pattern>/demo01</url-pattern>
  </servlet-mapping>
  1. servlet的执行原理

    • 当服务器端接收到客户端浏览器的请求后,会解析请求url路径,获得访问的Servlet的资源路径
    • 查找web.xml文件,是否有对应的标签内容,再通过找到相同name的标签
    • 如果有,则再找到对应的全类名
    • tomcat会将字节码文件加载进内存,并创建对象去调用service方法JavaWeb--Servlet、Tomcat_第1张图片
  2. servlet的生命周期相关的方法

    • init():初始化方法
      • 特点:在Servlet类被创建时执行一次,只执行一次
    • service():提供服务方法
      • 特点:没一次Servlet被访问时,执行一次,或者执行多次
    • destroy():销毁方法
      • 特点:在服务器被正常关闭时,Servlet销毁时,执行一次
      • 如果不是正常关闭的,该方法不会被执行
    • getServletConfig()://了解
    • getServletInfo()://了解
  3. servlet的生命周期:

    • 被创建:执行一次init方法,只执行一次
      • 8、9
    • 提供服务:执行service方法,可执行多次
      • 每次访问Servlet时,service方法就会被调用一次
    • 被销毁:执行destroy方法,进行销毁
      • Servlet被销毁时执行,服务器关闭时,servlet被销毁
      • 只有服务器正常关闭时,才会执行destroy方法
      • destroy方法在servlet被销毁之前执行,一般用于释放资源
  4. Servlet什么时候被创建?

    • 默认情况下,第一次被访问时,Servlet被创建
    • 可以配置执行Servlet的创建时机
    <servlet>
      <servlet-name>demo01</servlet-name>
      <servlet-class>cn.edu.tit.servlet.ServletDemo01</servlet-class>
    
       // 在服务器已启动时就创建Servlet。数字可以是负数,一般是5
      <load-on-startup>5</load-on-startup>
    </servlet>
    
  5. Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的

    • 多个用户同时访问时,可能存在线程安全问题
    • 解决方法:不能加锁,不然效率太低。
      • 尽量不要在Servlet定义成员变量,即使定义了成员变量,也不要修改值
      • 因为成员变量是共享资源
  6. Servlet配置很麻烦怎么办?

    • servlet3.0提供了注解配置,不需要xml来配置
    • 类上使用 @WebServlet(value=“/demo01”) 注解

Servlet、HTTP协议、Request

  1. servlet的体系结构:

    • Servlet接口有两个子类:
      • HttpServlet 抽象类
      • GenericServlet 抽象类
    • 因为HttpServlet实现了Servlet接口,他给你实现了其他的一些无用的方法做了空实现,将来定义Servlet类时,可以继承HttpServlet类
    • HttpServlet类是对HTTP协议的一种封装实现,不用获取请求方式了,提供了两个方法
      • doGet()
      • doPost()
  2. servlet的配置

    • urlPattern的规范
      • @WebServlet("/demo01")
      • @WebServlet("/user/demo01"):目录结构,必须写全才能访问
      • @WebServlet("user/* "):user目录下的全部servlet都可以被访问
      • @WebServlet("/* "):优先级很低,如果什么都不写,就访问的是这个servlet
      • @WebServlet("/* .do"):写成这样demo.do就可以访问

你可能感兴趣的:(JavaWeb)