简单CMS项目笔记之七:后台登陆登出模块



这块儿比较简单,就是action的跳转,sql查询用户名密码的匹配,session写入;登出时action要type="redirectAction"。利用i18n作统一的错误处理值得借鉴。



一:action

还是用*通配,要注意就是登出的时候action要type="redirectAction"

        <!-- 管理员登录/退出 -->
        <action name="log_*" class="com.yxq.action.LogInOutAction" method="{1}">            
            <result name="input">/pages/admin/Login.jsp</result>
            <result name="login">/pages/admin/view/AdminTemp.jsp</result>
            <result name="logout" type="redirectAction">goindex</result>
        </action> 


二:登陆jsp

和原来写过比,就是多了fielderror,

用于接受校验出错的提示信息,然后给登录者提示一下

(错误信息是通过i18n的getText完成的)

 <s2:form action="log_Login.action" theme="simple">

<table border="0" width="90%" cellspacing="0" cellpadding="0">
                             <tr height="50"><td colspan="2"><s2:fielderror/></td></tr>
                             <tr height="30">
                                 <td align="right" width="40%">用户名:</td>
                                 <td style="text-indent:5"><s2:textfield name="user.userName" size="30"/></td>
                             </tr>                
                             <tr height="30">
                                 <td align="right">密码:</td>
                                 <td style="text-indent:5"><s2:password name="user.userPassword" size="30"/></td>
                             </tr>
                             <tr height="60">
                                 <td></td>
                                 <td>
                                     <s2:submit value="登录"/>
                                     <s2:reset value="重置"/>
                                     <s2:a href="index.jsp">[返回首页]</s2:a>
                                 </td>
                             </tr>
                         </table>

这里边jsp向action传值,用的是直接传“ 实例.属性 ”的方法,

这种方法只要求action里有同名的实例,再加上对应属性的setter&getter就行了



三:action

没有向info那样单独继承一个superaction,原因是比较简单

仅多写一个bean就行了

public class LogInOutAction extends MySuperAction {	
	protected UserSingle user;


登录:dao里查值,登录成功的话把user实例写入session

	/** 功能:查询数据表,验证是否存在该用户 */
	public String Login(){
		String sql="select * from tb_user where user_name=? and user_password=?";
		Object[] params={user.getUserName(),user.getUserPassword()};
		OpDB myOp=new OpDB();
		if(myOp.LogOn(sql, params)){				//dao层判断是否登录成功
			session.put("loginUser",user);			//写入session
			return LOGIN;							//跳转到管理员管理页面
		}
		else{										//用户名或密码错误
			addFieldError("loginE",getText("city.login.wrong.input"));
			return INPUT;							//跳到重新登录页面
		}
	}

验证是否登录:看session中有值且是user实例

	/** 功能:判断当前用户是否登录 */
	public String isLogin(){
		Object ob=session.get("loginUser");//去session里取值
		if(ob==null||!(ob instanceof UserSingle))//判断有值 且是User实例,代表登陆成功
			return INPUT;
		else
			return LOGIN;
	}

退出前清掉session(此程序session里没别的东西),之后action要客户端跳转回首页

	/** 功能:退出登录 */
	public String Logout(){		
		session.clear();	
		return "logout";
	}




四:数据校验

还是用action的validate-方法名执行

这个在jsp里加个js验证也行


这的错误信息是通过i18n的getText完成的,所有错误统一放在src/action文件夹下的package.properties文件里

里边都是类似:city.login.no.name=\u8bf7\u8f93\u5165 <b><font color="red">\u7528\u6237\u540d\uff01</font></b> 这样的定义,值得借鉴

	/** 功能:验证是否输入用户名和密码 */
	public void validateLogin() {
		String name=user.getUserName();
		String password=user.getUserPassword();
		
		if(name==null||name.equals(""))
			addFieldError("nameError",getText("city.login.no.name"));
		if(password==null||password.equals(""))
			addFieldError("passwordError",getText("city.login.no.password"));
	}



登录成功后进入一个比较复杂的页面,用于显示全部后台管理的信息,

这个后边单说,这会儿已经完成了登录和登出的接口












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值