当使用spring-Boot时,嵌入式Servlet容器通过扫描注解的方式注册Servlet,过滤器和Servlet规范的所有监听器(如HttpSessionListener监听器)。
春季启动的主Servlet为DispatcherServlet,其默认的url模式为“/?也许我们在应用中还需要定义更多的Servlet,该如何使用SpringBoot来完成呢?
在春天引导中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(过滤器和侦听器也是如此)。
一、代码注册通过ServletRegistrationBean, FilterRegistrationBean和ServletListenerRegistrationBean获得控制。
也可以通过实现ServletContextInitializer接口直接注册。
二,在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、过滤器、监听器可以直接通过@WebServlet, @WebFilter, @WebListener注解自动注册,无需其他代码。
<强> 1。通过代码注册Servlet示例代码强>
1) .SpringBootSimpleApplication.Java类:
com . example,包 进口org.springframework.boot.SpringApplication; 进口org.springframework.boot.autoconfigure.SpringBootApplication; 进口org.springframework.boot.web.servlet.ServletRegistrationBean; 进口org.springframework.context.annotation.Bean; 进口com.example.servlet.MyServlet; @SpringBootApplication 公开课SpringBootSimpleApplication {/* * *使用代码注册Servlet(不需要@ServletComponentScan注解) */@ bean 公共ServletRegistrationBean ServletRegistrationBean () { 返回新ServletRegistrationBean(新MyServlet (), "/st/* ");//ServletName默认值为首字母小写,即MyServlet } 公共静态void main (String [] args) { SpringApplication.run (SpringBootSimpleApplication.class, args); } }
2) .MyServlet.java类:
包com.example.servlet; 进口java.io.IOException; 进口java.io.PrintWriter; 进口javax.servlet.ServletException; 进口javax.servlet.http.HttpServlet; 进口javax.servlet.http.HttpServletRequest; 进口javax.servlet.http.HttpServletResponse; 公开课MyServlet扩展HttpServlet { @Override 保护无效doGet (HttpServletRequest点播,HttpServletResponse resp)抛出ServletException IOException { System.out.println(“在在在在在在在在在在doGet () & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt;”); doPost(要求、职责); } @Override 保护无效doPost (HttpServletRequest点播,HttpServletResponse resp)抛出ServletException IOException { System.out.println(“在在在在在在在在在在doPost () & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt;”); resp.setContentType (" text/html "); resp.setCharacterEncoding(“utf - 8”); PrintWriter=resp.getWriter (); out.println (“& lt; html>”); out.println (“& lt; head>”); out.println (“& lt; title>你好World</title>”); out.println (“& lt;/head>”); out.println (“& lt; body>”); out.println (“& lt; h2>大家好,我的名字叫Servlet”); out.println (“& lt;/body>”); out.println (“& lt;/html>”); } }
<强> 2。使用注解注册Servlet示例代码强>
1) .SpringBootSimpleApplication.java类:
com . example,包 进口org.springframework.boot.SpringApplication; 进口org.springframework.boot.autoconfigure.SpringBootApplication; 进口org.springframework.boot.web.servlet.ServletComponentScan; 进口org.springframework.boot.web.servlet.ServletRegistrationBean; 进口org.springframework.context.annotation.Bean; 进口com.example.servlet.MyServlet; @SpringBootApplication @ServletComponentScan 公开课SpringBootSimpleApplication {/* * *使用代码注册Servlet(不需要@ServletComponentScan注解) */@ bean 公共ServletRegistrationBean ServletRegistrationBean () { 返回新ServletRegistrationBean(新MyServlet (), "/st/* ");//ServletName默认值为首字母小写,即MyServlet } 公共静态void main (String [] args) { SpringApplication.run (SpringBootSimpleApplication.class, args); } }
2) .MyServlet2.java类:
包com.example.servlet; 进口java.io.IOException; 进口java.io.PrintWriter; 进口javax.servlet.ServletException; 进口javax.servlet.annotation.WebServlet; 进口javax.servlet.http.HttpServlet; 进口javax.servlet.http.HttpServletRequest; 进口javax.servlet.http.HttpServletResponse;//不指定名字的情况下,名字默认值为类全路径,即com.example.servlet.MyServlet2 @WebServlet (urlpattern="/st/myservlet2 ",描述=盨ervlet的说明”) 公开课Myservlet2扩展HttpServlet { @Override 保护无效doGet (HttpServletRequest点播,HttpServletResponse resp)抛出ServletException IOException { System.out.println(“在在在在在在在在在在doGet2 () & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt;”); doPost(要求、职责); } @Override 保护无效doPost (HttpServletRequest点播,HttpServletResponse resp)抛出ServletException IOException { System.out.println(“在在在在在在在在在在doPost2 () & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt; & lt;”); resp.setContentType (" text/html "); resp.setCharacterEncoding(“utf - 8”); PrintWriter=resp.getWriter (); out.println (“& lt; html>”); out.println (“& lt; head>”); out.println (“& lt; title>你好World</title>”); out.println (“& lt;/head>”); out.println (“& lt; body>”); out.println (“& lt; h2>大家好,我的名字叫Servlet2弹簧引导中的Servlet简单使用