文章目录
一、Servlet简介
Servlet是SUN公司提供的一个动态网页开发技术
,是一个运行在Web服务器上的小的Java程序
。用来接收和响应从客户端发送过来的请求,通常使用HTTP协议。
Servlet的作用
用来处理从客户端浏览器发送的请求,并且可以对请求作出响应。(处理/响应 请求
)
Servlet运行原理
Servlet作为补充Web服务器功能的组件,需要依赖于Servlet容器才能运行。
说明:当用户在浏览器发出请求,浏览器会依据地址栏中的IP地址以及端口号找到相对应的Web服务器。
- 如果请求的是静态资源:Web服务器直接找到相应的HTML页面然后返回给浏览器。
- 如果请求的是动态资源:
Web服务器
会进一步将请求传递给Servlet容器
,Servlet容器会创建Servlet实例,并将请求的数据解析出来传递给Servlet实例
。Servlet实例真正处理完数据之后,响应结果由容器的一个通信模块
返回给Web服务器
,进而返回给浏览器
。
二、Servlet生命周期
(1)Servlet四个阶段的执行时机
①实例化 调用Servlet的构造器创建一个具体的Servlet对象的过程。
②初始化 在初始化阶段,init()方法会被调用。
③就绪 Servlet被初始化后就处于能够响应请求的就绪状态,Servlet(req,res)
④销毁 销毁Servlet容器停止或者重新启动都会引起销毁Servlet对象的动作destyoy()。
(2)编写Servlet(演示生命周期)
创建servlet实现Servlet接口或继承HttpServlet的Java类,覆盖service()。
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LifeServlet extends HttpServlet {
// 1.实例化
public LifeServlet() {
System.out.println("第一阶段--->实例化");
}
// 2.初始化
public void init() throws ServletException {
System.out.println("第二阶段--->初始化");
}
// 3.就绪
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
System.out.println("第三阶段--->就绪");
}
// 4.销毁
public void destroy() {
System.out.println("第四阶段--->销毁");
}
}
Servlet配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- servlet配置 -->
<servlet>
<!-- servlet的名称 -->
<servlet-name>LifeServlet</servlet-name>
<!-- servlet的全路径 -->
<servlet-class>web.LifeServlet</servlet-class>
<!-- 设置初始化参数 -->
<init-param>
<!-- 参数名 -->
<param-name>company</param-name>
<!-- 参数值 -->
<param-value>keystone</param-value>
</init-param>
<init-param>
<param-name>address</param-name>
<param-value>zhengzhou</param-value>
</init-param>
<!-- 设置servlet在服务器启动的时候被创建,>=0表示启动时会被创建,<0或未设置表示servlet被请求时被创建-->
<!-- 如果有多个servlet,谁的值越小,谁被创建的越早 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet的映射 -->
<servlet-mapping>
<!-- servlet的名称,对应servlet配置中的名称 -->
<servlet-name>LifeServlet</servlet-name>
<!-- servlet的访问路径(1.完全路径匹配) -->
<url-pattern>/life</url-pattern>
<!-- 2.目录匹配 -->
<!-- <url-pattern>/aaa/*</url-pattern>-->
<!-- 3.后缀匹配 -->
<!-- <url-pattern>*.do</url-pattern> -->
</servlet-mapping>
</web-app>
url-pattern配置
完全路径匹配 > 目录匹配 > 后缀匹配
①完全路径匹配:以/
开始
如:/ServletDemo1
,/aaa/ServletDemo2
,/aaa/bbb/ServletDemo3
。
②目录匹配/
通配符匹配:以/
开始 需要以*
结束。*
匹配0个或多个字符
例如:/*
,/aaa/*
,/aaa/bbb/*
③后缀匹配:不能以/开始,可以以*开始的
例如:*.do
,*.action
。
目录匹配和后缀匹配不能混合使用。错误的写法:/*.do
,/aaa/bbb/*.do
三、ServletConfig对象
ServletConfig对象作用是获得servlet配置信息
。
获得ServletConfig对象:Servlet cfg = getServletConfig();
获取init-param参数值
方法 | 作用 |
---|---|
String getServletName() ; |
获得Servlet在web.xml中配置的name的值 |
String getInitParameter(String name) ; |
获得Servlet的初始化参数 |
Enumeration getInitParameterNames() ; |
获得所有Servlet的初始化参数的名称 |
String getServletContext() ; |
获得servletContext对象 |
ServletConfig对象Demo
// 3.就绪
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
System.out.println("第三阶段--->就绪");
//获得servletConfig对象,从而获取初始化参数
ServletConfig config =getServletConfig();
String company = config.getInitParameter("company");
String address = config.getInitParameter("address");
System.out.println("company:"+company+" address:"+address);
}