springboot-11-servlet, listener, fitlter的添加
springboot中添加servlet, filter, listener有2种方式: 代码注册servlet 和自动注解注册(在使用druid监控有使用过)
代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。 也可以通过servletContextInitializer接口直接注册
在 SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。
编写测试类:
Servlet:
1), 使用代码注册的方式
package com.iwhere.test.web.servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 通过代码注册servlet
* 代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 获得控制。
也可以通过实现 ServletContextInitializer 接口直接注册。
* @author wenbronk
* @time 2017年3月17日 下午2:23:21 2017
*/ public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 6272693061640286219L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
System.out.println("method deGet is run");
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
System.out.println("method doPost is run"); resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>这是:MyServlet1</h1>");
out.println("</body>");
out.println("</html>");
} }
然后在 App.java (或者任意一类中, 该类必须@component被spring管理)
/**
* 使用代码注册Servlet
* 此方法不需要加注解 @ServletComponentScan
* @return
*/
@Bean
public ServletRegistrationBean myServlet() {
return new ServletRegistrationBean(new MyServlet(),"/myServlet/*");
}
2), 使用注解的方式实现:
package com.iwhere.test.web.servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 使用注解的方式注册servlet
*
* @author wenbronk
* @time 2017年3月17日 下午4:10:33 2017
*/ @WebServlet(urlPatterns = "/myServlet2/*", description = "Servlet注解方式")
public class AnnotionServlet extends HttpServlet {
private static final long serialVersionUID = 1121465382990088487L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
System.err.println("do Get");
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
System.err.println("do post"); resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>这是:myServlet2</h1>");
out.println("</body>");
out.println("</html>");
} }
测试: 可通过http://localhost:8080/springboot-learn/myServlet进行访问: (有加context配置)
Filter的配置:
此处只讲注解方式, 代码方式和servlet一样
package com.iwhere.test.web.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter; /**
* 使用注解的方式创建filter, 实现一个filter接口
* 必须加注解@ServletComponentScan
* @author wenbronk
* @time 2017年3月17日 下午4:48:19 2017
*/ @WebFilter(filterName="myFilter", urlPatterns="/*")
public class MyFilter implements Filter { @Override
public void destroy() {
System.out.println("filter is destroy");
} @Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println("running filter");
arg2.doFilter(arg0, arg1);
} @Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("filter is init");
} }
之后必须在main类上添加包扫描或者指定类
@SpringBootApplication
@EnableScheduling
@EnableTransactionManagement(proxyTargetClass = true)
@ServletComponentScan(basePackageClasses = {com.binfo.sqgf.config.SqlInjectFilter.class})
public class SqgfApplication {
或者
@SpringBootApplication
@EnableAutoConfiguration
@EnableWebMvc
@ServletComponentScan(basePackages = "com.fanyin.eghm")
public class EghmApplication { public static void main(String[] args) {
SpringApplication.run(EghmApplication.class, args);
}
}
listener
listener有contextListener, sessionListener,pageListener, beanListener 好多种
servletContextListener;
package com.iwhere.test.web.listener; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; /**
* 使用注解的方式实现Contextlistener, 必须实现listener接口
*
* @author wenbronk
* @time 2017年3月17日 下午4:51:24 2017
*/
@WebListener
public class MyListener implements ServletContextListener{ @Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("servletContext destroyed");
} @Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("servletContext init");
} }
sessionListener
package com.iwhere.test.web.listener; import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; /**
* sessionListener, 监听session的创建和销毁
* @author wenbronk
* @time 2017年3月17日 下午4:56:22 2017
*/
@WebListener
public class MySessionListener implements HttpSessionListener { @Override
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("HttpSession created");
} @Override
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("HttpSession destroyed"); } }
补充一点, 在listener中使用 springboot的 工厂
mongoTemplate = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()).getBean(MongoTemplate.class);
springboot-11-servlet, listener, fitlter的添加的更多相关文章
- springboot之filter/listener/servlet
简介 SpringBoot可以简化开发流程,但是在其中如何使用传统的J2EE servlet/listener/filter呢 @Bean配置 在Configuration类中加入filter和ser ...
- SpringBoot 配置 Servlet、Filter、Listener
SpringBoot 配置 Servlet.Filter.Listener 在SpringBoot应用中,嵌入式的 Servlet 3.0+ 容器不会直接使用 ServletContainerInit ...
- SpringBoot整合Servlet的两种方式
SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...
- springboot整合servlet
在idea新建项目 这个是pom.xml文件需要添加的依赖包 <properties> <java.version>1.8</java.version> </ ...
- SpringBoot嵌入式Servlet配置原理
SpringBoot嵌入式Servlet配置原理 SpringBoot修改服务器配置 配置文件方式方式修改,实际修改的是ServerProperties文件中的值 server.servlet.con ...
- 【SpringBoot】03.SpringBoot整合Servlet的两种方式
SpringBoot整合Servlet的两种方式: 1. 通过注解扫描完成Servlet组件注册 新建Servlet类继承HttpServlet 重写超类doGet方法 在该类使用注解@WebServ ...
- 2、SpringBoot整合之SpringBoot整合servlet
SpringBoot整合servlet 一.创建SpringBoot项目,仅选择Web模块即可 二.在POM文件中添加依赖 <!-- 添加servlet依赖模块 --> <depen ...
- Servlet, Listener 、 Filter.
Java Web的三大组件:Servlet, Listener . Filter. 使用Listener监听器:八大监听器: 第一组:用于监听Servlet三个域对象的创建与销毁 1. Servlet ...
- 【使用篇二】SpringBoot整合Servlet(1)
两种方式: 通过注解扫描完成 Servlet组件的注册 通过方法完成 Servlet组件的注册 一.通过注解扫描完成 Servlet 组件的注册 1. 编写Servlet类 /** * SpringB ...
随机推荐
- sublime text 插件 -- 获取文件名到剪贴板
日常开发使用 sublime text 有好长一段时间了,有时候想拷贝当前正在编辑的文件名时发现没有很快捷的方法,一般都是先点击右键菜单栏中的 Reveal in Side Bar 对文件进行定位(在 ...
- Mongodb 存储日志信息
线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息,通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题,但当产生大量的日志之后,要想从大量日志里挖 ...
- Android-fragment的替换-V4支持包
昨天写的这几篇博客,Android-fragment简介-fragment的简单使用,Activity-fragment-ListView展示,Android-fragment生命周期,Android ...
- Jersey构建restful风格的WebSerivices(二)
一. 总体说明 XML和JSON 是最为常用的数据交换格式.本例子演示如何将java对象,转成XML输出. 二.流程 1.在上文的例子中,创建一个包“com.waylau.rest.bean” 2.在 ...
- (转)(WinForm)FormBorderStyle属性
原地址
- NVIC配置中的分组详解
在配置优先级的时候,要注意一个很重要的问题,中断种类的数量. NVIC只可以配置 16 种 中断向量的优先级,也就是说,抢占优先级和响应优先 级的数量由一个 4 位的数字来决定, 把这个 4 位数字的 ...
- C#通过盘符获取剩余空间
public static long GetHardDiskSpace(string str_HardDiskName) { ; str_HardDiskName = str_HardDiskName ...
- 虚幻4随笔6 Object和序列化
诚如之前所说,虚幻4主要的一些特性都是由UObject穿针引线在一起的,想把虚幻玩到比较深的程度,UObject是迟早要面对.回避不得的问题,所以,准备在其它主题之前,先把UObject好好弄一下.U ...
- 几条shell命令
windows: route add 158.0.0.0 mask 255.0.0.0 158.137.38.1 metric 3 linux: netstat -apn 查看所有端口使用,可查看端 ...
- Django思维导图