告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发

简介: 告别web.xml映射Servlet、Filter、Listener,解锁注解新方式开发

编译软件:IntelliJ IDEA 2019.2.4 x64

操作系统:win10 x64 位 家庭版

服务器软件:apache-tomcat-8.5.27

一. Servlet、Filter、Listener的注解方式是什么?

Servlet、Filter和Listener都支持使用注解的方式进行配置:

  • Servlet常用的注解是@WebServlet,可以在Servlet类上添加该注解并指定Servlet的url-pattern等属性来配置Servlet。
  • Filter常用的注解是@WebFilter,可以在Filter类上添加该注解并指定要过滤的url-pattern等属性来配置Filter。
  • Listener常用的注解是@WebListener,可以在Listener类上添加该注解来声明一个Listener。

二. 为什么要使用Servlet、Filter、Listener的注解方式?

主要原因:

替代原来配置文件web.xml的写法

使用注解的好处:

  1. 使开发更加方便和快速,相比于传统的在web.xml中配置相关节点,使用注解的方式可以将配置信息直接写在对应的类上,降低了配置的复杂性,也不用手动添加大量的xml节点,减少了出错的可能性
  2. 可以提高代码的可读性和可维护性,注解可以直接放在代码中,对于开发团队来说更容易理解,而且当应用有变化时,只需要修改对应的代码就可以了,无需再去寻找web.xml文件并修改其中的配置

三. 如何使用Servlet、Filter、Listener的注解方式?

3.1 Servlet的注解方式

3.1.1 常用用法

位置:

在Servlet实现类的上方写注解

语法:

//设置当前Servlet的名称为HelloServlet,访问其路径为/hello
@WebServlet(name="HelloServlet",value="/hello")

name:相当于配置文件的servlet-name的值

value:相当于配置文件的url-pattern

可以简写:

name可以省略,如果只剩下value属性,属性名可以省略,如 @Webservlet(“/hello”)

注意:

value属性和urlPatterns属性都可以用来指定Servlet能够处理的请求路径。
如果同时指定了两个属性,则以urlPatterns属性的值为准。

例如@WebServlet(name=“HelloServlet”,value=“/hello”,urlPatterns =‘’/first"),最终以/first作为访问路径**

3.1.2 案例

案例:使用Servlet的注解代替原来的web.xml映射Servlet,演示其效果

代码示例如下:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//设置HelloServlet的访问路径 :/hello
@WebServlet(name = "HelloServlet",value = "/hello")
public class HelloServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("访问了HelloServlet.......");
    }
}

3.2 Filter的注解方式

3.2.1 常用用法

位置:

在Filter实现类的上方写注解

语法:

//声明一个Filter,指定该Filter名为HelloFilter,指定了该Filter处理请求的url-pattern为"/hello"
@WebFilter(filterName="HelloFilter",urlPatterns="/hello")

filterName:相当于web.xml中的filter-name标签的值

urlPatterns:相当于web.xml中的url-pattern标签的值

注意:

value属性和urlPatterns属性都可以用来指定Servlet能够处理的请求路径。
如果同时指定了两个属性,则以urlPatterns属性的值为准。

3.2.2 案例

案例:使用F1lter注解代替原来的web.xml映射的形式设置HelloFilter的过滤路径,演示其效果

代码示例如下:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//设置HelloFilter的过滤路径:/hello
@WebFilter(filterName="HelloFilter",urlPatterns="/hello")
public class HelloFilter 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("HelloFilter放行前的代码...");
        filterChain.doFilter(servletRequest,servletResponse);//放行请求
        System.out.println("HelloFilter放行后的代码...");
    }
    @Override
    public void destroy() {
    }
}

3.3 Listener的注解方式

3.3.1 常用用法

位置:

在 Listener实现类的上方写注解

语法:

@WebListener

ps:

此注解方式一般不用写属性值,且它默认只有一个属性value(默认属性值为空字符串)

3.3.2 案例

案例:使用Listener的注解代替原来的web.xml注册监听器的形式,演示其效果

代码示例如下:

@WebListener
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象创建后执行");
    }
    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象销毁后执行");
    }
}

相关文章
|
13天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
42 5
|
1月前
|
Java 应用服务中间件 Spring
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
26 0
|
3月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
32 1
|
3月前
|
XML Java 数据库
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
这篇文章是Spring5框架的实战教程,详细介绍了事务的概念、ACID特性、事务操作的场景,并通过实际的银行转账示例,演示了Spring框架中声明式事务管理的实现,包括使用注解和XML配置两种方式,以及如何配置事务参数来控制事务的行为。
Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
|
3月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
88 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
3月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
190 0
|
3月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
45 0
|
3月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
28 0
|
3月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
39 0
|
4月前
|
开发框架 JSON 前端开发
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理