【Spring Boot 三】Servlet

  • 内容
  • 评论
  • 相关

上一篇我们对如何创建Controller 来响应JSON 以及如何显示数据到页面中,已经有了初步的了解。

 

Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、Filter、Listener、Interceptor 等等。

 

当使用spring-Boot时,嵌入式Servlet容器通过扫描注解的方式注册Servlet、Filter和Servlet规范的所有监听器(如HttpSessionListener监听器)。

 

Spring boot 的主 Servlet 为 DispatcherServlet,其默认的url-pattern为“/”。也许我们在应用中还需要定义更多的Servlet,该如何使用SpringBoot来完成呢?

 

在spring boot中添加自己的Servlet有两种方法,代码注册Servlet注解自动注册(Filter和Listener也是如此)。

 

  • 代码注册通过ServletRegistrationBeanFilterRegistrationBean ServletListenerRegistrationBean 获得控制。 也可以通过实现 ServletContextInitializer 接口直接注册。

 

  • 在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet@WebFilter@WebListener 注解自动注册,无需其他代码。

 

通过代码注册Servlet示例代码:

 

SpringBootSampleApplication.java

 

MyServlet.java

 


 

使用注解注册Servlet示例代码(推荐)

 

SpringBootSampleApplication.java

 

MyServlet2.java

 

使用 @WebServlet 注解,其中可以更方便设置一些属性。

测试

 

代码注册Servlet:

启动基于代码注册Servlet的SpringBootSampleApplication

访问:http://localhost:8080/xjh/asd

结果:大家好,我的名字叫Servlet

 

注解注册Servlet:

启动基于注解注册Servlet的SpringBootSampleApplication

访问:http://localhost:8080/xjh/myservlet

结果:大家好,我的名字叫Servlet2

 

这里有个中文乱码问题,在src/main/resources/application.properties

 

有个问题:DispatcherServlet 默认拦截“/”,MyServlet 拦截“/xs/*”,MyServlet2 拦截“/xs/myservlet”,那么在我们访问 http://localhost:8080/xs/myservlet 的时候系统会怎么处理呢?

 

如果访问 http://localhost:8080/xs/abc 的时候又是什么结果呢?这里就不给大家卖关子了,其结果是“匹配的优先级是从精确到模糊,复合条件的Servlet并不会都执行”

 

既然系统DispatcherServlet 默认拦截“/”,那么我们是否能做修改呢,答案是肯定的,我们在SpringBootSampleApplication中添加代码:

 

当然,这里可以对DispatcherServlet做很多修改,并非只是UrlMappings。

 

Java EE知识库:http://lib.csdn.net/base/javaee

 

SPRING INITIALIZR:http://start.spring.io/

 

 

 

成功需要付出代价,不成功需要付出更高的代价。

喜欢 2

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Title - Artist
0:00