对于java后端三大底层原理(filter,servlet,session)的理解

1,266 阅读1分钟

filter

对于java后端来说,一个http请求过来会先经过filter,进行过滤,在filter下我们可以通过session做一些权限管理的过滤,把没有权限的接口直接放回403,filter也可以操作请求头做一些跨域请求如下图所示:

filter实现跨域请求

相关代码(我知道肯定有人想要这段代码的):

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    // 指定允许其他域名访问
    response.setHeader("Access-Control-Allow-Origin", "*");
    // 响应类型
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS, DELETE");
    // 响应头设置
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header, HaiYi-Access-Token");
    //
  
    if ("OPTIONS".equals(request.getMethod())){
    response.setStatus(HttpStatus.SC_NO_CONTENT);
    }
    filterChain.doFilter(servletRequest, servletResponse);
}

另外struct2框架是基于filter开发的

servlet

http请求经过filter的过滤之后如果没有被拦截就会回掉到doget(),dopost()方法分别对应前端的get,post操作,如下图所示:

注意:因为对于java后端来说get和post没有任何区别,所以一般把get回调post去设计restful框架,这样设计的restful框架就能同时能被get和post调用

有一点要注意的是世面上的一些大众框架springmvc其实只是基于servlet开发的一个多例框架

session(cookie)

cookie和session类似于key value的一个map的数据结构,另外注意的是session一般也是key value的形式,浏览器第一次请求服务器时,服务器会生成一个sessionId,并返回给浏览器,这个sessionId会被保存在浏览器的会话cookie中,第二次访问的时候会把sessionid带上(也就是cookie).