Servlet中的生命周期、基础配置、三种匹配规则、缺省Servlet以及路径问题
Servlet1. Servlet源码public interface Servlet {//监听Servlet的初始化void init(ServletConfig var1) throws ServletException;ServletConfig getServletConfig();//处理请求void service(ServletR...
Servlet
1. Servlet源码
public interface Servlet {
//监听Servlet的初始化
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
//处理请求
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
//监听Servlet的销毁
void destroy();
}
2. Servlet的生命周期
2.1 生命周期
一个事物从开始到存活再到结束也就是需要看Servlet的初始化、存活以及销毁;
2.2 Servlet的生命周期特点
- servlet初始化:Servlet默认不是随着服务器的启动而初始化,当第一次访问Servlet时才初始化,后面访问就执行处理请求,不会初始化了;
- servlet销毁:服务器关闭的时候会销毁Servlet;
- Servlet在服务器中是一个单例(不会占用过多的内存);
测试代码:
public class TestServlet04 extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("TestServlet04初始化");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("TestServlet04处理请求");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
public void destroy() {
System.out.println("TestServlet04销毁");
}
}
3. load on startup配置
根据Servlet生命周期可知Servlet默认不会随着服务器的启动而初始化,进行load on startup配置可以让servlet随着服务器的启动而初始化;
-
有10个优先级:1~10;数字越小,优先级越高;
当服务器启动时,load on startup值为1的先初始化,然后再初始化值为2的,以此类推;
<servlet>
<servlet-name>TestServlet05</servlet-name>
<servlet-class>com.kaka.test_01.servlet.TestServlet05</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet05</servlet-name>
<url-pattern>/Demo05</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>TestServlet06</servlet-name>
<servlet-class>com.kaka.test_01.servlet.TestServlet06</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet06</servlet-name>
<url-pattern>/Demo06</url-pattern>
</servlet-mapping>
</web-app>
- 以上代码首先初始化TestServlet06在初始化TestServlet05;
4. Servlet的配置
自定义Servlet:
- 声明该Servlet;
- 给该Servlet配置访问路径;
4.1 Servlet可以有多个访问名称
给对应的Servlet多个servlet-mapping标签
<servlet>
<servlet-name>TestServlet07</servlet-name>
<servlet-class>com.kaka.test_01.servlet.TestServlet07</servlet-class>
</servlet>
<!--第一个访问名称-->
<servlet-mapping>
<servlet-name>TestServlet07</servlet-name>
<url-pattern>/Demo07_01</url-pattern>
</servlet-mapping>
<!--第二个访问名称-->
<servlet-mapping>
<servlet-name>TestServlet07</servlet-name>
<url-pattern>/Demo07_02</url-pattern>
</servlet-mapping>
4.2 url-parttern的书写规则
4.2.1 完全匹配
要求网址上的访问名称完全和url-parttern一致
必须以"/"开头,否则会报错:IllegalArgumentException : Invalid url-pattern;
<!--使用完全匹配-->
<servlet>
<servlet-name>TestServlet07</servlet-name>
<servlet-class>com.kaka.test_01.servlet.TestServlet07</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet07</servlet-name>
<url-pattern>/Demo07</url-pattern>
</servlet-mapping>
4.2.2 目录匹配
要求网址上的访问名称中的目录和url-parttern一致
必须以"/“开头,以”*"结尾
如:/a/b/* , 目录必须是/a/b,后面随便写
<!--使用目录匹配-->
<servlet>
<servlet-name>TestServlet08</servlet-name>
<servlet-class>com.kaka.test_01.servlet.TestServlet8</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet08</servlet-name>
<url-pattern>/a/b/*</url-pattern>
</servlet-mapping>
4.2.3 后缀名匹配
要求网址上的访问名称中的后缀和url-parttern一致
不能以"/“开头,以”*"开头,后缀名根据业务写
如:*.xyz。后缀名必须是xyz,其他随意写
<!--使用后缀名匹配-->
<servlet>
<servlet-name>TestServlet09</servlet-name>
<servlet-class>com.kaka.test_01.servlet.TestServlet09</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet09</servlet-name>
<url-pattern>*.xyz</url-pattern>
</servlet-mapping>
5. 缺省Servlet
创建一个servlet时,如果它的url-pattern的配置值为”/”这时这个servlet就是一个缺省的servlet,tomcat服务器中默认就有缺省Servlet;
自定义缺省Servlet:到当前项目中的web.xml中配置一个Servlet,它的url-parttern为"/";
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
作用:
- 凡是在web.xml文件总找不到匹配的servlet-mapping元素的URL,它们的请求都将交给缺省Servlet处理。缺省的servlet用于处理其他Servlet处理不了的请求;(返回404错误)
- 当访问tomcat服务中的静态资源(html、图片,IO流读写)时,实际上是在访问这个缺省的servlet;
<servlet>
<servlet-name>DefaultServlet</servlet-name>
<servlet-class>com.kaka.test_01.servlet.DefaultServlet</servlet-class>
</servlet>
<!--覆盖了tomcat中原有的Servlet配置-->
<servlet-mapping>
<servlet-name>DefaultServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- SpringMVC框架中,用于放行静态资源;
6.服务器中的路径问题
6.1 路径分类
-
带协议的绝对路径:http://localhost:8080/day51/img/girl.jpg
-
不带协议的绝对路径:/day51/img/girl.jpg
-
相对路径:
当前目录:./ ,可以省略
上一级目录:…/
6.2 访问图片
<html lang="en">
<head>
<meta charset="UTF-8">
<title>路径问题</title>
<!--访问img文件夹下的01.jpg-->
</head>
<body>
<!--带协议的绝对路径-->
<img src="http://localhost:8080/Day51/img/01.jpg">
<!--不带协议的绝对路径-->
<img src="/Day51/img/01.jpg">
<!--相对路径
图片:http://localhost:8080/Day51/img/01.jpg
页面:http://localhost:8080/dDay51/html/demo02.html
上一级目录 --> img文件夹 --> 01.jpg
-->
<img src="../img/01.jpg">
</body>
</html>
6.2 访问Servlet
<html lang="en">
<head>
<meta charset="UTF-8">
<title>路径问题</title>
</head>
<body>
<!--带协议的绝对路径-->
<a href="http://localhost:8080/Day51/demo10">带协议的绝对路径</a><br>
<!--不带协议的绝对路径-->
<a href="/Day51/demo10">不带协议的绝对路径</a><br>
<!--相对路径
http://localhost:8080/Day51/demo10
http://localhost:8080/Day51/html/demo04.html
上一级目录 --> demo10
-->
<a href="../demo10">相对路径</a>
</body>
</html>
- 用的比较多:不带协议的绝对路径和相对路径
更多推荐
所有评论(0)