Filter中request对象强转问题

Posted StephenChowcai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Filter中request对象强转问题相关的知识,希望对你有一定的参考价值。

以下为过滤器doFIlter方法的源代码:

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

  HttpServletRequest req = (HttpServletRequest)request;
  HttpServletResponse res = (HttpServletResponse)response;
  chain.doFilter(req, res);
  if(req instanceof HttpServletRequest) {
  System.out.println("实现HttpServletRequest接口");
  } else {
  System.out.println("实现ServletRequest接口");
  }
}
过滤器的作用顾名思义是过滤来自客户端的请求。
查jdk文档得知:
ServletRequest:接口
HttpServletRequest:接口(并且实现了ServletRequest接口)
得出结论:
如果request对象所属类实现了HttpServletRequest接口得到的方法将会更多

提问1:参数里边request对象是ServletRequest接口的实例吗?
答:不是,这里只是引用

提问2:向上转型常见,这里怎么向下转型?
答:1.首先是要使用HttpServletReques接口中的方法
  2.同过上赋源码的if判断运行得知request对象实质就是HttpServletReques接口实现类的实例

 

以上是关于Filter中request对象强转问题的主要内容,如果未能解决你的问题,请参考以下文章

Django - 过滤相关对象

ELK使用filter收集nginx日志-07

NodeJS - request对象

NodeJS - request对象

java request获取路径

JavaWeb-request域对象