一、前言二、注释掉ServletConfig.java文件三、开始修改四、访问测试
一、前言此篇文章是使用路径扫描方式对Servlet三大组件进行整合,是在上一篇文章 SpringBoot整合Servlet三大组件(Servlet、Filter、Listener)[使用组件注册方式]修改的,这样做的目的在于可以形成一个明显的对比。
二、注释掉ServletConfig.java文件注释掉的原因在于避免与之前编写的使用组件注册的方式相互干扰。
// //import com.itheima.servletComponent.MyServlet; //import org.springframework.boot.web.servlet.FilterRegistrationBean; //import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; //import org.springframework.boot.web.servlet.ServletRegistrationBean; //import org.springframework.context.annotation.Bean; //import org.springframework.context.annotation.Configuration; // //import java.util.Arrays; // 创建组件配置类 嵌入式servlet容器三大组件 // //@Configuration //使用此注解将ServletConfig类标注为配置类 //public class ServletConfig { 注册servlet组件 // @Bean // public ServletRegistrationBean getServlet(MyServlet myServlet){ 此方法用于注册自定义的Myservlet,并返回ServletRegistrationBean类型的bean对象 // ServletRegistrationBean registrationBean = // new ServletRegistrationBean(myServlet,"/myServlet"); // return registrationBean; // } 注册Filter组件 // @Bean // public FilterRegistrationBean getFilter(MyFilter filter){ // FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter); // registrationBean.setUrlPatterns(Arrays.asList("/toLoginPage","/myFilter"));//使用此方法定义了过滤的请求路径为"/toLoginPage","/myFilter" // return registrationBean; //将当前组装好的FilterRegistrationBean对象作为Bean对象返回 // } 注册Listener组件 // @Bean // public ServletListenerRegistrationBean getServletListener(MyListener myListener){ // ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(myListener); // return registrationBean; // } //}三、开始修改
进入自定义Servlet类MyServlet.java将@Component注释掉,并换成@WebServlet("/myServlet")注解
import org.springframework.stereotype.Component; 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; //@Component //使用次注解将MyServlet类作为组件注入Spring容器 @WebServlet("/myServlet") //使用此注解来映射/annotationServlet请求的Servlet类 public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("hello MyServlet"); //向页面输出 } }
进入自定义Filter类MyFilter.java将@Component注释掉,并换成@WebFilter(value = {"/toLogin","/MyFilter"})注解
import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; //@Component //使用该注解将当前MyFilter类作为组件注入到Spring容器中 @WebFilter(value = {"/toLogin","/MyFilter"}) //使用此注解来映射"/antionLogin","antionMyFilter"请求的Filter类 public class MyFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Hello MyFilter"); filterChain.doFilter(servletRequest,servletResponse); } @Override public void init(FilterConfig filterConfig) throws ServletException { Filter.super.init(filterConfig); } @Override public void destroy() { Filter.super.destroy(); } }
进入自定义Listener类MyListener.java将@Component注释掉,并换成@WebFilter(value = {"/toLogin","/MyFilter"})注解
import org.springframework.stereotype.Component; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; //自定义Listener类 //@Component @WebListener public class MyListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("contextInitialized监听中"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("contextDestroyed监听注销了"); } }四、访问测试
启动程序,之后浏览器访问http://localhost:8080/myServlet看是否出现下图效果
之后查看控制台是否打印出现如下效果,如出现则说明监听成功
然后在访问http://localhost:8080/MyFilter并查看控制台是否打印Hello MyFilter,如打印则说明过滤器也成功了
最后按下控制台左侧旁的exit图标,出现“contextDestroyed监听注销了“字符串则说明监听程序退出成功
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)