由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文 件。 注册三大组件用以下方式:
分别是3个组件: 1 . ServletRegistrationBean:servlet 2. FilterRegistrationBean 过滤器 3.ServletListenerRegistrationBean 监听器
首先先创建这3大件的类,实现各自的父类 具体看代码:
A.Servket:
package com.bihu.component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//继承HttpServlet 重写你想实现方法即可
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.getWriter().write("Hello, MyServlet !"); //那就简简单单打印一句话
}
}
B.Filter
package com.bihu.component;
import javax.servlet.*;
import java.io.IOException;
//过滤器是实现filter接口【javax.servlet中那个】
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.print("拦截到一个请求 - IP:");
System.out.println(servletRequest.getLocalName());
System.out.println("过滤器正常运作---已放行"); //随便打印一句话
filterChain.doFilter(servletRequest,servletResponse); //放行
}
@Override
public void destroy() {
}
}
C.Listener
package com.bihu.component;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
//监听器实现ServletXXXListener XXX代表...学过JSP 的你懂的
public class MyListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("监听到一个销毁的请求 - IP:");
System.out.println(servletRequestEvent.getServletRequest().getLocalName()); //随便打印一句话
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("监听到一个请求 - IP:");
System.out.println(servletRequestEvent.getServletRequest().getLocalName()); //随便打印一句话
}
}
然后我们吧他们三个分别注册 - 》 3个组件加入容器中:
package com.bihu.config;
import com.bihu.component.MyFilter;
import com.bihu.component.MyListener;
import com.bihu.component.MyServlet;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.File;
import java.util.Arrays;
@Configuration
public class ServletConfig {
//注册Servlet
@Bean
public ServletRegistrationBean mServlet(){
//下面直接用匿名函数写 当然你可以先New 然后分开写。
return new ServletRegistrationBean(new MyServlet(),"/servlet");
}
//--------------------------------------------------------
//注册Filter
@Bean
public FilterRegistrationBean mFilter(){
//你可以点源码进去看看 匿名函数直接写不方便 我们分开:
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new MyFilter());
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*")); //参数是一个集合 ,转换一下然后拦截全部
return filterRegistrationBean;
}
//--------------------------------------------------------
//注册Listener
@Bean
public ServletListenerRegistrationBean mListener(){
return new ServletListenerRegistrationBean(new MyListener()); //直接用匿名函数
}
}
运行: