一、Servlet接口
Servlet是运行在服务器端的小程序,Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
1、Servlet的创建
- 创建JavaEE项目
- 定义一个类,实现Servlet接口
- 实现接口中的抽象方法
- 配置Servlet
2、配置Servlet
web.xml
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>web.servlet.servletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
注解配置
urlpartten:Servlet访问路径
一个Servlet可以定义多个访问路径 : @WebServlet({“/d4”,“/dd4”,“/ddd4”})
@WebServlet({"/A1", "/A2"})
路径定义规则:
- /xxx:路径匹配
- /xxx/xxx:多层路径,目录结构
- *.do:扩展名匹配
3、Servlet的体系结构
Servlet – 接口
GenericServlet – 抽象类
HttpServlet – 抽象类
GenericServlet:
将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet(推荐使用):
对http协议的一种封装,简化操作
- 定义类继承HttpServlet
- 复写doGet/doPost方法
二、Filter:过滤器
当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。一般用于完成通用的操作,如:登录验证、统一编码处理、敏感字符过滤。
1、 使用步骤
- 定义一个类,实现接口Filter
- 复写方法
- 配置拦截路径
2、 配置详解
拦截路径配置
1、具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
2、拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
3、后缀名拦截:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
4、拦截所有资源:/* 访问所有资源时,过滤器都会被执行
拦截方式配置
- 注解配置
设置dispatcherTypes属性,有以下值:
1、REQUEST:默认值。浏览器直接请求资源
2、FORWARD:转发访问资源
3、 INCLUDE:包含访问资源
4、 ERROR:错误跳转资源
5、ASYNC:异步访问资源
- Web.xml配置
设置标签即可
3、过滤器链
过滤器链就是同时配置多个过滤器:如果有两个过滤器,过滤器A和过滤器B,那么它们的执行顺序如下
过滤器A—>过滤器B—>资源执行—>过滤器B—>过滤器A
过滤器先后顺序
1. 注解配置:
按照类名的字符串比较规则比较,值小的先执行,如:AFilter和BFilter比较第一个字符,A比B小所以A先执行。
2. web.xml配置
谁定义在上边谁先执行
4、过滤器的生命周期方法
//@WebFilter("/*")//访问所有资源前都会执行该过滤器
public class FilterDemo1 implements Filter {
//在服务器启动后,会创建Filter对象,然后调用init方法,只执行一次,用于加载资源
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
//在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destory方法,只执行一次
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//放行
chain.doFilter(request, response);
}
//每一次请求被拦截资源时,会执行,执行多次
@Override
public void destroy() {
Filter.super.destroy();
}
}
5、过滤器的执行流程
执行过滤器—>执行放行后的资源—>回来执行过滤器放行代码下边的代码
三、Listener:监听器
监听器是一个事件监听机制,将事件、事件源、监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码。
ServletContextListener
ServletContextListener用于监听ServletContext对象的创建和销毁。
主要方法如下:
@WebListener
public class ContextLoaderListener implements ServletContextListener {
//ServletContext对象创建后会调用该方法
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {}
//ServletContext对象被销毁之前会调用该方法
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
使用步骤:
- 定义一个类,实现ServletContextListener接口
- 复写方法
- 配置
1、web.xml配置
<listener>
<listener-class>cn.intcast.web.listener.ContextLoaderListener</listener-class>
</listener>
2、注解配置: @WebListener