一、Servlet实现步骤
- 编写一个java类,继承httpServlet
- 把开发好的java类部署到web服务器上
继承关系
Servlet
--genericServlet
--HttpServlet
--自己的servlet
二、项目创建与部署
1、创建项目
2、配置服务器环境
部署到服务器上
三、Web.xml
会增加这些配置
1
、
<servlet>
<servlet-name>ServletDemo1</servlet-name>
<servlet-class>com.javaweb.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/servlet/ServletDemo1</url-pattern>
</servlet-mapping>
<servlet>
|
servlet-name | servlet的注册名称 | |
servlet-class | 完整类名 | ||
<servlet-mapping>
|
url-pattern | servlet的注册名称 | |
servlet-name | 访问路径 |
2、servlet访问URL映射配置
同一个
servlet
可以被映射到多个
URL
上,也可以使用通配符进行映射,有两种格式:一种是
*.
拓展名,一种是
/*
。
例如:
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/servlet/ServletDemo1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletDemo1</servlet-name>
<url-pattern>*.haha</url-pattern>
</servlet-mapping>
对于如下的一些映射关系:
Servlet1
映射到
/abc/*
Servlet2
映射到
/*
Servlet3
映射到
/abc
Servlet4
映射到
*.do
问题:
当请求
URL
为
“/abc/a.html”
,
“/abc/*”
和
“/*”
都匹配,哪个
servlet
响应
Servlet
引擎将调用
Servlet1
。
当请求
URL
为
“/abc”
时,
“/abc/*”
和
“/abc”
都匹配,哪个
servlet
响应
Servlet
引擎将调用
Servlet3
。
当请求
URL
为
“/abc/a.do”
时,
“/abc/*”
和
“*.do”
都匹配,哪个
servlet
响应
Servlet
引擎将调用
Servlet1
。
当请求
URL
为
“/a.do”
时,
“/*”
和
“*.do”
都匹配,哪个
servlet
响应
Servlet
引擎将调用
Servlet2
。
当请求
URL
为
“/xxx/yyy/a.do”
时,
“/*”
和
“*.do”
都匹配,哪个
servlet
响应
Servlet
引擎将调用
Servlet2
。
匹配的原则就是
"
谁长得更像就找谁
"
3
、
load-on-startup
<!-- tomcat
启动时就开始加载值越小优先级越高
-->
<load-on-startup>1</load-on-startup>
四、
servlet
运行过程
1
、
servlet
程序是由
web
服务器调用,
web
服务器接受到客户的访问
servlet
访问请求后:
1
)、
web
服务器首先检查是否已经装载并创建了该
servlet
实例对象,如果是直接执行第四步。
2
)、装载并创建该
servlet
实例对象。
3
)、调用该
servlet
实例对象的
initi()
方法
4
)、创建一个用于封装
http
请求消息的
HttpServletRequest
对象和一个代表
HTTP
响应消息
HttpServletResponse
对象,然后调用
Servlet
的
service()
方法并将请求和响应作为参数传递进去
5)、web应用在被停止或重新启动前,servlet引擎将卸载servlet,并在卸载之前调用servlet的destory()方法。
*
只有首次访问才创建目标
servlet
2
、生命周期
当第一次访问servlet这个对象的时候,服务器就会创建servlet实例,构造方法和initi方法会被先后调用,当发生请求时,服务器就会创建一个新的线程执行servlet里面的service方法在service方法里根据不同的请求方式 去调用doGet(),或doPost方法,服务器销毁的时候会销毁servlet对象,调用的destory方法。