Servlet入门、执行原理、生命周期、3.0注解配置、IDEA与Tomcat的相关配置
概念
service applet
- servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则
- 将来我们自定义一个类,实现Servlet接口,复写方法
快速入门
1.创建JavaEE项目
2.定义一个类,实现Servlet接口
3.实现接口中的抽象方法
重写service方法
//提供服务的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello FLY Servlet!!!");
}
4.配置servlet
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 配置servlet-->
<servlet>
<servlet-name>FlyServlet</servlet-name>
<servlet-class>com.fly.web.servlet.ServletDemo</servlet-class>
</servlet>
<!-- 虚拟路径与servlet实现类的映射-->
<servlet-mapping>
<servlet-name>FlyServlet</servlet-name>
<url-pattern>/FlyServlet</url-pattern>
</servlet-mapping>
</web-app>
启动项目访问:http://localhost:8080/FlyServlet
控制台就输出
每一次访问http://localhost:8080/FlyServlet
,
都会调用servlet实现类的重写的service方法,
service方法参数是
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
,
所以控制都会输出Hello FLY Servlet!!!
servlet执行原理
- 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径(如图demo1)
- 查找web.xml文件,是否有对应的标签体内容是否有请求路径的**/demo1**
- 如果有,则再找到对应的全类名
- tomcat会全类名通过反射,将该类的字节码文件加载进内存,并且创建其对象newInstance
- 然后调用其方法
servlet中的生命周期
servlet的方法
package com.fly.web.servlet;
import javax.servlet.*;
import java.io.IOException;
/**
* @Title: servlet入门
* @author: Fly
* @date: 2020/3/22 - 2:51
*/
public class ServletDemo implements Servlet {
// 初始化方法
//在servlet被创建时,执行,只会执行一次
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("servlet被创建了,init。。。");
}
//获取servletConfig对象
//servletConfig:servlet的配置对象
@Override
public ServletConfig getServletConfig() {
return null;
}
//提供服务的方法
//每一次servlet被访问时,执行,执行多次
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("servlet被访问,service。。。");
}
//获取servlet的一些信息,版本作者
@Override
public String getServletInfo() {
return null;
}
//销毁方法
//在服务器正常关闭时,servlet被销毁时,执行,一次
@Override
public void destroy() {
System.out.println("在服务器正常关闭,servlet被销毁,destroy。。。");
}
}
启动项目,访问http://localhost:8080/FlyServlet
可以看到控制台输出
再次刷新http://localhost:8080/FlyServlet
,也就再次访问servlet访问
正常关闭Tomcat服务器
简单来说:
1.被创建:执行init方法,只执行一次
2.提供服务:执行servlet方法,执行多次
3.被销毁:执行destroy方法,只执行一次
生命周期详情
servlet是单例的,如果定义的成员变量,就会存在线程安全问题
Servlet3.0配置方法
配置servlet很麻烦,没写一个servlet,就要写配置一次
所以就有了Servlet3.0的注解配置
创建JavaEE时就不需要web.xml了
urlPatterns可以省略:
IDEA与Tomcat的相关配置
该目录就是Tomcat部署的web项目
可以看到这里用的就是config/Cataline/localhoset/xxx.xml的热部署方式,项目的工作空间在docBase=“E:\devProject\tomcat_IDE\out\artifacts\tomcat_IDE_war_exploded”
可以看到是web.xml将web静态资源index.jsp和动态项目src里的整合成一个JavaEE的Web项目,WEB-INF目录下存放classes字节码文件和web.xml核心配置文件