概述
文章目录
- 1. Servlet 快速入门
- 1.0Servlet介绍
- 1.1创建项目导入依赖
- 1.2定义类实现Servlet接口
- 1.3配置:在类上使用注解
- 1.4启动tomcat访问程序
- 2. Servlet 执行流程
- 3. Servlet 生命周期
- 3.1生命周期概念
- 3.2生命周期具体流程
- 3.3代码演示
- 4. Servlet 体系结构
- 5. Servlet urlPattern配置
- 5.1配置多个访问路径
- 5.2配置规则
- 5.3代码演示
- 5.3.1配置多个访问路径
- 5.3.2配置规则
- 6. Xml 配置方式编写Servlet
- 6.1编写Servlet类
- 6.2在web.xml配置该Servlet
- 7.总结
1. Servlet 快速入门
1.0Servlet介绍
servlet就是一个java应用程序,实现了servletAPI规范的java应用程序就是一个servlet,主要是用来处理来自web浏览器或者其他HTTP客户端的请求,常常跟我们的业务程序或者我们的数据对接,相当于一个中间层的作用,动态地生成内容给服务器;要部署和运行servlet,需要使用web容器(servlet容器),web容器本质上就是与servlet交互的web服务器组件,web容器负责管理servlet的生命周期,将URL映射到特定的servlet(具体在web.xml中配置)并确保URL请求者具有正确的权限。
1.1创建项目导入依赖
Servlet快速入门只需要四部就可以轻松入门,下面是步骤的一些说明,具体代码详见下面四步
①创建web项目,导入Servlet依赖坐标;
②定义一个类实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话
③在类上使用@WebServlet注解,配置Servlet访问路径
④启动tomcat,浏览器出入URL访问Servlet
在maven项目pom.xml文件中导入javax.servlet-api坐标依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
1.2定义类实现Servlet接口
创建ServletDemo1类并实现Servlet接口
public class ServletDemo1 implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("helloWord1");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
1.3配置:在类上使用注解
1.4启动tomcat访问程序
在浏览器输入以下网址,在控制台输出helloWorld即入门成功
http://localhost:8080/servlet_demo_war_exploded/demo1
控制台输出信息:
注意:
不会创建maven项目可以详见tomcat从入门到入坑这篇文章,手把手教你如何创建maven项目,
链接:https://blog.csdn.net/qq_52699757/article/details/126532387?spm=1001.2014.3001.5501
2. Servlet 执行流程
3. Servlet 生命周期
3.1生命周期概念
对象的生命周期指一个对象从被创建到销毁的过程。
3.2生命周期具体流程
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段
1.加载和实例化
默认情况下,当servlet第一次被访问时,由容器创建Servlet对象,当然也可以自己修改默认配置,如果想让服务器在启动时就创建Servlet对象,只需要在注解里面加入loadOnStartup=0或正整数即可,数字越小优先级越高,即**@WebServlet(urlPatterns=“/demo”,loadOnStartup=1)**
2.初始化
在Servlet实例化后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件,创建连接等初始化的工作,该方法只调用一次。
3.请求处理
每次请求Servlet时,Servlet容器都会调用Servlet的service方法对请求进行处理
4.服务终止
当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放,在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后就会被Java的垃圾收集器所回收
3.3代码演示
**
* 测试Servlet生命周期
*/
@WebServlet("/demo2")
public class ServletDemo2 implements Servlet {
/**
* 初始化方法
* 1.调用时机:默认情况下,Servlet被第一次访问。
* 2.调用次数:1次
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init.....");
}
/**
* 提供服务
* 1.调用时机:每一次Servlet被访问的时候
* 2.调用次数:多次
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("helloWord1");
}
/**
* 销毁
* 1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁
* 2.调用次数:1次
*/
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
4. Servlet 体系结构
由于直接继承Servlet需要实现里面的所有方法,每次写代码都需要判断服务器是get请求还是post请求,使得程序繁琐,所以我们在写程序的时候不再实现Servlet方法,直接继承HttpServlet类,来重写里面的doGet方法和doPost方法
代码如下:
/**
* 测试HttpServlet生命周期
*/
@WebServlet("/demo3")
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet.........");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
5. Servlet urlPattern配置
Servlet要想被访问,必须配置其访问路径(urlPattern)
5.1配置多个访问路径
@WebServlet(urlPattern={“/demo1”,“/demo2”})
5.2配置规则
注意: /和/*区别:
当我们的项目中Servlet配置了"/",会覆盖tomcat中的默认DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet,静态网页就不会显示
当我们的项目中配置了"/*",意味着匹配任意访问路径
5.3代码演示
5.3.1配置多个访问路径
/**
* Servlet urlPattern配置
* 1.配置多个访问路径
* 在浏览器访问
* http://localhost:8080/servlet_demo_war_exploded/demo4 或
* http://localhost:8080/servlet_demo_war_exploded/demo5 都能访问成功
* 2.配置规则(在后面讲)
* ①精准匹配
* ②目录匹配
* ③扩展名匹配
* ④任意匹配
*/
//
@WebServlet(urlPatterns = {"/demo4","/demo5"})
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo4AndDemo5");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
5.3.2配置规则
①精准匹配
/**
* 2.配置规则
* ①精准匹配
* 配置路径:@WebServlet("/user/select")
* 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/select
* ②目录匹配
* ③扩展名匹配
* ④任意匹配
*/
@WebServlet("/user/select")
public class ServletDemo5 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("精准匹配.......");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
②目录匹配
/**
* 2.配置规则
* ①精准匹配
* 配置路径:@WebServlet("/user/select")
* 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/select
* ②目录匹配
* 配置路径:@WebServlet("/user/*")
* * 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/aaa
* http://localhost:8080/servlet_demo_war_exploded/user/bbb
* *表示可以是任意字符
* 思考:当精准匹配和目录匹配路径一样的时候,例如:当我们输入http://localhost:8080/servlet_demo_war_exploded/user/select这个网址的时候他会匹配哪一个Servlet
* 答案:会匹配精准匹配的Servlet,因为精准匹配的优先级高
* ③扩展名匹配
* 配置路径:@WebServlet("*.do")
* 访问路径:http://localhost:8080/servlet_demo_war_exploded/aaa.do
* http://localhost:8080/servlet_demo_war_exploded/bbb.do
* 注意:*前面不可以有/,否则会报错
* ④任意匹配
*/
@WebServlet("*.do")
public class ServletDemo7 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("扩展名匹配........");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
④任意匹配
/**
* 2.配置规则
* ①精准匹配
* 配置路径:@WebServlet("/user/select")
* 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/select
* ②目录匹配
* 配置路径:@WebServlet("/user/*")
* * 访问路径:http://localhost:8080/servlet_demo_war_exploded/user/aaa
* http://localhost:8080/servlet_demo_war_exploded/user/bbb
* *表示可以是任意字符
* 思考:当精准匹配和目录匹配路径一样的时候,例如:当我们输入http://localhost:8080/servlet_demo_war_exploded/user/select这个网址的时候他会匹配哪一个Servlet
* 答案:会匹配精准匹配的Servlet,因为精准匹配的优先级高
* ③扩展名匹配
* 配置路径:@WebServlet("*.do")
* 访问路径:http://localhost:8080/servlet_demo_war_exploded/aaa.do
* http://localhost:8080/servlet_demo_war_exploded/bbb.do
* 注意:*前面不可以有/,否则会报错
* ④任意匹配
* 配置路径: @WebServlet("/")
* @WebServlet("/*")
* 访问路径:http://localhost:8080/servlet_demo_war_exploded/hehe
* http://localhost:8080/servlet_demo_war_exploded/haha
* 注意:在写程序的时候尽量不要使用任意匹配路径,”/*“优先级大于”/“
*/
@WebServlet("/")
public class ServletDemo8 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("任意匹配........");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
6. Xml 配置方式编写Servlet
Servlet从3.0版本后开始支持使用注解配置,3.0版本只支持XML配置文件的配置防护,具体实现步骤也不复杂,首先是编写Servlet类,然后在web.xml中配置该Servlet就可完成Servlet的XML配置,具体演示见下方代码
6.1编写Servlet类
/**
* 基于web.xml配置该Servlet
*/
public class ServletDemo9 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("demo9.......");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
6.2在web.xml配置该Servlet
web.xml配置文件
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>demo9</servlet-name>
<servlet-class>com.tz.servlet.ServletDemo9</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo9</servlet-name>
<url-pattern>/demo9</url-pattern>
</servlet-mapping>
</web-app>
7.总结
在编写程序的时候直接实现HttpServlet类,然后重写doGet和doPost方法,然后在类上使用注解@WebServlet(urlPatterns="/",loadOnStartup=-1)
模板如下:
@WebServlet(urlPatterns="/demo",loadOnStartup=-1)
public class ServletDemo3 extends HttpServlet {
//重写doGet方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//写实现方法
}
//重写doPost方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//写实现方法
}
}
注意:源代码已经上传到码云上,需要的自行下载
地址: https://gitee.com/tzmoxi/project-collection.git
最后
以上就是幸福水池为你收集整理的Servlet详细教程1. Servlet 快速入门2. Servlet 执行流程3. Servlet 生命周期4. Servlet 体系结构5. Servlet urlPattern配置6. Xml 配置方式编写Servlet7.总结的全部内容,希望文章能够帮你解决Servlet详细教程1. Servlet 快速入门2. Servlet 执行流程3. Servlet 生命周期4. Servlet 体系结构5. Servlet urlPattern配置6. Xml 配置方式编写Servlet7.总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复