一、注册Servlet
(1)使用注解方式
准备Servlet
@WebServlet(name = "myServlet",urlPatterns = "/myServlet") //标记为servlet,以便启动器扫描。
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入get方法");
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入post方法");
super.doPost(req, resp);
}
}
注册Servlet
@ServletComponentScan //启动器启动时,扫描本目录以及子目录带有的webservlet注解的
访问Servlet
http://localhost:8082/myServlet
(2)手动注册方式
准备Servlet
/**
* @author wanglu
* @since 1.0, 2021/8/29 17:57
*/
public class SecServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入get方法2");
resp.getWriter().append("SecServlet");//SecServlet返回给页面的值
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入post方法2");
resp.getWriter().append("SecServlet");//SecServlet返回给页面的值
}
}
注册Servlet
/**
* @author wanglu
* @since 1.0, 2021/8/29 17:59
*/
@Configuration
public class Config {
@Bean
public ServletRegistrationBean getServletRegistrationBean(){
ServletRegistrationBean bean = new ServletRegistrationBean(new SecServlet());
bean.addUrlMappings("/secServlet");
bean.setLoadOnStartup(1);
return bean;
}
}
访问Servlet
http://localhost:8082/secServlet
二、注册Filter
(1)使用注解方式
准备Filter
package com.example.springboot02.demo2;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @author wanglu
* @since 1.0, 2021/8/29 18:14
*/
@WebFilter(filterName = "authFilter",urlPatterns = "/*")
@Order(1)
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("进入拦截器");
HttpServletRequest req = (HttpServletRequest) request;
String url = req.getRequestURL().toString();
if(url.contains("/secServlet")){
System.out.println("执行后面的代码,对应的url:"+url);
chain.doFilter(request,response);
}
if(url.contains("/test")){
System.out.println("被拦截了,不让执行后面的代码,对应的url:"+url);
return;
}
}
}
注册Filter
@ServletComponentScan(basePackages = {"com.example.springboot02.demo2"})
访问Filter
http://localhost:8082/secServlet
http://localhost:8082/test
(2)手动配置方式
准备Filter
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @author wanglu
* @since 1.0, 2021/8/29 18:30
*/
public class AuthFilter2 implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("进入拦截器2");
HttpServletRequest req = (HttpServletRequest) request;
String url = req.getRequestURL().toString();
if(url.contains("/test001")){
System.out.println("执行后面的方法,url:"+url);
chain.doFilter(request,response);
}
if(url.contains("/test002")){
System.out.println("不让执行后面的方法,url:"+url);
}
}
}
注册Filter
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author wanglu
* @since 1.0, 2021/8/29 18:33
*/
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean registerAuth(){
AuthFilter2 authFilter2 = new AuthFilter2();
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.addUrlPatterns("/*");
bean.setFilter(authFilter2);
bean.setName("authFilter2");
bean.setOrder(1);
return bean;
}
}
访问Filter
http://localhost:8082/test001
http://localhost:8082/test002
三、注册Listener
常用的监听
ServletContextListener : 监听servletContext对象的创建以及销毁
HttpSessionListener : 监听session对象的创建以及销毁
ServletRequestListener : 监听request对象的创建以及销毁
ServletContextAttributeListener : 监听servletContext对象中属性的改变
HttpSessionAttributeListener : 监听session对象中属性的改变
ServletRequestAttributeListener : 监听request对象中属性的改变
(1)使用注解方式
准备Listener
package com.example.springboot02.demo3;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* 使用注解注册监听器
* @author wanglu
* @since 1.0, 2021/8/29 18:50
*/
@WebListener
public class FirstListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("项目启动");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("项目关闭");
}
}
注册Listener
@ServletComponentScan(value = "com.example.springboot02.demo3")
测试Listener
(2)手动配置方式
准备Listener
package com.example.springboot02.demo3;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 手动注册监听器
* @author wanglu
* @since 1.0, 2021/8/29 18:56
*/
public class SecondListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("项目启动2");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("项目关闭2");
}
}
注册Listener
package com.example.springboot02.demo3;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author wanglu
* @since 1.0, 2021/8/29 18:57
*/
@Configuration
public class ListenerConfig {
@Bean
public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
bean.setListener(new SecondListener());
return bean;
}
}
测试Listener