目录
一.概述
二.基础实现
1.导入坐标
2.定义实现类
3.注解
4.访问Servlet
三.执行流程
四.生命周期
1.加载和实例化
2.初始化
3.请求处理
4.服务终止
五.方法
1.init
2.service
3.destroy
4.getServletInfo
5.getServletConfig
六.体系结构
七.urlPattern配置
1.精确匹配
2.目录匹配
3.扩展名匹配
4.任意匹配
八.Xml配置Servlet
一.概述
servlet就是一门Java提供的动态开发web资源的技术。
Servlet是JavaEE规范之一,本质就是一个接口,需要开发人员自己定义Servlet类实现Servlet接口,并由web服务器运行Servlet。
查看API文档,开发者的任务便是编写实现类,实现上述接口中的5个方法。
二.基础实现
1.导入坐标
首先创建一个Web项目,前文已说过此处不赘述。
在配置文件中引入Tomcat的插件:
<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version></plugin></plugins></build>
添加Servlet的依赖:
<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency></dependencies>
2.定义实现类
如上,定义实现类。
package Myweb;import javax.servlet.*;
import java.io.IOException;public class ServletDemo1 implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}
重写方法。
3.注解
4.访问Servlet
配置文件中添加如下代码,将打包改为war包:
<packaging>war</packaging>
添加插件:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.2.0</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin>
打包。
启动Tomcat服务器~
键入正确的注释:
Servlet已经启动成功!(这句话是博主自行键入的~)
当然也可以通过Maven插件的方式运行~
三.执行流程
http://localhost:8080/Servlet_F1_war/demo1
如上是博主访问上述Servlet的路径,展开来说:
- localhost:8080:Tomcat服务器的端口号
- Servlet_F1_war:项目名
- demo1:Servlet的注解名
Servlet由web服务器创建,它的方法也由web服务器调用。
四.生命周期
1.加载和实例化
默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象。
2.初始化
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作。该方法只能调用一次。
@WebServlet(urlPatterns="/demo1",loadOnStartup = 0)
完成如上修改,则服务器启动时
3.请求处理
每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理~
4.服务终止
当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。
五.方法
1.init
初始化方法,创建Servlet时执行一次~
2.service
提供服务方法,每次Servlet被访问,都会调用该方法~
3.destroy
销毁方法,当Servlet被销毁时,调用该方法。
4.getServletInfo
获取ServletConfig对象。
5.getServletConfig
获取Servlet信息。
六.体系结构
开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet来继承HttpServlet。如下:
package Myweb;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/demo2")
public class ServletDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
}
考虑到不同请求方式提交数据的格式不同,需要针对不同方法编写不同的业务逻辑。HttpServlet的存在,本质上是简化了封装处理get请求和post请求的过程~
七.urlPattern配置
如上,一个Servlet可以配置多个访问路径。
1.精确匹配
即,访问路径与配置路径完全一致:
2.目录匹配
包含通配符的路径~
(需要注意的是,如果出现名字相似的重合情况,精确匹配的优先级会高于目录匹配~)
3.扩展名匹配
不能以斜杠开头~
4.任意匹配
无论写什么路径都可以访问得到。需要注意的是,该种写法优先级最低~
- "/"的配置方式,会覆盖掉Tomcat种的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet
- "/*",则意味着匹配任意访问路径
八.Xml配置Servlet
3.0版本以前,只支持XML配置方式。