Servlets Servlet doFilter setAttributes在Servlet中不可用
在将属性传递给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,
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上使用它。