如果我想在使用过滤器后更新我的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;。
谢谢。
答案 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请求的开头创建一个通常为空的映射,然后在请求的处理运行期间逐渐填充其他信息。