过滤后更新JSP

时间:2015-02-05 13:38:35

标签: java javascript jsp servlets

如果我想在使用过滤器后更新我的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>

但我认为我错了,因为我得到了整页,而不仅仅是&#34; 12345&#34;。

谢谢。

1 个答案:

答案 0 :(得分:0)

在您的情况下,我相信您要实现的目标实际上只是检索您在JSP文档中的Filter中生成的值。如果这是正确的,你可以选择这样的路线。

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请求的开头创建一个通常为空的映射,然后在请求的处理运行期间逐渐填充其他信息。