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

来源:互联网 发布:玛格丽特小镇 知乎 编辑:程序博客网 时间:2024/06/05 06:27



这块儿比较简单,就是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);//写入sessionreturn 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;elsereturn 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"));}



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

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












原创粉丝点击