【问题标题】:Updating JSP after filtering过滤后更新 JSP
【发布时间】:2015-02-05 13:38:35
【问题描述】:

如果我想在使用过滤器后更新我的 jsp 页面,请帮助我了解我应该怎么做。

例如,我的 jsp 页面 /index.jsp 包含我想要更新的 <div id="login-id">
我有一个看起来像这样的过滤器:

<filter-mapping>
    <filter-name>AccessFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
</filter-mapping>

public class AccessFilter implements Filter {

private LoginChecker loginChecker;

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

//some code goes here where I get name and hash from the cookies

    loginChecker = new LoginChecker();
    if (loginChecker.isLoggedIn(name, hash)) {
        // here I want to send something into my div
    } else {

    }

    chain.doFilter(request, response);
}

我想我需要做这样的事情:

HttpServletResponse resp = (HttpServletResponse) response;
resp.getWriter().write("12345");
chain.doFilter(request, resp);

并添加到索引中:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
    $.get('index.jsp', function(data) {
        console.log("data = "  + data);
    });
</script>

但我认为我错了,因为我得到的是整个页面,而不仅仅是“12345”。

谢谢。

【问题讨论】:

  • 您需要提供某种方式让您的代码知道您是在请求整个页面还是只是一个片段。例如,您可以使用不同的映射和 jsp 来提供片段。
  • 我认为我需要一个片段。因为如果我的过滤器 (loginChecker.isLoggedIn(name, hash) 说“假”,那么 div 应该保持为空。但如果它说“真”,我想用“以+名称登录”之类的信息填充该 div(来自 cookie )'。
  • 我想我明白了。制作了一个空的 jsp (loginFragment.jsp) + 包含为 并使用调度程序 INCLUDE、REQUEST 为其过滤器。我希望我做对了。谢谢。

标签: java javascript jsp servlets


【解决方案1】:

在您的情况下,我相信您想要实现的实际上只是检索您在 JSP 文档中的过滤器中生成的值。如果这是正确的,你可以走这样的路线。

类 HttpServletRequest 具有 getter/setter setAttributes 和 getAttributes 的特点,您可以使用它们非常类似于您在 POST 和 GET 参数中使用的方法。

在您的过滤器中,您可以像这样将任意数据设置到属性映射。

request.setAttribute("data", "my data");

如果您的 JSP 稍后需要此数据,您可以执行以下操作:

首先通过在页面标题中设置以下内容,确保在您的 JSP 页面中评估 EL 表达式:

<%@ page isELIgnored="false" %>

然后你可以像这样访问请求属性:

<p>Hello world this is my JSP and we received ${data} from our filter</p>

澄清请求属性。与会话属性相反,请求属性仅在单个请求的时间内有效。这意味着在每个 HTTP 请求开始时会创建一个通常为空的映射,然后在请求处理运行期间逐渐填充其他信息。

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2013-04-15
    • 2012-09-15
    • 2023-03-14
    相关资源
    最近更新 更多