温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot整合三大组建(Servlet、Liste

发布时间:2020-02-25 01:48:19 来源:网络 阅读:231 作者:liduchang 栏目:软件技术

更多资源和教程请关注公众号:非科班的科班
如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力

3.SpringBoot整合Servlet

3.1.方式一

步骤:

  • 写一个类MyFirstServlet继承HttpServlet,并重写doGet方法。
  • 在类的上面用@WebServlet标识Servlet并指明name和urlPatterns。
  • 在标识有@SpringBootApplication的主类上加上@ServletComponentScan。

FirstServlet.java

package com.example.servlet.myservlet; import javax.servlet.http.HttpServlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** *SpringBoot整合Servlet方式一 *@WebServlet(name="MyFirstServlet",urlPatterns="/myFirst")相当于如下: * *<servlet> * <servlet-name>MyFirstServlet</servlet-name> * <servlet-class>ah.szxy.servlet.FirstServlet</servlet-class> *</servlet> *<servlet-mapping> * <servlet-name>MyFirstServlet</servlet-name> * <url-pattern>/first</url-pattern> *</servlet-mapping> * */ @WebServlet(name="MyFirstServlet",urlPatterns="/myFirst") public class FirstServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyFirstServlet init............"); } }

ServletApplication.java

package com.example.servlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化 public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } }

然后启动项目
SpringBoot整合三大组建(Servlet、Liste

最后在浏览器输入localhost:8080/myFirstServlet,页面显示空白,在控制台打印MyFirstServlet init............

3.2.方式二

步骤:

  • 创建一个类SecondServlet继承HttpServlet,并重写doGet方法。
  • 在@SpringBootApplication标识的主类中加@Bean的一个方法。
    SecondServlet.java
package com.example.servlet.myservlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * 整合Servlet的第二种方式 */ public class SecondServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MySecondServlet init.........."); } }

ServletApplication.java

package com.example.servlet; import com.example.servlet.myservlet.SecondServlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; @SpringBootApplication //@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化 public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } /** * 整合Servlet的第二种方式,创建ServletRegistrationBean并添加路径 * @return */ @Bean public ServletRegistrationBean getServletRegistrationBean(){ ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet()); bean.addUrlMappings("/mySecond"); return bean; }

然后启动项目,在浏览器中访问localhost:8080/mySecondServlet,页面也是空白,在控制台就会打印MySecondServlet init..........
SpringBoot整合三大组建(Servlet、Liste
项目,结构如图所示
SpringBoot整合三大组建(Servlet、Liste

结论:

  • 上面的两种方式推荐使用第一种基于注解的整合。
  • 虽然现在几乎用不到servlet了,但是学习SpringBoot整合servlet有助于学习的深入了解,更好的理解框架。

4.SpringBoot整合Filter

4.1.方式一

步骤:

  • 创建一个MyFirstFilter类实现Filter接口,并在类上面标注@WebFilter。
  • 在@SpringBootApplication的主类上加上@ServletComponentScan注解。

MyFirstFilter.java

package com.example.servlet.myfilter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; /** * 基于@WebFilter注解整合Filter方式一 */ @WebFilter(filterName = "MyFirstFilter",urlPatterns = "/myFirst") public class MyFirstFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @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 destroy() { } }

ServletApplication.java

package com.example.servlet; import com.example.servlet.myservlet.SecondServlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; @SpringBootApplication @ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化 public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } /** * 整合Servlet的第二种方式,创建ServletRegistrationBean并添加路径 * @return */ @Bean public ServletRegistrationBean getServletRegistrationBean(){ ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet()); bean.addUrlMappings("/mySecond"); return bean; } }

4.2.方式二

步骤:

  • 创建一个类MySecondFilter实现Filter接口,重写方法。
  • 在@SpringBootApplication标识的主类中加@Bean的一个方法,将MySecondFilter对象注入容器中。

MySecondFilter.java

package com.example.servlet.myfilter; import javax.servlet.*; import java.io.IOException; /** * 整合Filter的第二种方式 */ public class MySecondFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("进入MySecondFilter了......"); arg2.doFilter(arg0, arg1); System.out.println("离开MySecondFilter了......"); } @Override public void destroy() { } }

ServletApplication.java

package com.example.servlet; import com.example.servlet.myfilter.MySecondFilter; import com.example.servlet.myservlet.SecondServlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; @SpringBootApplication //@ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化 public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } /** * 整合Filter的第二种方式 * 注册Filter */ @Bean public FilterRegistrationBean getFilterRegistrationBean() { FilterRegistrationBean bean = new FilterRegistrationBean(new MySecondFilter()); // bean.addUrlPatterns(new String[]{"*.do","*.jsp"});//拦截多个时 bean.addUrlPatterns("/mySecond"); return bean; } }

然后在浏览器访问localhost:8080/mySecond,就可以看到控制台打印如下
SpringBoot整合三大组建(Servlet、Liste

5.SpringBoot整合Listener

5.1.方式一

步骤:

  • 创建一个类MyFirstListener实现ServletContextListener接口,重写方法
  • 在该类上加上@WebListener注解
package com.example.servlet.mylistener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; /** * springBoot 整合Listener第一种方式 * 创建一个Servlet上下文的监听器 * @WebListener 自动注册,相当于在web.xml中添加如下代码 * *<listener> * <listener-class>ah.szxy.listener.FirstListener</listener-class> *</listener> */ @WebListener public class MyFirstListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("MyFirstListener执行销毁了。。。"); } @Override public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("MyFirstListener执行初始化了。。。"); } }

执行项目会打印如下,因为用了@ServletComponentScan注解,在项目启动的时候就会扫描包中是否含有servlet,若有就初始化。由于FirstServlet是基于注解初始化的,所以在项目启动的时候,就会执行初始化servlet,被Listener监听到
SpringBoot整合三大组建(Servlet、Liste

5.1.方式二

步骤:

  • 创建一个类MySecondListener实现ServletContextListener接口,重写方法。
  • 在@SpringBootApplication标识的主类中加@Bean的一个方法,将MySecondListener对象注入容器中。
package com.example.servlet.mylistener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * 整合Listener的第二种方式 */ public class MySecondListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("MySecondListener执行销毁了。。。"); } @Override public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub System.out.println("MySecondListener执行初始化了。。。"); } }
package com.example.servlet; import com.example.servlet.myfilter.MySecondFilter; import com.example.servlet.mylistener.MySecondListener; import com.example.servlet.myservlet.SecondServlet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; @SpringBootApplication @ServletComponentScan //在springBoot启动时会扫描@WebServlet,并将该类实例化 public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } /** * 注册listener */ @Bean public ServletListenerRegistrationBean<MySecondListener> getServletListenerRegistrationBean() { ServletListenerRegistrationBean<MySecondListener> bean = new ServletListenerRegistrationBean<MySecondListener>( new MySecondListener()); return bean; } }

执行项目,在控制台可以看到输出如下,两个Servlet监听器都执行了
SpringBoot整合三大组建(Servlet、Liste
总的项目目录包结构如下:
SpringBoot整合三大组建(Servlet、Liste

更多资源和教程请关注公众号:非科班的科班
如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力

最后分享一波java的资源,资源包括java从入门到开发的全套视频,以及java的26个项目,资源比较大,大小大概是290g左右,链接容易失效,获取的方式是关注公众号:非科班的科班,让后回复:java项目即可获得,祝大家学习愉快

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI