`

如何实现网站登陆的记忆跳转功能

JSP 
阅读更多
使用request.getHeader("Referer");可以方便地获取上次访问的URL请求,从事实现记忆跳转功能,但是该方法不能处理POST方式提交的参数信息

为了将上次请求的所有信息都保持下来,可以写一个工具类,将请求和表单信息拼写成一个字符串,保存到表单中一个隐藏域;重新登陆的时候,可以获取到上次的url值。当然也可以讲上次的url值放到session中进行保存。

处理请求的工具类
RedirectUtil类用于处理请求URL和表单信息,完成URL转换

public class RedirectUtil{
public static String dealurl(HttpServletRequest request){
		String url="";
		url=request.getRequestURL()+"?";
		url+=param(request);
		if(url.indexOf("&")>-1){
			url=url.replace("&", "@#@");
		}
		return url;
	}

	public static String param(HttpServletRequest request) {
		String url = "";
		Enumeration param = request.getParameterNames();
		while (param.hasMoreElements()) {
			String pname = (String) param.nextElement();
			url+=pname+"="+request.getParameter(pname)+"&";
		}
		if(url.endsWith("&")){
			url=url.substring(0, url.lastIndexOf("&"));
			
		}
		return url;
		
	}
	
	public static String geturl(String url){
		if(url.indexOf("@#@")>-1){
			url=url.replaceAll("@#@","&");
		}
		return url;
	}
}


这里将url中的&转换成@#@是由于待会再页面跳转的时候,携带参数的时候避免将&这里的参数作为参数来计算,而是仅仅作为一个字符串。
如果将上一个url地址放入到session中,就不需要进行转换了



在jsp页面中,
<%
String url="";
if(session.getAttribute("username")==null){
   url=RedirectUtil.dealurl(request);
   response.sendRedirect("weblogin.jsp?url="url);
}

在登陆页面jsp中
<%
String url=request.getParameter("url");
%>

将url参数放入到表单的隐藏域,进行提交
<input type="hidden" name="url" value="<%=url>">

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics