登录和登出俩操作的流程都是:
1.jsp提交到struts的Action,Action会查找所需的实例,这时spring帮助注入实例;
2.注入的loginAction实例(spring已经往里注入了其他所需的实例)会去servise里查找实现的方法
3. 执行具体实现后,还要对session操作,记录登录、登出状态。
1.登录jsp
根据session判断是否已登录,
登录过的情况下再显示:用户名、用户注销按钮、登录时间
<%
String s = (String)session.getAttribute("username");
if(null != s)//判断是否已分配session,登录过的情况下再显示以下信息
{
%>
<%=s %>同学你好!
<input type="button" name="lo" value="用户注销"
onClick="doLink('logOut')" />
<br>
<h4>(您已经在本站点停留了<%=(session.getLastAccessedTime()-session.getCreationTime())/1000 %>秒)</h4> <!--计算session创建时间-->
<%
}
%>
根据传参控制调用的Action以及方法
<!-- 根据传参控制调用的Action以及方法 -->
<script type="text/javascript">
var link;
function doLink(link) {
document.getElementById("myform").action = link;
document.getElementById("myform").submit();
}
</script>
</head>
表单
<form id="myform" action="login" method="post">
<input type="button" name="b2" value="注册"
onClick="window.open('register.jsp','new','height=250,width=400,top=100,left=400')" />
<input type="button" name="b1" value="用户管理"
onClick="doLink('queryall')" />
<br>
<br>
username:<input type="text" name="username" />
<br>
password:<input type="password" name="password" />
<br>
<input type="submit" name="sub" value="登录" />
<input type="reset" name="reset" value="重置" />
</form>
2.loginAction
这个Action只管登录和登出的事
里边聚合了一个service实例,这个要靠spring来注入,
除了要调用service的方法,还有通过session来管理登录状态:
public class LoginAction extends ActionSupport
{
private String username;
private String password;
private ILogin service;
public LoginAction()
{
}
public String login()
{
boolean flag = false;
flag = service.login(getUsername(), getPassword());
if(true == flag)
{
Map<String, Object> attibutes = ActionContext.getContext().getSession();//记录用户登录信息
attibutes.put("username", username);
attibutes.put("password", password);//登录session
}
return flag==true?SUCCESS:ERROR;
}
public String logOut()
{
Map<String, Object> attibutes = ActionContext.getContext().getSession();
attibutes.remove("username");
return SUCCESS;
}
//setter&getter}
3.loginService
这儿只用到了dao中的一个方法,从数据库中查询后放回给action
public class LoginService implements ILogin
{
private User_SSI user;
private IUserDao dao;
public boolean login(String username, String password)
{
user.setUsername(username);
user.setPassword(password);
List<User_SSI> l = dao.queryUserName(user.getUsername());
for(int i=0;i<l.size();i++)
{
String pwd = l.get(i).getPassword();
if(user.getPassword().equals(pwd))
return true;
}
return false;
}
//setter&getter
4.登录结果jsp
通过action处理后跳转到下面的页面中
成功可以返回继续操作,或者直接注销
<%
String sa = (String)session.getAttribute("username");
if(null != sa && !sa.equals("") ) //null是防止NullPointer,如果session设置成功,就不是空值
{
%>
<h2> 登录成功 ,欢迎 :"<%=sa%>" 登录 </h2>
<br>
<h2> <a href="index.jsp"> 返回主页</a></h2> <br>
<h2> <a href="logOut.jsp">注销按钮</a> </h2>
<%
}
else
{
%>
<h2>还未登录 <a href="index.jsp">点此处登录</a></h2>
<%
}
%>
失败倒计时两秒后退回登陆页重新登录
<body>
<%
response.addHeader("refresh","2;URL=index.jsp");
%>
<h2> 登录失败,两秒后自动跳转回主页</h2>
<h2> 或点此处<a href="index.jsp">重新登录</a> </h2>
</body>
<body>
<%
response.setHeader("refresh","3;URL=index.jsp"); //倒计时跳转
%>
<h2>已经注销成功, 3秒内若没有跳转,<a href="index.jsp">请点击此处</a></h2>
</body>