javaweb Servlet解析

Servlet概念

servlet是运行在Web服务器中的小型java程序(即:服务端的小应用程序)。servlet通常通过HTTP(超文本传输协议)接受和响应来自Web客户端的请求。

1.1、编写一个servlet程序:

新建一个web工程。

a、写一个java类,实现servlet接口
(下图黑体部分为java文件中的代码,蓝绿色部分为webContent/WEB-INF/web.xml。)
javaweb Servlet解析_第1张图片

文件布局及执行过程例子:
javaweb Servlet解析_第2张图片

Servlet执行过程:
javaweb Servlet解析_第3张图片

Servlet通用写法:

Servlet (接口)
		|
		|
	GenericServlet
		|
		|
	HttpServlet (用于处理http的请求)
  1. 定义一个类,继承HttpServlet 复写doGet 和 doPost

javaweb Servlet解析_第4张图片

Servlet生命周期(重要)

概念:

生命周期

从创建到销毁的一段时间

生命周期方法

从创建到销毁,所调用的方法

生命周期方法详解

  • init方法

      在创建该servlet的实例时,就执行该方法。
      一个servlet只会初始化一次, init方法只会执行一次
      默认情况下是 : 初次访问该servlet,才会创建实例。 
    
  • service方法

      只要客户端来了一个请求,那么就执行这个方法了。
       该方法可以被执行很多次。 一次请求,对应一次service方法的调用
    
  • destroy方法

        servlet销毁的时候,就会执行该方法
      
        	1. 该项目从tomcat的里面移除。
        	2. 正常关闭tomcat就会执行 shutdown.bat
    

doget &dopost

doGet 和 doPost不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行。

生命周期

实例化–>初始化–>服务->销毁

出生:(实例化–>初始化)第一次访问Servlet就出生(默认情况下)
活着:(服务)应用活着,servlet就活着
死亡:(销毁)应用卸载了servlet就销毁。

javaweb Servlet解析_第5张图片

javaweb Servlet解析_第6张图片

小tips:

让Servlet创建实例的时机 提前。

  1. 默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。

  2. 那么这个时候,初次访问,可能会在init方法中逗留太久的时间。 那么有没有方法可以让这个初始化的时机提前一点。

  3. 在配置的时候, 使用load-on-startup元素来指定, 给定的数字越小,启动的时机就越早。 一般不写负数, 从2开始即可。

让servlet在服务器启动时就创建:
通过修改webContent/WEB-INF/web.xml中:

javaweb Servlet解析_第7张图片

Servlet的三种创建方式

  • 实现javax.servlet.Servlet接口
  • 继承javax.servet.GenericServlet类(适配器模式)!

javaweb Servlet解析_第8张图片

  • 继承javax.servlet.http.HttpServlet类(模板方法设计模式)开发中最常用的方式
    javaweb Servlet解析_第9张图片

Servlet --> GenericServlet --> HttpServlet (继承HttpServlet)

Servlet映射细节

  • webContent/WEB-INF/web.xml文件:
    javaweb Servlet解析_第10张图片

  • servet映射细节2: 通配符* 代表任意字符串

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

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

  • url-pattern: /action/* 以/action开头的请求都可以访问
    *匹配规则:

优先级:从高到低
绝对匹配–> /开头匹配 --> 扩展名方式匹配

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

Servlet的线程安全

单实例:每次访问多线程
解决线程安全问题的最佳办法,不要写全局变量,而写局部变量。

Servlet获取配置信息

作用1:可以获取servlet配置信息

  • 方式1:

javaweb Servlet解析_第11张图片

  • 方式2:

在这里插入图片描述

  • 方式3:
    在这里插入图片描述

作用2:可以获得ServletContext对象

ServletContext(重要)

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

作用:

  • 域对象:在一定范围内(当前应用),使多个Servlet共享数据。
  • 常用方法:
void setAttribute(String name,object value);//向ServletContext对象的map中添加数据

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

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

javaweb Servlet解析_第12张图片

获取全局配置信息

  • 修改web.xml文件:

javaweb Servlet解析_第13张图片

获取资源路径:

String getRealPath(String path);//根据资源名称得到资源的绝对路径.
可以得到当前应用任何位置的任何资源。

javaweb Servlet解析_第14张图片

实现转发
javaweb Servlet解析_第15张图片

版权所有,禁止转载,违者必究。
喜欢的朋友可以关注博主以及点赞评论喔,未来将会持续更新javaweb相关的内容。
您的支持是我更新最大的动力~

你可能感兴趣的:(javaweb,Servlet,javaweb,图文解析)