您的位置:首页 > 编程语言 > Java开发

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,测试,启动/关闭 项目可以看到控制台输出监听的信息。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐