在平常的项目开发中,常常的会遇到这样一种情况。用户下载资料时,发现用户没有登陆,就要求用户进行登陆,然后才能进行下载。
关系图如下:
- 首先要对现在模块进行用户是否已登陆的校验
---------------------------------------- download.jsp----------------------------------------
if(session.getAttribute("username")==null){
String url = myRedirect.dealurl(request); //把当前请求的URL保存起来
response.sendRedirect("login.jsp?url="+url); //把当前的URL当成参数,通过重定向传送给登陆页
}else{
out.println("Welcome "+session.getAttribute("username"));
}
----------------------------------------login.jsp----------------------------------------
<%
String url = request.getParameter("url"); //接受重定向传送过来的URL
String userid =request.getParameter("username");
String password =request.getParameter("password");
if(userid!=null) //如果是登录提交执行下面代码
{
session.setAttribute("username",userid);
out.println("<script>");
out.println("self.location.href='"+myRedirect.geturl(url)+"';");
out.println("alert('登录成功,谢谢光临');");
out.println("</script>");
}
%>
<form action="login.jsp">
用户名:<input type="text" name="username"></br>
密 码 :<input type="password" name="password">
<input name="url" type="hidden" value="<%=url%>"><br> //存放url,这个不能少
<input type="submit" value="提交">
</form>
----------------------------------------myRedirect.java----------------------------------------
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
public class myRedirect //对url的转换类
{
public static String dealurl(HttpServletRequest request)
{
String url = "";
url = request.getRequestURL()+"?";
url +=param(request);
if(url.indexOf("&")>-1)
url=url.replaceAll("&","@#@");//实际上就是把有&的字符转化成了@#@
//经过试验,这个地方“&”必须进行转换。否则会有问题。当传递的参数是多个的时候,如果没有转换, 只能传递第一个参数,别的参数会丢失。目前还不知道为什么?
return url;
}
public static String geturl(String url)//这个是还原方法
{
if(url.indexOf("@#@")>-1)
url=url.replaceAll("@#@","&");
return url;
}
public static String param(HttpServletRequest request)
{
String url = "";
Enumeration param = request.getParameterNames();//得到所有参数名
while(param.hasMoreElements())
{
String pname = param.nextElement().toString();
url += pname+"="+request.getParameter(pname)+"&";
}
if(url.endsWith("&"))
{
url = url.substring(0,url.lastIndexOf("&"));
}
return url;
}
}
原理:
- 先根据request对象中的getRequestURL(),方法取得当前请求的URL,这个URL是没有带参数的。
- 再通过request对像中的getParameterNames()方法取得当前所有的请求参数名称。
- 根据取得的请求参数名称集合,取得对应的请求参数值。
- 组装当前URL字符串。
- 替换URL中的“&”字符
- 将组装好的URL当成参数,通过重定向传递给目标页面。
- 目标页面获取请求时,获取URL值,然后请求发送到URL指定的页面。