结构
Servlet
public class servlet_one extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("servlet_one_get");
req.getSession().setAttribute("name","小明");
resp.getWriter().append("servlet_one_get");
}
}
public class servlet_two extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
Object name = req.getSession().getAttribute("name");
System.out.println("servlet_two_get - session-name - "+name);
resp.getWriter().append(String.valueOf(name));
}
}
Listener
public class listener_one implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("listener_one-sessionCreated()");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("listener_one-sessionDestroyed()");
}
}
Filter
public class filter_one implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter_one-init()");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filter_one-doFilter()");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("filter_one-destroy()");
}
}
public class filter_two implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter_two-init()");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filter_two-doFilter()");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("filter_two-destroy()");
}
}
第一种方式@Bean
@SpringBootApplication
public class oneApp {
public static void main(String[] args) {
SpringApplication.run(oneApp.class, args);
}
@Bean
public ServletRegistrationBean servlet_oneBean(){
return new ServletRegistrationBean(new servlet_one(),"/servlet_one");
}
@Bean
public ServletRegistrationBean servlet_twoBean(){
return new ServletRegistrationBean(new servlet_two(),"/servlet_two");
}
@Bean
public FilterRegistrationBean filter_oneBean(){
return new FilterRegistrationBean(new filter_one(),servlet_oneBean(),servlet_twoBean());
}
@Bean
public FilterRegistrationBean filter_twoBean(){
return new FilterRegistrationBean(new filter_two(),servlet_oneBean(),servlet_twoBean());
}
@Bean
public ServletListenerRegistrationBean listener_oneBean(){
return new ServletListenerRegistrationBean(new listener_one());
}
}
=========测试============
启动 filter init 初始化
请求http://localhost:8080/servlet_one 过滤 - servlet-get() - 监听
方式二 实现 ServletContextInitializer接口 重写onStartup()方法
1.将servlet,listener、filter 都交给ServletContext中
@SpringBootApplication
public class twoApp implements ServletContextInitializer
{
public static void main(String[] args) {
SpringApplication.run(twoApp.class,args);
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addServlet("servlet_one", servlet_one.class).addMapping("/servlet_one2");
servletContext.addServlet("servlet_two",servlet_two.class).addMapping("/servlet_two2");
servletContext.addFilter("filter_one", filter_one.class)
.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "servlet_one");
servletContext.addFilter("filter_two", filter_two.class)
.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
servletContext.addListener(listener_one.class);
}
}
第三种方式 注解的方式@ServletComponentScan
1.启动类只需加上@ServletComponentScan注解就可以
@SpringBootApplication
@ServletComponentScan
public class threeApp {
public static void main(String[] args) {
SpringApplication.run(threeApp.class,args);
}
}
2.servlet、listener、filter也添加相应注解
@WebServlet(name = "servlet_one3" ,urlPatterns = "/servlet_one3")
public class servlet_one extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("servlet_one_get");
req.getSession().setAttribute("name","小明");
resp.getWriter().append("servlet_one_get");
}
}
@WebServlet(name = "servlet_two3",urlPatterns = "/servlet_two3")
public class servlet_two extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=utf-8");
Object name = req.getSession().getAttribute("name");
System.out.println("servlet_two_get - session-name - "+name);
resp.getWriter().append(String.valueOf(name));
}
}
/**
* 监听器1
*/
@WebListener
public class listener_one implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("listener_one-sessionCreated()");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("listener_one-sessionDestroyed()");
}
}
一种是根据ServletName进行过滤,也可以根据url进行过滤
/**
* 过滤器1
*/
@WebFilter(servletNames = {"servlet_one3"})
public class filter_one implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter_one-init()");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filter_one-doFilter()");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("filter_one-destroy()");
}
}
/**
* 过滤器2
*/
@WebFilter(urlPatterns = "/*")
public class filter_two implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter_two-init()");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filter_two-doFilter()");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("filter_two-destroy()");
}
}