Springboot 注册web三大组件(代码方式)(十二)
2019-08-12 00:18
477 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45315910/article/details/97944148
web 三大组件:Servlet,Filter,Listener
一,注册servlet
以前写法:方式1
[code]<servlet> <servlet-name>servlet</servlet-name> <servlet-class>com.servlet.UserServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </inin-param> </servlet> <servlet-mappeing> <servlet-name>servlet</servlet-name> <url-patten>/user1.action</url-pattn> </servlet-mapping> <servlet-mappeing> <servlet-name>servlet</servlet-name> <url-patten>/user2.action</url-pattn> </servlet-mapping>
方式2:@WebServlet("/user.action")注解,直接在controller上
现在写法,springboot写法
1,创建UserServlet
[code]public class UserServlet 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 { PrintWriter pw = resp.getWriter(); pw.print("springboot---zc-servlet"); pw.close(); } }
2,创建WebConfig
可以模仿源码中的DispatcherServletAutoConfiguration去写注册
3,注册MyServlet
[code]@Configuration //@ConditionalOnClass(value= {Servlet.class})//必须是servlet类 //@ConditionalOnWebApplication(type = Type.SERVLET)//当项目是一个Web项目的条件下。 public class MyWebConfig { @Bean //ServletRegistrationBean是DispatcherServletRegistrationBean的父类 public ServletRegistrationBean<UserServlet> registrationUserServlet(){ UserServlet userServlet=new UserServlet();//自定义的Servlet ServletRegistrationBean<UserServlet> registrationBean=new ServletRegistrationBean<UserServlet>(); registrationBean.setServlet(userServlet);//注册servlet Collection<String> urlMappings=new ArrayList<String>();//设置url访问地址 urlMappings.add("/user1.do"); urlMappings.add("/user2.do"); registrationBean.setUrlMappings(urlMappings); // registrationBean.setLoadOnStartup(1);//启动时加载 // registrationBean.setInitParameters(initParameters);//注入servlet初始化的参数, Map<String, String> // registrationBean.addInitParameter(name, value); 一个个去设置servlet初始化的参数 return registrationBean; } }
类似的可以对Durid数据源进行配置。
二,注册Filter
以前写法,方式1
[code] <filter> <display-name>MyFilter</display-name> <filter-name>MyFilter</filter-name> <filter-class>com.controller.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/MyFilter</url-pattern> </filter-mapping>
注解方式:@WebFilter()
现在写法,springboot 写法
1,创建AppFilter
[code]public class MyFilter implements Filter{ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("进--MyFilter"); chain.doFilter(request, response); System.out.println("出--MyFilter"); } }
2,修改MyWebConfig2
[code]@Configuration public class MyWebConfig2 { @Bean public FilterRegistrationBean<MyFilter> registrationUserFilter(){ MyFilter filter=new MyFilter(); FilterRegistrationBean<MyFilter> registrationBean=new FilterRegistrationBean<MyFilter>();//创建注册器 registrationBean.setFilter(filter);//注入过滤器 Collection<String> urlMappings=new ArrayList<String>();//设置url访问地址 urlMappings.add("/user1.do");//设置哪些servlet进入filter // urlMappings.add("/user2.do"); registrationBean.setUrlPatterns(urlMappings); return registrationBean; } }
3,访问user1.do,和user2.do可以得到,访问1时,是进入过滤器的,访问2时不进。
3,注册Listener
以前写法,方式一
[code] <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
注解方式2 @WebListner
现在写法,springboot写法
1,创建MyListener
[code]public class MyListener implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("listener被创建了"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("listener被销毁了"); } }
2,修改MyWebConfig3
[code]@Configuration public class MyWebConfig3 { @Bean public ServletListenerRegistrationBean<MyListener> registrationUserListener(){ MyListener myListener = new MyListener(); ServletListenerRegistrationBean<MyListener> registrationBean= new ServletListenerRegistrationBean<MyListener>(); registrationBean.setListener(myListener); return registrationBean; } }
3,测试,启动/关闭 项目可以看到控制台输出监听的信息。
相关文章推荐
- Springboot 注册web三大组件(注解方式)(十三)
- SpringBoot1.5.12.RELEASE注册Servlet三大组件【Servlet、Filter、Listener】
- 非Spring Boot Web项目 注册节点到Eureka Server并提供服务
- SpringBoot如何注册Servlet、Filter、Listener的几种方式
- 代码学习与实践 (一):Spring Boot 多模块项目创建与配置 注册 登录
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- 【Java】Spring中 bean方式注册组件
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- Spring Boot 使用Java代码创建Bean并注册到Spring中
- springboot+redis(注解方式)使用(java代码部分)
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- Spring Boot 使用Java代码创建Bean并注册到Spring中
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- Spring Boot实现邮件注册功能示例代码
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目
- SpringBoot开发实践-web组件
- spring boot项目中使用spring-boot-devtools模块进行代码热部署,避免重新启动web项目