JavaWeb(二)

Servlet 基础

什么是Servlet?

  1. 运行在web服务器或应用服务器的java程序
  2. 在web上创建动态内容的有效而强大的解决方案
  3. 由容器来管理生命周期与web容器进行交互
  4. 由sun规范了其功能

Servlet规范的组成

  1. web应用程序
  2. Servlet 与 HTTPServlet :Servlet 用于创建动态的网页,HTTPServlet 天生就支持http。

  3. 过滤器 : Servlet 2.3 版本后引入了过滤器的概念,http所有请求都可以设置让他经过过滤器。

  4. 安全 : Servlet使用了JVM提供的安全功能。

  5. 国际化 : 一个程序能在各个语言环境下都可以使用。 properties文件。 :表示能够开发任何语言的内容,来自于java平台的国际化和本地支持。

Servlet 的API结构

  1. Servlet API 就是专门用于开发Servlet的java类和接口。web容器和Servlet之间用API进行通信。

  2. 一个Servlet就是运行在服务器端的一个Servlet API的java类。定义了与容器的一些规范。

  3. javax.servlet.GenericServlet 当前类实现servlet的基本特征和功能,是一个普通的servlet。

  4. javax.servlet.http.HTTPServlet 实现了GenericServlet。 他也是一个servlet,还对http进行了支持。

  5. 当我们启动服务器的时候,用户访问servlet ,容器会自动将http请求数据封装到httpServletRequest,也会产生一个HTTPServletResponse对象。

  6. 每位请求都会到达service()方法,容器自动调用的。


     接口: ServletConfig    Servlet
    
     类:        GenericServlet(普通Servlet,不能处理http)
    
    http处理:      HttpServlet (能处理http请求)
    

Servlet如何运行?

容器一旦启动,会调用应用程序里面的web.xml文件

请求过来的内容会自动调用service方法。

servlet专门设计了 javax.servlet.http.HTTPServlet 中有七个方法。其中 doGet和doPost是我们常用的。

doGet 和 doPost 是service的代理,service会根据具体的方法,将权利转交给相应的方法进行处理,他只需要控制。

Servlet 路径匹配

    <!-- 注册servlet 在底层会new TestServlet() 通过反射的方式 -->    
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.lovo.servlet.TestServlet</servlet-class>
    </servlet>

    <!-- 映射url地址,映射多个地址可以再写一个url-pattern 或者 servlet-mapping -->
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/Test</url-pattern>
    </servlet-mapping>
  1. 精确匹配:必须通过名字才能访问当前这个servlet

  2. 以扩展名匹配: *. xxx 不管前面是什么,只要是以 .xxx 结尾都可以访问。尽量避免用html结尾的,前面也不能加/。 会优先访问这个,而不访问其他的html。

  3. 路径映射(模糊匹配):/* 不管后面是什么,只要工程文件夹正确,就访问这个

  4. 默认匹配:直接写一个/ (叫缺省的servlet,表示任何没有匹配到的servlet都会进入这个里面)

  5. 精确匹配 > 路径映射 > 以扩展名匹配 (精确度大小)

  6. 匹配的精确度有关系,谁最像就匹配谁

Servlet 生命周期

  1. 容器装载并实例化Servlet

  2. 容器触发init()方法装载资源

  3. 请求达到触发service服务方法,处理请求产生相应

  4. 容器丢弃Servlet调用destroy()方法


生命周期执行的步骤:

启动容器,默认的配置不会调用init()方法,第一次访问才会调用init()方法。

以后每次访问都进入service方法,自动创建多线程。

当容器关闭的时候,容器自动销毁servlet。

init() 和 destroy()只会执行一次,service 可以执行多次

              <load-on-startup>1</load-on-startup>

中间的参数可以控制当前servlet是否在容器启动的时候加载,如果是负数就是在第一次访问的时候才进行加载。如果是0,或者正数,就表示启动容器就加载,数字越小,优先级越高,最高就是0了。

Servlet全局配置

<context-param> 
    <param-name>charset</param-name>
    <param-value>utf-8</param-value>
</context-param>

意思是:全局的配置,所有的servlet都要设置请求或者响应编码集

ServletContext :

  1. 容器一旦启动,容器会自动创建一个上下文对象(servletContext),用于描述servlet运行环境的信息。是的servlet可以和容器进行通信。代表当前的web应用。

  2. servletConfig对象维护了servletContext的引用。 可以通过 配置对象.getServletContext() 获取到上下文对象[初始化存在的话就只能用config.getServletContext()] ; 也可以通过直接在类中用this.getServletContext()方法[但是必须需要没有重写初始化方法]获得。

  3. 一个web应用中的所有servlet共享一个servletContext。每个servlet之间可以通过servletContext对象来进行通信。servletContext对象也被称为context域对象。

  4. 所有的用户也共享一个servletContext

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值