Servlet、Filter以及Listener的使用
Servlet与Filter
spring原始的方式是在web.xml中配置servlet的,springboot整合servlet有两种方式。
通过注解扫描完成Servlet与Filter组件注册
首先新建一个类,继承HttpServlet类。
新建类上使用注解:@WebServlet(name="FirstServlet",urlPatterns="/first"),其中name是指定servlet的名称,如果不指定默认为类名的全限定名。
@WebServlet(name="FirstServlet",urlPatterns="/first")
public class FirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("FirstServlet............");
}
}
如果是filter就是新建一个filter类,实现Filter接口。
新建类上使用注解@WebFilter(filterName="FirstFilter",urlPatterns="/first"),其中urlPatterns可以使用*拦截某一类url
//@WebFilter(filterName="FirstFilter",urlPatterns={"*.do","*.jsp"})
@WebFilter(filterName="FirstFilter",urlPatterns="/first")
public class FirstFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("进入Filter");
arg2.doFilter(arg0, arg1);
System.out.println("离开Filter");
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
编写启动类:
@SpringBootApplication
@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化 也会扫描@WebFilter注解
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
以上就能通过:http://localhost:8080/first 访问servlet了,并且filter也可以拦截访问了。
通过方法完成Servlet与Filter的组件的注册
编写servlet类继承HttpServet类,但是不写WebServletet注解,通过启动类中的方法注册,Filter类似,不列举代码了。
public class SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("SecondServlet..........");
}
}
编写启动类,由于filter与servlet组件的注册方法一样,这里就把filter也一并列举
@SpringBootApplication
public class App2 {
public static void main(String[] args) {
SpringApplication.run(App2.class, args);
}
/**
* 注册Servlet
* @return
*/
@Bean
public ServletRegistrationBean getServletRegistrationBean(){
ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
bean.addUrlMappings("/second");
return bean;
}
/**
* 注册Filter
*/
@Bean
public FilterRegistrationBean getFilterRegistrationBean(){
FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
//bean.addUrlPatterns(new String[]{"*.do","*.jsp"});
bean.addUrlPatterns("/second");
return bean;
}
}
Listener
这里只介绍通过注解完成Listener组件的注册,方法的这里暂不介绍。监听器有多个监听器,都是监听某个事件触发该监听器。下面的例子是ServletContext的监听器。
首先新建Listener类实现ServletContenxtListener接口,使用注解@WebListener。
@WebListener
public class FirstListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("Listener...init......");
}
}
同Servlet与Filter一样,启动类中也只需要@SpringBootApplication@ServletComponentScan就可。
标签:
SpringBoot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!