最开始一直从Servlet的角度思考怎么实现后台验证,实际上用另一个jsp页面作为后台也可以。
首先在登陆页建立Form
<form method="post" action="check.jsp">
<input type="text" name="username" value="" placeholder="Username">
<input type="password" name="password" value="" placeholder="Password">
<input type="submit" name="commit" value="Login">
</form>
两个jsp页面间传递值有多种方法,先用form post的方法把表单数据传递给后台check.jsp页面;
check.jsp页面中需要用request.Parameter()来接受值:
String usr=request.Parameter("username");
String passwd=request.Paracmeter("password");
可以在本地建立一个用于存储用户名密码的文本文档:userinfo.txt;
在check.jsp页面中读取本地文件:
FileReader是用于读取文档的数据类型,
FileReader fr=new FileReader("文档的绝对地址");
BufferdeReader br=new BufferedReader(fr);
在文本文档中存取用户名密码的方式有很多,此处易于理解的是可以在文本文档中采用“用户名:密码”/行 的方式存储,
则进行比对的时候需要将传递过来的用户名usr和密码passwd组合为“usr:passwd”作为一个字符串,然后和每一行的用户名密码比对:
String nap="";
nap=usr+":"+passwd;
下面用.readLine();的方式进行每一行的读取:
String nameandpassword="";
nameandpassword=br.readLine();
对比:
while(nameandpassword!=null)
{
if(nameandpassword.equals(nap))
{
flag=1;break;
}
nameandpassword=br.readLine();
}
注意:(1).readLine();是读取下一行;
(2)最后需要关闭FileReader和BufferedReader所建立的对象:
fr.close(); br.close();
最后,需要对flag进行一个页面的跳转,此处需要注意的是,需要设计一种方法防止未登录用户绕过登陆页,比较常用的一种方法是配置过滤器Filter,
不过还有一种比较简单的方法是为每个网页添加一个标记。此处需要check.jsp向目标页传递标记值,此处是第二种jsp页面之间传递值的方式,不需要手动点击触发:
<%if(flag==1)
{
%>
<script type="text/javascript">
<jsp:forward page="LoginSuccess.jsp">
<jsp:param name="flagx" value="1">
</jsp:forward>
</script>
<%
}
%>
此处只表示验证成功之后跳转的页面LoginSuccess.jsp,在目标页顶端添加标记验证是否是通过登陆而进入的,如果接收到的不是“1”,则说明越过了登陆页,需要返回登陆页:
<%@page import="java.io.*"%>
<%
String getflagx="0";
getflagx=request.Parameter("flagx");
if("0".equals(getflagx))
{
%>
<script type="text/javascript">
<jsp:forward page="Login.jsp"/>
</script>
<%
}
%>
在目标页最后添加恢复标记:
getflagx="0"
我在实习过程中,由于先前的要求并不是很明确,所以好多地方改了,最后为了追求更好的效果,需要在登陆页登录失败时弹出一个alert的提示框,要实现这个也有好多办法,当今网站比较常用的是Ajax以及Servlet等的验证方法,此处为了效率,我还是继续沿用了之前的思路和方法,也是用标记传值,然后根据标记来决定alert的弹出。