您的位置:首页 > 编程语言 > Java开发

Struts2+Spring+iBatis整合用户管理实例之二:登录和登出

2013-01-16 14:12 429 查看
原帖地址:http://blog.csdn.net/ruantao1989/article/details/8143979

感谢原作者

登录和登出俩操作的流程都是:

1.jsp提交到struts的Action,Action会查找所需的实例,这时spring帮助注入实例;

2.注入的loginAction实例(spring已经往里注入了其他所需的实例)会去servise里查找实现的方法

3. 执行具体实现后,还要对session操作,记录登录、登出状态。

1.登录jsp

根据session判断是否已登录,

登录过的情况下再显示:用户名、用户注销按钮、登录时间

[html]
view plaincopyprint?

<%
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创建时间-->
<%
}
%>

<%
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以及方法

[javascript]
view plaincopyprint?

<!-- 根据传参控制调用的Action以及方法 --> <script type="text/javascript"> var link; function doLink(link) { document.getElementById("myform").action = link; document.getElementById("myform").submit(); } </script> </head>

<!-- 根据传参控制调用的Action以及方法 -->
<script type="text/javascript">
var link;
function doLink(link) {
document.getElementById("myform").action = link;
document.getElementById("myform").submit();
}
</script>
</head>
表单

[html]
view plaincopyprint?

<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>

<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来管理登录状态:

[java]
view plaincopyprint?

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}

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

[java]
view plaincopyprint?

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

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处理后跳转到下面的页面中

成功可以返回继续操作,或者直接注销

[html]
view plaincopyprint?

<%
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>
<%
}
%>

<%
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>
<%
}
%>


失败倒计时两秒后退回登陆页重新登录

[html]
view plaincopyprint?

<body>
lt;%
response.addHeader("refresh","2;URL=index.jsp");
>
<h2> 登录失败,两秒后自动跳转回主页</h2>
<h2> 或点此处<a href="index.jsp">重新登录</a> </h2>
</body>

<body>
<%
response.addHeader("refresh","2;URL=index.jsp");
%>
<h2> 登录失败,两秒后自动跳转回主页</h2>
<h2> 或点此处<a href="index.jsp">重新登录</a> </h2>
</body>


[html]
view plaincopyprint?

<body>
;%
response.setHeader("refresh","3;URL=index.jsp"); //倒计时跳转
t;
<h2>已经注销成功, 3秒内若没有跳转,<a href="index.jsp">请点击此处</a></h2>

</body>

<body>
<%
response.setHeader("refresh","3;URL=index.jsp"); //倒计时跳转
%>
<h2>已经注销成功, 3秒内若没有跳转,<a href="index.jsp">请点击此处</a></h2>

</body>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐