Servlet概念
servlet是运行在Web服务器中的小型java程序(即:服务端的小应用程序)。servlet通常通过HTTP(超文本传输协议)接受和响应来自Web客户端的请求。
1.1、编写一个servlet程序:
新建一个web工程。
a、写一个java类,实现servlet接口
(下图黑体部分为java文件中的代码,蓝绿色部分为webContent/WEB-INF/web.xml。)
文件布局及执行过程例子:
Servlet执行过程:
Servlet通用写法:
Servlet (接口)
|
|
GenericServlet
|
|
HttpServlet (用于处理http的请求)
- 定义一个类,继承HttpServlet 复写doGet 和 doPost
Servlet生命周期(重要)
概念:
生命周期
从创建到销毁的一段时间
生命周期方法
从创建到销毁,所调用的方法
生命周期方法详解
-
init方法
在创建该servlet的实例时,就执行该方法。 一个servlet只会初始化一次, init方法只会执行一次 默认情况下是 : 初次访问该servlet,才会创建实例。
-
service方法
只要客户端来了一个请求,那么就执行这个方法了。 该方法可以被执行很多次。 一次请求,对应一次service方法的调用
-
destroy方法
servlet销毁的时候,就会执行该方法 1. 该项目从tomcat的里面移除。 2. 正常关闭tomcat就会执行 shutdown.bat
doget &dopost
doGet 和 doPost不算生命周期方法,所谓的生命周期方法是指,从对象的创建到销毁一定会执行的方法, 但是这两个方法,不一定会执行。
生命周期
实例化–>初始化–>服务->销毁
出生:(实例化–>初始化)第一次访问Servlet就出生(默认情况下)
活着:(服务)应用活着,servlet就活着
死亡:(销毁)应用卸载了servlet就销毁。
小tips:
让Servlet创建实例的时机 提前。
-
默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。
-
那么这个时候,初次访问,可能会在init方法中逗留太久的时间。 那么有没有方法可以让这个初始化的时机提前一点。
-
在配置的时候, 使用load-on-startup元素来指定, 给定的数字越小,启动的时机就越早。 一般不写负数, 从2开始即可。
让servlet在服务器启动时就创建:
通过修改webContent/WEB-INF/web.xml中:
Servlet的三种创建方式
- 实现javax.servlet.Servlet接口
- 继承javax.servet.GenericServlet类(适配器模式)!
- 继承javax.servlet.http.HttpServlet类(模板方法设计模式)开发中最常用的方式
Servlet --> GenericServlet --> HttpServlet (继承HttpServlet)
Servlet映射细节
-
webContent/WEB-INF/web.xml文件:
-
servet映射细节2: 通配符* 代表任意字符串
-
url-pattern: .do 以.字符串的请求都可以访问 注:不要加/
-
url-pattern: /* 任意字符串都可以访问
-
url-pattern: /action/* 以/action开头的请求都可以访问
*匹配规则:
优先级:从高到低
绝对匹配–> /开头匹配 --> 扩展名方式匹配
- 如果url-pattern的值是/,表示执行默认映射。所有资源都是servlet
Servlet的线程安全
单实例:每次访问多线程
解决线程安全问题的最佳办法,不要写全局变量,而写局部变量。
Servlet获取配置信息
作用1:可以获取servlet配置信息
- 方式1:
- 方式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去移除数据
获取全局配置信息
- 修改web.xml文件:
获取资源路径:
String getRealPath(String path);//根据资源名称得到资源的绝对路径.
可以得到当前应用任何位置的任何资源。
实现转发
版权所有,禁止转载,违者必究。
喜欢的朋友可以关注博主以及点赞评论喔,未来将会持续更新javaweb相关的内容。
您的支持是我更新最大的动力~