一、Java Web的三大组件
组件 | 作用 | 实现接口 |
---|---|---|
Servlet | 小应用程序,在JavaWeb的服务器中主要做为控制器来使用 可以处理用户的请求并且做出响应 | javax.servlet.Servlet |
Filter | 过滤器,对用户发送的请求或响应进行集中处理,实现请求的拦截 | javax.servlet.Filter |
Listener | 监听器,在某些框架中会使用到监听器,如:Spring框架 在Web执行过程中,引发一些事件,对相应事件进行处理。主要是监听Servlet的3大域对象的创建销毁以及属性的变化 | javax.servlet.XxxListener 每个事件有一个接口 |
二、过滤器
- Filter属于一个接口
- 作用:用来过滤动态资源(servlet jsp)和静态资源(html)
说明:如果过滤器放行则可以访问服务器的资源,如过滤器不放行则不让浏览器访问服务器资源
2.1、过滤器开发入门(掌握)
Filter表示过滤器接口,想使用该接口必须自定义类实现接口并实现该接口中的所有抽象方法。
方法 | 说明 |
---|---|
void init(FilterConfig filterConfig) | 过滤器对象创建的时候调用的方法 |
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | 执行过滤的方法,每次访问别拦截的资源都会执行该方法 |
void destory() | 过滤器销毁的时候调用的方法 |
2.1.1 过滤器开发步骤:
- 自定义过滤器类实现过滤器接口Filter
- 在自定义类中实现过滤器接口Filter中的所有抽象方法
- 在doFilter方法体中书写拦截资源的代码
- 配置过滤器
- 访问被拦截的资源
方法说明:
Filter过滤器接口的:
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
参数:
request:表示请求对象,不满足http协议
response:表示响应对象,不满足http协议
chain:属于FilterChain的接口,表示过滤器链。
FilterChain接口中具有一个放行方法:
void doFilter(ServletRequest request, ServletResponse response)
如果放行,希望浏览器可以访问拦截的资源则执行该方法
如果不放行,不希望浏览器访问拦截的资源则不执行该方法
2.1.2 过滤器开发代码实现(xml版本)
页面:过滤器初识.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>来拦截我啊...</h1>
</body>
</html>
自定义类实现过滤器接口:
public class 过滤器初识 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init初始化了....");
}
/*
3.在doFilter方法体中书写拦截资源的代码
注意:每次访问被拦截的资源都要执行doFilter方法,我们在doFilter方法体中书写拦截资源的代码:
1)如果希望用户可以访问到被拦截的资源那么执行,过滤器链接口中的放行方法:
filterChain.doFilter(servletRequest,servletResponse);
2)如果不希望用户可以访问到被拦截的资源那么不书写过滤器链接口中的放行方法:
filterChain.doFilter(servletRequest,servletResponse);
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter开始拦截....");
//允许查看页面就写,否则注掉
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("destroy销毁了....");
}
}
web.xml配置过滤器:
<!--配置过滤器拦截静态资源过滤器初识.html-->
<filter>
<filter-name>DD</filter-name>
<!--
这里必须配置过滤器类的全路径,底层使用反射技术调用无参构造方法创建过滤器类的对象
-->