【问题标题】:why request dispatcher parameters available to the receiving servlet only为什么请求调度程序参数仅对接收 servlet 可用
【发布时间】:2014-08-30 06:11:52
【问题描述】:

我的 index.jsp

 <%
    String token = "abc"
    request.getRequestDispatcher("/LoginServlet?Token="+token).forward(request,response);
    %>

实际上在去LoginServlet控件之前会去ServletFilter url映射到 /*(in web.xml) ,所以每个请求都会经过这个ServletFilter

在 ServletFilter 中 request.getparameter("Token") 返回 null,但在 LoginServlet 中令牌返回 "abc"

请建议我如何在 ServletFilter 中获取令牌

【问题讨论】:

  • 认真重新考虑您的设计:JSP 不应该使用 scriptlet。视图不应转发给控制器。反之亦然:请求应该发送到一个 servlet 控制器,然后该控制器应该转发到一个视图,该视图生成 HTML(并且仅执行此操作)。
  • 一个项目实例正在生产中,项目设计现在不能改变。让我知道有什么方法可以仅使用 request.getParameter("Token") 方法在 ServletFilter 中获取 Token
  • 在请求中设置属性并转发,然后在过滤器中获取属性形式请求
  • 仅用于获取 request.getParameter("Token") 方法

标签: jsp servlets servlet-filters servlet-listeners servletcontextlistener


【解决方案1】:

我认为您对 sendRedirect 和 forward 的工作方式感到困惑。

使用 forward 和 sendRedirect 的过滤器流程如下所示,

前进

1. Filter (Your request came here first, before JSP called, and 
   you are trying to get "Token" parameter which is no where set yet)

2. JSP (Your JSP setting parameter, as it is forward, control will not 
   go to Filter again)

3. Servlet (you are accessing parameter, which is set in JSP 
   and you got the "Token" parameter)

发送重定向

1. Filter(Your request came here first, before JSP called, and you are trying
   to get "Token" parameter which is no where set yet)

2. JSP(Your JSP setting parameter, as it is redirect, control will go to browser 
   back and spwan new request,which intercept by web.xml and calls Filter again) 

3. Filter (So you got data here)

4. Servlet (So you got data here) 

试试这个看看输出

  <%

    String token = "abc";
    // Below 2 lines, try commenting each and see flow
    //request.getRequestDispatcher("/LoginServlet?Token="+token).forward(request,response);   
    response.sendRedirect("LoginServlet?Token="+token);

   %>

【讨论】:

  • 感谢您的回答,使用 sendRedirect 过滤器的第二次进程获得了带有新请求对象的 Token。但是如何使用 request.getParameter("token) 获取 Token First time(过滤器的处理)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多