HttpServletRequest和ServletRequest类型转换

时间:2025-03-18 07:34:58

首先先上代码

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    (());

}

查了api以后知道 HttpServletRequest 是继承于 servletRequest,并且都是接口。

疑问:在直接向下转型后 request调用 HttpServletRequest中的 扩展方法 为什么没有出现 异常呢?

经过几番查找,发现 doFilter方法形参中servletRequest对象并不是 new ServletRequest() 这种 形式,而是 先进行向上转型
new HttpServletRequest()的方式创建,servletRequest对象实际指向的是HttpServletRequest的地址。

参考博客