加载中...
加载中...
JavaWeb三大组件(Servlet、Filter、Listener)

JavaWeb三大组件(Servlet、Filter、Listener) 原创

JavaWeb三大组件(Servlet、Filter、Listener)

Servlet  

Servlet中的方法
(1)init方法
初始化方法,在Servlet被创建时(第一次访问到这个Servlet时)执行,只会执行一次
(2)service方法
每次Servlet被访问时执行
(3)destroy方法
在Servlet被杀死时会执行,在服务器正常关闭时,执行,只会执行一次
(4)getServletConfig方法(了解)
获取Servlet的配置对象
(5)getServletInfo方法(了解)
获取Servlet的一些信息,如版本,作者等等

Servlet的生命周期

先执行构造器  
(
1)被创建:执行init方法,只执行一次
Servlet什么时候会被创建?
默认情况下,第一次被访问时,Servlet被创建

(2)提供服务:执行service方法,会执行多次
(3)被消耗:执行destroy方法,只执行一次
服务器只有在正常关闭才会执行

Servlet是单例的
由于是单例的,多线程访问时存储安全隐患,由于并发访问时多个线程共享Servlet类的成员变量,所以存储数据不要用成员变量,而方法不是共享的,因此可以把数据存在方法的局部变量中

Servlet3.0 基于注解开发

好处:
支持注解配置。可以不需要web.xml了  

(1).创建JavaEE项目,选择Servlet的版本3.0以上
(2).定义一个类,实现Servlet接口
(3).重写方法
(4).在类上使用@WebServlet注解,进行配置
@WebServlet("/demo2") 注解接收参数是url匹配地址
注解配置详解
一个Servlet对应多个url @WebServlet({"/url1", “/url2”, “url3”})

Servlet的体系结构
自己编写Servlet实现类时,每次都要实现Servlet接口的5个方法,而常用的方法只有service方法

Filter:过滤器  

一般用于完成通用的操作。如 登录验证,编码统一处理,敏感字符过滤

复制收展XML1.步骤:
1.定义一个类,实现接口Filter
2.复写
3.配置拦截路径
两种配置方法
1.web.xml 配置
<filter>
<filter-name>demo</filter-name>
<filter-class>com.lx.web.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>demo</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.注解
@WebFilter("/*") 里面是拦截规则
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

java

复制收展Javapackage com.lx.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class FilterDemo implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filter");
// 放行,如果不放行,那么被访问的资源将无法看见
filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void destroy() {

}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

执行流程
请求首先到达过滤器的doFilter方法,然后对request增强,然后调用filterChain放行,等Servlet执行完毕后,对response增强  

过滤器生命周期  

1.init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
2.doFilter:每一次请求被拦截资源时,会执行。执行多次
3.destroy:在服务器关闭后,Filter对象会被销毁。如果服务器是正常关闭,则会执行destory方法。只执行一次。用于释放资源

Listener:监听器  

监听器可以监听Application、Session、Request对象,当这些对象发生变化就会调用对应的监听方法。   

将事件,事件源,监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码 。

监听ServletContext对象的创建和销毁
包含两个方法
contextDestroyed(ServletContextEvent sce) : ServletContext对象被销毁之前会调用该方法

contextInitialized(ServletContextEvent sce) : ServletContext对象创建后会调用该方法

复制收展Javaimport org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
* 监听application对象的创建和销毁
*/
public class  SystemListener implements ServletContextListener {
Logger logger= LoggerFactory.getLogger(SystemUpInitListener.class);

//当application初始化
@Override
public void contextInitialized(ServletContextEvent sce) {
//获取application
ServletContext application = sce.getServletContext();
//获取上下文路径
String contextPath = application.getContextPath();
logger.debug("当前上下文路径contextPath{}",contextPath);
application.setAttribute("PATH",contextPath);
}

//application 销毁
@Override
public void contextDestroyed(ServletContextEvent sce) {

}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

web.xml

复制收展XML<!--自定义监听器 监听上下文路径-->
<listener>
<listener-class>com.lx.listener.SystemListener</listener-class>
</listener>
  • 1
  • 2
  • 3
  • 4


没有更多推荐了 [去首页]
image
文章
376
原创
293
转载
83
翻译
0
访问量
183398
喜欢
73
粉丝
5
码龄
7年
资源
3

文章目录

加载中...
0
0