用户登录业务:
1、用户登录页面点击登录校验用户名和密码不能为空!
2、登录失败页面不跳转,显示登录失败错误信息!
3、登录成功跳转到首页,首页显示登录人的姓名。
-------------------------相关代码-----------------------------------
1、login.jsp
首先提交执行函数checkForm进行用户名和密码的校验,然后提交到action="${pageContext.request.contextPath }/user_login.action",代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0080)http://localhost:8080/mango/login.jhtml?redirectUrl=%2Fmango%2Fcart%2Flist.jhtml -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>会员登录</title>
<link href="${pageContext.request.contextPath}/css/common.css" rel="stylesheet" type="text/css"/>
<link href="${pageContext.request.contextPath}/css/login.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">
function checkForm(){
//用户名校验
var username = document.getElementById("username").value;
if(username==null || username==''){
alert("用户名不能为空");
return false;
}
//密码校验
var password = document.getElementById("password").value;
if(password==null || password==''){
alert("密码不能为空");
return false;
}
}
</script>
</head>
<body>
<div class="container header">
<div class="span5">
<div class="logo">
<a href="http://localhost:8080/mango/">
"<img src="${pageContext.request.contextPath}/image/r___________renleipic_01/logo.gif" alt="商城">
</a>
</div>
</div>
<div class="span9">
<div class="headerAd">
<img src="${pageContext.request.contextPath}/image/header.jpg" width="320" height="50" alt="正品保障" title="正品保障">
</div> </div>
<%@include file="menu.jsp" %>
</div> <div class="container login">
<div class="span12">
<div class="ad">
<img src="${pageContext.request.contextPath}/image/login.jpg" width="500" height="330" alt="会员登录" title="会员登录">
</div> </div>
<div class="span12 last">
<div class="wrap">
<div class="main">
<div class="title">
<strong>会员登录</strong>USER LOGIN
</div>
<div><s:actionmessage/></div>
<form id="loginForm" action="${pageContext.request.contextPath }/user_login.action" method="post" novalidate="novalidate" onsubmit="return checkForm();">
<table>
<tbody><tr>
<th>
用户名:
</th>
<td>
<input type="text" id="username" name="username" class="text" maxlength="20">
</td>
</tr>
<tr>
<th>
密 码:
</th>
<td>
<input type="password" id="password" name="password" class="text" maxlength="20" autocomplete="off">
</td>
</tr>
<tr>
<th>
验证码:
</th>
<td>
<span class="fieldSet">
<input type="text" id="captcha" name="captcha" class="text captcha" maxlength="4" autocomplete="off"><img id="captchaImage" class="captchaImage" src="${pageContext.request.contextPath}/image/captcha.jhtml" title="点击更换验证码">
</span>
</td>
</tr>
<tr>
<th>
</th>
<td>
<label>
<input type="checkbox" id="isRememberUsername" name="isRememberUsername" value="true">记住用户名
</label>
<label>
<a >找回密码</a>
</label>
</td>
</tr>
<tr>
<th>
</th>
<td>
<input type="submit" class="submit" value="登 录">
</td>
</tr>
<tr class="register">
<th>
</th>
<td>
<dl>
<dt>还没有注册账号?</dt>
<dd>
立即注册即可体验在线购物!
<a href="./会员注册.htm">立即注册</a>
</dd>
</dl>
</td>
</tr>
</tbody></table>
</form>
</div>
</div>
</div>
</div>
<div class="container footer">
<div class="span24">
<div class="footerAd"><img src="${pageContext.request.contextPath}/image/footer.jpg" width="950" height="52" alt="我们的优势" title="我们的优势" /></div>
</div>
<div class="span24">
<ul class="bottomNav">
<li>
<a >关于我们</a>
|
</li>
<li>
<a>联系我们</a>
|
</li>
<li>
<a>招贤纳士</a>
|
</li>
<li>
<a>法律声明</a>
|
</li>
<li>
<a>友情链接</a>
|
</li>
<li>
<a target="_blank">支付方式</a>
|
</li>
<li>
<a target="_blank">配送方式</a>
|
</li>
<li>
<a>服务声明</a>
|
</li>
<li>
<a>广告声明</a>
</li>
</ul>
</div>
<div class="span24">
<div class="copyright">Copyright © 2005-2015 网上商城 版权所有</div>
</div>
</div>
</body></html>2、根据struts.xml中的配置,需要在UserAction.java中编写login方法。代码如下:
/**
* 登录
* @return
*/
public String login(){
User existUser = userService.login(user);
if(existUser==null){
//登录失败
this.addActionMessage("登录失败:用户名或密码错误或未激活!");
return LOGIN;
}else{
//登录成功,将信息存入到session中
ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);
return "loginSuccess";
}
}3、action调用UserService中的login方法,UserService中的login方法代码如下:
/**
* 登录
* @param user
* @return
*/
public User login(User user) {
return userDao.login(user);
}4、UserService.java中调用UserDao中的login方法,查询用户信息需要满足用户名密码正确并且状态为1(激活),代码如下:
/**
* 登录
* @param user
* @return
*/
public User login(User user) {
String hql = "from User where username=? and password=? and state=?";
List<User> list = this.getHibernateTemplate().find(hql, user.getUsername(),user.getPassword(),1);
if(list!=null && list.size()>0){
return list.get(0);
}
return null;
}5、UserAction中返回的逻辑视图需要在struts.xml中进行配置,其代码如下:
<!-- 用户action -->
<action name="user_*" class="userAction" method="{1}">
<result name="registPage">/WEB-INF/jsp/regist.jsp</result>
<result name="input">/WEB-INF/jsp/regist.jsp</result>
<result name="msg">/WEB-INF/jsp/msg.jsp</result>
<result name="loginPage">/WEB-INF/jsp/login.jsp</result>
<result name="login">/WEB-INF/jsp/login.jsp</result>
<result name="loginSuccess" type="redirect">index</result>
</action>6、当登录失败时,需要在login.jsp中显示错误信息。
首先需要引入struts2的标签。
<%@ taglib uri="/struts-tags" prefix="s"%>
然后在页面中加入显示错误信息的代码。<div><s:actionmessage/></div>
login.jsp页面代码上面已列出,里面找得到这两句代码。
7、当登录成功时,需要跳转到首页,去掉登录注册的显示,增加显示登录人的姓名、我的订单和退出。
因为index.jsp中包含menu.jsp信息,所以需要在index.jsp中引入struts2的标签,如此menu.jsp中就可以用struts2的标签来进行条件判断了。
menu.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<div class="span10 last">
<div class="topNav clearfix">
<ul>
<s:if test="#session.existUser == null">
<li id="headerLogin" class="headerLogin" style="display: list-item;">
<a href="${pageContext.request.contextPath }/user_loginPage.action">登录</a>|
</li>
<li id="headerRegister" class="headerRegister" style="display: list-item;">
<a href="${pageContext.request.contextPath }/user_registPage">注册</a>|
</li>
</s:if>
<s:else>
<li id="headerLogin" class="headerLogin" style="display: list-item;">
欢迎您:<s:property value="#session.existUser.name"/>|
</li>
<li id="headerLogin" class="headerLogin" style="display: list-item;">
<a href="#">我的订单</a>|
</li>
<li id="headerRegister" class="headerRegister" style="display: list-item;">
<a href="#">退出</a>|
</li>
</s:else>
<li>
<a>会员中心</a>
|
</li>
<li>
<a>关于我们</a>
</li>
</ul>
</div>
<div class="cart">
<a href="./购物车.htm">购物车</a>
</div>
<div class="phone">
客服热线:
<strong>88888888</strong>
</div>
</div>
<div class="span24">
<ul class="mainNav">
<li>
<a href="./index.htm">首页</a>
|
</li>
<li>
<a href="./蔬菜分类.htm">定制套餐</a>
|
</li>
<li>
<a >安全频道</a>
|
</li>
<li>
<a>商城卡</a>
|
</li>
<li>
<a>蔬菜基地</a>
|
</li>
<li>
<a>节气养生</a>
|
</li>
<li>
<a>便民服务</a>
|
</li>
</ul>
</div>8、效果图
这篇博客介绍了用户登录的业务流程,包括登录页面的校验、登录失败错误信息的展示以及登录成功后的页面跳转。在登录过程中,如果用户名或密码为空,会提示错误信息;登录失败时不直接跳转,而是显示错误信息;成功登录后则跳转到首页,并在首页显示登录人的姓名。
4839





