比如说,你有资源放在resource.jsp页面上,让用户必须登陆后才能访问。
所以用户未登录访问资源时,便会跳到登录页面login.jsp,然后登录成功直接跳转到资源页面。
servlet中,request.getHeader("referrer");可以得到上一次的请求地址。指通过链接而去访问的资源。
只有通过链接访问当前页的时候,才能获取上一页的地址;
否则request.getHeader("referer")的值为null,通过window.open打开当前页或者直接输入地址,也为null。
request.getRequestURL();也可以得到上一次请求的地址,不管是链接还是提交表单。建议使用这种方式。
可以在资源访问的servlet中
String beforeLogin=new String(request.getRequestURL());
request.getSession().setAttribute("beforeLogin",beforeLogin);
然后,在登陆的servlet中
String beforeLogin=(String) request.getSession().getAttribute("beforeLogin");
if("admin".equals(request.getParameter("name")))
{
request.getSession().setAttribute("name", "admin");
if(beforeLogin==null){
request.getRequestDispatcher("/loginSuccess.jsp").forward(request, response);
}
else{
request.getRequestDispatcher(beforeLogin.substring(beforeLogin.indexOf("/servlet"))).forward(request, response);
}
}
还有一种需求,就是进入一个页面后,点击一个链接,返回原来的页面。比如,错误处理页面,完全可以在里面放一个链接,返回出错之前的页面。
在index.jsp中放置一个错误链接,
<%
String lastAccessUrl = request.getRequestURL() + "?" + request.getQueryString();
session.setAttribute("last", lastAccessUrl);
%>
This is my JSP page. <br>
通过错误的链接:<a href="lalala">链接</a>
然后配置web.xml,假设报404错误后,进入error.jsp页面
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
然后便可以在error.jsp中加入下面代码: 返回刚才的链接:<a href="${sessionScope.last}">通过链接登录</a>
于是报错后,便可以通过链接返回了。