04-SpringBoot之WEB(二)——整合Servlet、Filter、Listener
SpringBoot之WEB (二)
1. Servlet
1.1 自定义Servlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by HuangJun
* 9:42 2018/11/9
*/
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("This is MyServlet");
}
}
1.2 注册Servlet
在上文创建的 WebConfig 类中添加如下代码:
@Bean
public ServletRegistrationBean servletRegistrationBean() {
return new ServletRegistrationBean(new MyServlet(),"/myServlet");
}
1.3 运行结果
2. Filter
2.1 自定义过滤器
import javax.servlet.*;
import java.io.IOException;
/**
* Created by HuangJun
* 10:02 2018/11/9
*/
public class TimeFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("=======初始化过滤器=========");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
long start = System.currentTimeMillis();
filterChain.doFilter(request, response);
System.out.println("filter 耗时:" + (System.currentTimeMillis() - start));
}
@Override
public void destroy() {
System.out.println("=======销毁过滤器=========");
}
}
2.2 注册过滤器
在上文创建的 WebConfig 类中添加如下代码:
@Bean
public FilterRegistrationBean timeFilter() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
TimeFilter timeFilter = new TimeFilter();
registrationBean.setFilter(timeFilter);
List<String> urls = new ArrayList<>();
urls.add("/*");
registrationBean.setUrlPatterns(urls);
return registrationBean;
}
2.3 运行结果
打开浏览器,访问 http://localhost:8080/test/myServlet,观察控制台打印输出,结果如下图:
3. Listener
3.1 自定义Listener
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* Created by HuangJun
* 10:28 2018/11/9
*/
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听器初始化...");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
3.2 注册Listener
在上文创建的 WebConfig 类中添加如下代码:
@Bean
public ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean() {
return new ServletListenerRegistrationBean<MyListener>(new MyListener());
}
3.3 运行结果
观察控制台打印输出,结果如下图
自定义 Servlet、Filter 和 Listener 的另一种配置方式,修改引导类,代码如下:
import com.springboot.web.filter.TimeFilter;
import com.springboot.web.listener.MyListener;
import com.springboot.web.servlet.MyServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.EnumSet;
@SpringBootApplication
public class WebApplication implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// 配置 Servlet
servletContext.addServlet("servletTest",new MyServlet())
.addMapping("/myServlet");
// 配置过滤器
servletContext.addFilter("timeFilter",new TimeFilter())
.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST),true,"/*");
// 配置监听器
servletContext.addListener(new MyListener());
}
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
4. 源码下载
源码下载地址:https://download.****.net/download/huangjun0210/10774393