JavaWeb-Servlet

目录

一、基本概念

二、 Servlet的继承关系

三、 Servlet的生命周期

四、ServletConfig和ServletContext

4.1 ServletConfig

4.2  ServletContext

五、基本使用


一、基本概念

  • 什么是 Servlet

        1、 Servlet 是 JavaEE 规范之一。 规范就是接口

        2、 Servlet 就 JavaWeb 三大组件之一。 三大组件分别是: Servlet 程序、 Filter 过滤器、 Listener 监听器。

        3、 Servlet 是运行在服务器上的一个 java 小程序, 它可以接收客户端发送过来的请求, 并响应数据给客户端

        4.在整个Web应用中,Servlet主要负责处理请求协调调度功能。我们可以把Servlet称为Web应用中的『控制器』

二、 Servlet的继承关系

 1) 继承关系HttpServlet -> GenericServlet -> Servlet
 2) Servlet中的核心方法init() , service() , destroy()
 3) 服务方法: 当有请求过来时,service方法会自动响应(其实是tomcat容器调用的)
            在HttpServlet中我们会去分析请求的方式:到底是get、post、head还是delete等等,然后再决定调用的是哪个do开头的方法。
           而在HttpServlet中这些do方法默认都是405的实现风格-需要我们子类实现对应的方法,否则默认会报405错误
 4) 因此,我们在新建Servlet时,我们才会去考虑请求方法,从而决定重写哪个do方法

三、 Servlet的生命周期

     1) 生命周期对应Servlet中的三个方法:init(), service(), destroy()
    2) 默认情况下:
        第一次接收请求时,这个Servlet会进行实例化(调用构造方法)、初始化(调用init())、然后务(调用service())
        从第二次请求开始,每一次都是服务
        当容器关闭时,其中的所有的servlet实例会被销毁,调用销毁方法
    3) 通过案例我们发现:
        - Servlet实例tomcat只会创建一个,所有的请求都是这个实例去响应
        - 默认情况下,第一次请求时,tomcat才会去实例化,初始化,然后再服务.

                这样的好处是什么? 提高系统的启动速度 。

                这样的缺点是什么? 第一次请求时,耗时较长。
        - 如果需要提高系统的启动速度,当前默认情况就是这样。如果需要提高响应速度,我们应该设置Servlet的初始化时机。


    4) Servlet的初始化时机:
        - 默认是第一次接收请求时,实例化初始化
        - 我们可以通过<load-on-startup>来设置servlet启动的先后顺序,数字越小,启动越靠前,最小值0


    5) Servlet在容器中是:单例的线程不安全的
        - 单例:所有的请求都是同一个实例去响应
        - 线程不安全:一个线程需要根据这个实例中的某个成员变量值去做逻辑判断。但是在中间某个时机,另一个线程改变了这个成员变量的值,从而导致第一个线程的执行路径发生了变化

四、ServletConfig和ServletContext

4.1 ServletConfig

  • ServletConfig 类从类名上来看, 就知道是 Servlet 程序的配置信息类
  • Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建, 我们负责使用。
  • Servlet 程序默认是第一次访问的时候创建, ServletConfig每个 Servlet 程序创建时, 就创建一个对应的 ServletConfig 对象。
  • ServletConfig 类的三大作用

1、 可以获取 Servlet 程序的别名 servlet-name 的值       .getServletName();

2、 获取初始化参数 init-param           .getInitParameter("String str");

3、 获取 ServletContext 对象              .getServletContext( );

<!-- 配置Servlet本身 -->
<servlet>
    ... ...

    <!-- 配置初始化参数 -->
    <init-param>
        <param-name>name</param-name>
        <param-value>value</param-value>
    </init-param>
</servlet>

4.2  ServletContext

  • 1、 ServletContext 是一个接口, 它表示 Servlet 上下文对象
  • 2、 一个 web 工程, 只有一个 ServletContext 对象实例
  • 3、 ServletContext 对象是一个域对象
  • 4、 ServletContext 是在 web 工程部署启动的时候创建。 在 web 工程停止的时候销毁
  • ServletContext 类的四个作用

1、 获取 web.xml 中配置的上下文参数 context-param   .getInitParameter("String str");

2、 获取当前的工程路径, 格式: /工程路径                      .getContextPath();

3、 获取工程部署后在服务器硬盘上的绝对路径                .getRealPath("/");

4、 像 Map 一样存取数据,操作域对象 

        setAttribute(k,v);         getAttribute(k);          removeAttribute(k); 

	<servlet>
		… ...
		<!--context-param 是上下文参数(它属于整个 web 工程)-->
		<context-param>
			<param-name>username</param-name>
			<param-value>context</param-value>
		</context-param> 
		… ...
	</servlet>

五、基本使用

  • 通过继承 HttpServlet 实现 Servlet 程序

        一般在实际项目开发中, 都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。

        1、 编写一个类去继承 HttpServlet 类

        2、 根据业务需要重写 doGetdoPost 方法

        3、 到 web.xml 中的配置 Servlet 程序的访问地址

<servlet>
        <servlet-name>ServletName</servlet-name>
        <servlet-class>LocationOfServletClass</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>ServletName</servlet-name>
        <url-pattern>/name</url-pattern>
</servlet-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值