Cheug's Blog

当前位置:网站首页 / JAVA / 正文

Servlet

2019-05-16 / JAVA / 1009 次围观 / 0 次吐槽 /

Servlet简介

Servletsun公司提供的一门用于开发动态web资源的技术

Sun公司在其API中提供了一个servlet接口

Servlet 是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。

servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),要完成2个步骤

编写一个Java类,实现servlet接口。

把开发好的Java类部署到web服务器中。

Servlet的执行过程

Servlet作用处理请求

当浏览器访问一个http://localhost:8080/hello/hello 路径,就向tomcat发送一个请求

        image.png

Servlet生命周期(重要)

Servlet生命周期四个状态:实例化-->初始化-->服务->销毁

        出生:(实例化-->初始化)第一次访问Servlet就出生(默认情况下)

        活着:(服务)应用活着,servlet就活着

        死亡:(销毁)应用卸载了servlet就销毁。

    image.png

Servlet的创建时机

默认情况下Servlet在第一次使用Servlet时才创建

可以在web.xml中设置load-on-startup2Servlet就会启动时调用构造方法和初始化方法

Servlet实现的三种方式

 实现javax.servlet.Servlet接口

    image.png

 继承javax.servet.GenericServlet(适配器模式)

    image.png

 继承javax.servlet.http.HttpServlet类(模板方法设计模式)

    image.png

  servlet结构

    image.png

    image.png

Servlet映射细节

掌握Servlet映射规则

通配符* 代表任意字符串,如图:

             url-pattern: *.do  *.字符串的请求都可以访问 注:不要加/

     url-pattern: /*  任意字符串都可以访问

    url-pattern/action/* /action开头的请求都可以访问

            匹配规则:

            优先级:从高到低

            绝对匹配-->  /开头匹配 --> 扩展名方式匹配

                        如果url-pattern的值是/,表示执行默认映射。所有资源都是servlet

        image.png

Servlet的线程安全问题

  Servlet是单例:多线程每次访问都是同一个对象

  解决线程安全问题的最佳办法,不要写全局变量,尽量不要,而写局部变量。

            image.png

Servlet的注解映射

        Servlet 3.0 注解配置

        注意:在配置映射时,路径要加斜杠,不然会报错

    image.png

ServletContext

        Context:上下文

        ServletContext: 代表的是整个应用。一个应用只有一个ServletContext对象。是单例对象 

        作用:

                域对象:在一定范围内(当前应用),使多个Servlet共享数据

        常用方法:

        void setAttribute(String name,object value);//ServletContext对象的map中添加数据

        Object getAttribute(String name);//ServletContext对象的map中取数据

        void rmoveAttribute(String name);//根据name去移除数据

        image.png

        image.pngimage.png

  获取全局配置信息

   第一步:web.xml中配置一个context-param

        image.png

    第二步:获取web.xml中的配置

        image.png

  获取资源路径

                    String getRealPath(String path);

                        根据资源名称得到资源的绝对路径.

                               可以得到当前应用任何位置的任何资源

Servlet的转发

  转发图解

            image.png

  代码实现

            image.png

            image.png


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.