Spring mvc基于注解自定义servlet

在spring mvc中,有一个servlet实现:DispatcherServlet,也是spring mvc的核心部分,拦截所有请求(/*),并分发给不同的处理器,进行处理。

需求

在一个spring boot工程中想要自定义一个servlet并注册进去,对于指定路径下的请求(比如路径/custom/*)作自定义处理,而不是映射到DispatcherServlet处理。

因为是spring boot工程无web.xml配置,需要自定义注解扫描注册。

方案

自定义一个servlet指定映射/custom/*的请求作自定义处理。

在servlet3.0及其以上版本中有一个注解:

javax.servlet.annotation.WebServlet

这个注解的作用是使用注解的方式声明一个servlet配置。

下面是它的源码,对其中常用的几个字段作了注释:

package javax.servlet.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {

    //servlet名称,未设置默认为servlet类的全路径
    String name() default "";

    // url匹配(设置该属性不用设置urlPatterns)
    String[] value() default {};

    // url匹配(与value不共存,两个只设置一个)
    String[] urlPatterns() default {};

    //加载启动命令提示
    int loadOnStartup() default -1;

    //servlet的初始化参数
    WebInitParam[] initParams() default {};

    //servlet是否支持异常操作,默认不支持
    boolean asyncSupported() default false;


    String smallIcon() default "";
    String largeIcon() default "";

    //servlet的描述
    String description() default "";

    //如果存在显示此servlet的名称
    String displayName() default "";
}

对自定义的类添加上该注解,然后在spring的java配置类上使用注解ServletComponentScan扫描该类。

示例

1. 自定义servlet类,继承FrameworkServlet复用spring mvc的一些能力

package com.xuxd.main.servlet.custom;

import org.springframework.web.servlet.FrameworkServlet;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "customDispatcherServlet", urlPatterns = {"/custom/*"})
public class CustmoDispatcherServlet extends FrameworkServlet {
    @Override
    protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //TODO:自定义处理,参考DispatcherServlet处理流程进行隔离处理,同时可以复用spring mvc的核心组件能力
        System.out.println("request enter...");
    }
}

2. 扫描servlet

package com.xuxd.main.servlet.custom;

import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ServletComponentScan(basePackageClasses = {CustmoDispatcherServlet.class})
public class CustomConfig {
}

将该配置bean注册到spring容器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不识君的荒漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值