Servlets Servlet doFilter setAttributes在Servlet中不可用

Servlets Servlet doFilter setAttributes在Servlet中不可用,servlets,attributes,jstl,servlet-filters,Servlets,Attributes,Jstl,Servlet Filters,在将属性传递给Servlet之前,我试图通过doFilter向请求添加属性,以便在JSTL中设置一个值。我只是在过滤器中设置req.setAttribute(“b”,“blah”),但它似乎没有在JSTL文件中设置。我该怎么做?问题是doFilter方法使用ServletRequest而不是HttpServletRequest,后者具有setAttribute方法。我的大多数过滤器都是这样的: public void doFilter(ServletRequest servletRequest,

在将属性传递给Servlet之前,我试图通过
doFilter
向请求添加属性,以便在JSTL中设置一个值。我只是在过滤器中设置
req.setAttribute(“b”,“blah”)
,但它似乎没有在JSTL文件中设置。我该怎么做?

问题是
doFilter
方法使用
ServletRequest
而不是
HttpServletRequest
,后者具有
setAttribute
方法。我的大多数过滤器都是这样的:

public void doFilter(ServletRequest servletRequest, 
                     ServletResponse servletResponse, 
                     FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;                                                                      

    // do what you must...

    chain.doFilter(servletRequest, servletResponse);

}

在没有看到代码的情况下很难找出根本原因。有几个可能的原因

  • 您在设置属性后发送重定向,而不是继续执行相同的请求
  • 您使用错误的名称访问属性(区分大小写!)
  • 您以错误的方式访问属性
  • 该属性已在请求处理过程中被覆盖
  • 有一个名称相同的页面范围属性没有值
  • 你误解了结果
  • 等等

顺便说一下,没有所谓的“JSTL文件”。也许你的意思是“JSP文件”。

我想OP是说他们正在做一个
req.setAttribute()
,但是JSP文件中没有该属性;不知道这是怎么解决的,这是胡说八道。强制转换不会更改对象本身,只会更改引用的类型。方法调用的行为并没有不同。@BalusC我第一次读到这个问题时指出不能使用
request.setAttribute
,如果不进行强制转换,就会发生这种情况。这只会导致代码不可编译,而不是请求范围中缺少的属性。请提供相关的筛选代码和JSP片段,你做得对。在请求上设置属性,并通过jstl在jsp上使用它。