Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、 Filter、Listener等等
使用注册的方法开发servlet,filter,listener
MyServlet.java
package com.dennis.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("hello MyServlet");
}
}
MyFilter.java
package com.dennis.web;
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;
public class MyFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("hello,MyFilter");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
MyListener.java
package com.dennis.web;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("MyListener.contextDestroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("MyListener.contextInitialized");
}
}
SpringBootMybatisApplication.java
package com.dennis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import com.dennis.web.MyFilter;
import com.dennis.web.MyListener;
import com.dennis.web.MyServlet;
@SpringBootApplication
public class SpringBootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisApplication.class, args);
}
@Bean
public ServletRegistrationBean servletRegistrationBean() {
return new ServletRegistrationBean(new MyServlet(), "/my_servlet");
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter(), servletRegistrationBean());
filterRegistrationBean.addUrlPatterns("/my_servlet","/auth_uri/list");
return filterRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean() {
return new ServletListenerRegistrationBean<MyListener>(new MyListener());
}
}
验证
启动spring-boot项目的时候,控制台打印下面的日志
MyListener.contextInitialized
浏览器打开http://localhost:8080/my_servlet和http://localhost:8080/auth_uri/list显示
hello MyServlet
并且控制台上打印
hello,MyFilter
浏览器访问http://localhost:8080/auth_uri/envname,控制台没有打印任何hello,MyFilter的日志
使用servlet容器初始化器来添加servlet,filter,listener
MyServlet2.java
package com.dennis.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet2 extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("hello MyServlet2");
}
}
MyFilter2.java
package com.dennis.web;
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;
public class MyFilter2 implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("hello,MyFilter2");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
MyListener2.java
package com.dennis.web;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener2 implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("MyListener.contextDestroyed2");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("MyListener.contextInitialized2");
}
}
MyServletContextInitializer.java
package com.dennis.web;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.springframework.boot.web.servlet.ServletContextInitializer;
public class MyServletContextInitializer implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// TODO Auto-generated method stub
servletContext.addServlet("myServlet2", new MyServlet2()).addMapping("/my_servlet2");
servletContext.addFilter("myFilter2", new MyFilter2())
//添加过滤页面
.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "myServlet2");
servletContext.addListener(new MyListener2());
}
}
在SpringBootMybatisApplication.java中添加下面的代码,把MyServletContextInitializer添加到spring容器的管理范围
@Bean
public ServletContextInitializer servletContextInitializer(){
return new MyServletContextInitializer();
}
使用注解的方式实现servlet,filter,listener
MyServletContextInitializer.java
添加@ServletComponentScan注解
package com.dennis;
@SpringBootApplication
@ServletComponentScan
public class SpringBootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisApplication.class, args);
}
}
MyFilter3.java
添加@WebFilter(urlPatterns={})注解
package com.dennis.web;
@WebFilter(urlPatterns={})//添加需要拦截的url模式匹配
public class MyFilter3 implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("hello,MyFilter3");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
MyListener3.java
在该类中添加@WebListener
注解
MyServlet3.java
在该类中添加@WebServlet
注解