springboot配置Servlet+过滤器
昨天配置的是拦截器,也说了拦截器和过滤器是使用场景,可能还是不够直观,在这我再简单的重复一下:
过滤器和拦截器的区别:
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
行啦其他不多说了,看看代码怎么搞。
首先看一下工程目录
- 先看Servel1.java代码
package com.springbootMybatis.common.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- 使用注解注册Servlet
- @WebServlet(urlPatterns="/servlet/servlet1", description=“通过注解注册”)
- 不指定name的情况下,name默认值为类全路径,即org.springboot.sample.servlet.Servlet1
- @author
*/
//不指定name的情况下,name默认值为类全路径,即com.example.servlet.Servlet2
@WebServlet(urlPatterns="/servlet/servlet1.action",description=“通过注解注册”)
public class Servlet1 extends HttpServlet{
//日志
private Logger logger = LoggerFactory.getLogger(this.getClass());
private static final long serialVersionUID = 1L;
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
System.out.println(“Servlet初始化…”);
super.init();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("-------->doGet()");
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("---------->doPost()");
resp.setContentType(“text/html”);
String id = req.getParameter(“id”);
if(id != null && !id.equals("")){
resp.getWriter().append("----------> doPost() id= "+id);
logger.info(“in Servlet doPost() “,id);
return;
}
resp.getWriter().append(”----------> doPost()”);
}
}
注解上讲的很详细,这里不多说。
2.写这个,就需要去启动类配置了
这样启动项目servlet就可以访问到了
3.过滤器的话,先写工具类
package com.springbootMybatis.common.filter;
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;
import javax.servlet.annotation.WebFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- Servlet Filter implementation class ServletFilter 注解注册过滤器:实现
- javax.servlet.Filter接口 filterName 是过滤器的名字 urlPatterns 是需要过滤的请求
- ,这里只过滤servlet/* 下面的所有请求
- @author
/
@WebFilter(filterName = “ServletFilter”, urlPatterns = "/servlet/")
public class ServletFilter implements Filter {
//日志
private Logger logger = LoggerFactory.getLogger(this.getClass());
public ServletFilter() {
// TODO Auto-generated constructor stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
System.out.println(“过滤器被销毁------>”);
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
long start = System.currentTimeMillis();
logger.info(“过滤器时间戳,start{}:” + start);
System.out.println(“过滤器正在执行…”);
arg2.doFilter(arg0, arg1);
System.out.println(“Execute cost=”
+ (System.currentTimeMillis() - start));
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println(“初始化过滤器。”);
}
}
4.写完工具类,去启动类配置
这样就往事了,不过具体场景下,老铁们还需要自己发挥。
新手刚开始写csdn,写的好老铁们请体谅,写的有毛病的也请老铁指出来。