Servlet本质上就是一个java类,只不过运行在Servlet容器中。
Servlet 简介
- Java Servlet 是和平台无关的服务器组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet方法,Servlet和客户的通信采用”请求/响应”的模式。
- Servlet可完成一下功能
- 创建并返回客户请求的动态HTML页面。
- 创建可嵌入到现有HTML页面中的部分HTML页面。
- 与其他服务器资源进行通信。
Servlet容器响应客户请求的过程
- 1.Servlet引擎检查是否已经装载并创建该Servlet实例对象,有4否2
- 2.装载并创建Servlet的一个实例对象:调用该Servlet的构造器
- 3.调用init()方法。
- 4.创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletReponse,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
- 5.Web程序在停止或重新启动前,Servlet引擎卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
Servlet生命周期方法:
都是被Servlet容器负责调用
1.构造器:只有第一次请求servlet时,创建Serrvlet的实例,是单实例的。(如果在web.xml中配置load-on-startup值为正数,在web应用被Servlet容器加载时创建实例,数值越小越早被创建。)
2.init方法:只调用一次,创建实例后调用,初始化当前Servlet。
3.service:每次请求都会调用service方法。
4.destory:终止程序前,被调用,释放当前servlet所占用的资源。
Servlet注册和运行
- Servlet程序必须通过Servlet容器来运行,并且存储目录有特殊要求,通常要求存储在WEB-INF/classes目录中。
- Servlet程序必须在WEB引用程序的Web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。
- 一个Servlet元素用于注册一个Servlet,它包含俩个主要的子元素:servlet-name和servlet-class,分别用来设置servlet的注册名称和Servlet完整类名。
- 一个Servlet-mapping元素用于映射一个已注册的Servlet的一个对外访问路径,它包含俩个子元素:servlet-name和url-pattern分别用于指定Servlet的注册名称和对外访问路程。
Servlet注册细节
- 同一个Servlet可以被映射到多个URL上,即多个servlet-mapping的子元素servlet-name的设置值可以是一个Servlet的注册名。
- 在Servlet映射的URL可以使用*通配符,但只能是俩种固定格式:一种是”.扩展名”,另外一种是以正斜杠(/)开头并以” /“结尾。
<servlet-mapping>
<servlet-name>anyna</servlet-name>
//扩展名匹配:表示可以访问以.do结尾路径
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>anyna</servlet-name>
//目录匹配 表示可以访问action下任意内容
<url-pattern>/action/*</url-pattern>
</servlet-mapping>
Servletconfig对象
- 先配置servlet初始化参数
web.xml
<!-- 节点必须在load-on-startup前面-->
<init-param>
<!--参数名 -->
<param-name>jdbc</param-name>
<!--参数值 -->
<param-value>mysql</param-value>
</init-param>
- 获取servlet初始化参数
getInitParameter(String name):获取指定的参数名的初始化参数。
String name=servletConfig.getInitParameter("jdbc")
getInitParameterNames():获取参数名组成的Enumeration对象
Enumeration<String> names=servletConfig.getInitParameterNames()
获取Servlet的配置名称(了解)
getServletName()getServletContext()
ServletContext对象
- Servlet引擎为每一个Web应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用。
- 由于一个Web应用的所有Servlet都共享一个ServletContext对象。所以Servlet对象被称之为application对象(Web应用程序对象)。
- 功能
-获取Web应用程序的初始化参数
记录日志
application域范围的属性
访问资源文件
获取虚拟路径所映射的本地路径
WEB应用程序之间的访问
ServletContext的其他方法 - 配置当前Web应用初始化参数
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
- 获取Web应用初始化参数
getInitParameter()
ServletContext servletContext=servletConfig.getServletContext();
String driver=servletContext.getInitParameter("driver");
getInitParameterNames()
Enumeration<String> names=servletContext.getInitParameterNames()
- 获取Web应用的某一个文件的绝对路径(必须在WebContent里面)
getRealPath 获取项目路径
getContextPath获取当前Web应用某一个文件对应输入流
getResourceAsStream(String path)