NETCTOSS03_登陆模块
来源:互联网 发布:java 写入word文档 编辑:程序博客网 时间:2024/06/05 10:02
NETCTOSS03_登陆模块
界面及展示:
涉及技术:
地址栏输入指定地址,展现上图界面
输入账号,密码和验证码才能登陆,否则有相应的提示
点击验证码会更换一张新图片
验证码输入错误会提示错误,ajax技术异步判断
登陆成功会跳转到主界面,失败会重新回到登陆页面
源代码及具体细节:
LoginAction.java 判断账号密码是否正确的Action
package com.qxl.netctoss.action;import com.qxl.netctoss.dao.AdminDAO;import com.qxl.netctoss.entity.Admin;import com.qxl.netctoss.exception.MyException;import com.qxl.netctoss.util.DBUtil;import com.qxl.netctoss.util.Factory;public class LoginAction extends BaseAction {private String code;private String pwd;private String errorMsg;private static AdminDAO adminDAO = Factory.getAdminDAO();public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public String getErrorMsg() {return errorMsg;}public void setErrorMsg(String errorMsg) {this.errorMsg = errorMsg;}public String execute() throws MyException{try {//System.out.println(code+","+pwd);Admin admin = adminDAO.findByCodeAndPwd(code, pwd);if(admin != null){session.put(ADMIN_KEY, admin);return "success";}else{errorMsg = "用户名或密码错误,请重试";return "fail";}} catch (MyException e) {e.printStackTrace();throw new MyException("查询账号密码错误",e);}}}
struts.xml
<!-- 登陆模块 --><package name="login" namespace="/login" extends="json-default"><!-- 登陆初始页面 --><action name="loginform"><result name="success">/WEB-INF/jsp/login.jsp</result></action><!-- 主页面:登陆成功后跳转的主页面 --><action name="index"><result name="success">/WEB-INF/jsp/index.jsp</result></action><!-- 登陆判断页面 --><action name="login" class="com.qxl.netctoss.action.LoginAction"><result name="success" type="redirectAction">index</result><result name="fail">/WEB-INF/jsp/login.jsp</result></action><!-- 图片验证码 --><action name="code" class="com.qxl.netctoss.action.VerifyCodeAction"method="code"><!-- StreamResult负责输出二进制信息 --><result name="success" type="stream"><!-- 给StreamResult对象的inputName属性赋值 --><!-- inputName是一个OGNL表达式,该表达式可以从VS中获取一个InputStream类型的对象 --><!-- StreamResult就是从这个InputStream对象中读取要输出的二进制信息 --><param name="inputName">inputStream</param></result></action><action name="checkcode" class="com.qxl.netctoss.action.VerifyCodeAction"method="checkcode"><result name="success" type="json"><param name="root">ok</param></result></action></package>
login.jsp
<%@page pageEncoding="utf-8" contentType="text/html; charset=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"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>NetCTOSS</title> <link type="text/css" rel="stylesheet" media="all" href="../styles/global.css" /> <link type="text/css" rel="stylesheet" media="all" href="../styles/global_color.css" /> <script type="text/javascript" src="../js/jquery-1.11.1.js"></script> <script type="text/javascript"> //ajax检查验证码 function verifyCode(){ var b = false; $.ajax({'url':'checkcode.action','data':'verifyCode='+$('#verifyCode').val(),'type':'post','dataType':'text','async':false,'success':function(data){if(data=="true"){b = true;$("#code_msg").empty();}else{b = false;$("#code_msg").html("验证码错误");}}});return b; } //检查账号是否为空 function checkUsername(){if($("#username").val()==""){$("#user_msg").text("账号不能为空");return false;}else{$("#user_msg").text("");return true;} } //检查密码是否为空 function checkPwd(){if($("#pwd").val()==""){$("#pwd_msg").text("密码不能为空");return false;}else{$("#pwd_msg").text("");return true;} } $(function(){$("#submit").click(function(){var b = checkUsername() && checkPwd() && verifyCode();if(b){$("#form1").submit();}}); }); </script> </head> <body class="index"> <div class="login_box"> <form action="login.action" method="post" id="form1"> <table> <tr> <td class="login_info">账号:</td> <td colspan="2"><input id="username" name="code" type="text" class="width150" /></td> <td class="login_error_info"><span id="user_msg" class="required"></span></td> </tr> <tr> <td class="login_info">密码:</td> <td colspan="2"><input id="pwd" name="pwd" type="password" class="width150" /></td> <td><span id="pwd_msg" class="required"></span></td> </tr> <tr> <td class="login_info">验证码:</td> <td class="width70"><input id="verifyCode" name="verifyCode" type="text" class="width70" /></td> <td><img src="code.action" alt="验证码" title="点击更换" onclick="this.src='code.action?#'+(new Date()).getTime()"/></td> <td><span class="required" id="code_msg"></span></td> </tr> <tr> <td></td> <td class="login_button" colspan="2"> <a href="javascript:;" id="submit"><img src="../images/login_btn.png" /></a> </td> <td><span class="required"><s:property value="errorMsg"/></span></td> </tr> </table> </form> </div> </body></html>
VerifyCodeAction.java 生成验证码图片和验证验证码是否正确
package com.qxl.netctoss.action;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import com.qxl.netctoss.util.ImageUtil;import com.sun.image.codec.jpeg.ImageFormatException;/** * 生成图片验证码 * */public class VerifyCodeAction extends BaseAction{private InputStream inputStream;private String verifyCode;private boolean ok;public InputStream getInputStream() {return inputStream;}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public boolean isOk() {return ok;}public void setOk(boolean ok) {this.ok = ok;}public String getVerifyCode() {return verifyCode;}public void setVerifyCode(String verifyCode) {this.verifyCode = verifyCode;}//code.actionpublic String code(){String number = ImageUtil.getNumber(4);session.put(VERIFY_CODE_KEY,number);try {byte[] arr = ImageUtil.getImageArray(52,23, number);inputStream = new ByteArrayInputStream(arr);} catch (ImageFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return "success";}//checkcode.actionpublic String checkcode(){String number = (String) session.get(VERIFY_CODE_KEY);//System.out.println(number+","+code);if(number != null){ok = number.equalsIgnoreCase(verifyCode);}return "success";}}
问题及体会:
1.实现XXXAware接口可得到相应的XXX。eg:
package com.qxl.netctoss.action;import java.util.Map;import org.apache.struts2.interceptor.SessionAware;import com.qxl.netctoss.util.Constants;public class BaseAction implements SessionAware,Constants{protected Map<String, Object> session;public void setSession(Map<String, Object> session) {this.session = session;}}
继承此基础Action即可使用session对象;此外,该类还实现了Constants接口,该接口中存的是常量,方便程序中直接使用。
2.生成图片时,result类型为stream。eg:
<!-- 图片验证码 --><action name="code" class="com.qxl.netctoss.action.VerifyCodeAction"method="code"><!-- StreamResult负责输出二进制信息 --><result name="success" type="stream"><!-- 给StreamResult对象的inputName属性赋值 --><!-- inputName是一个OGNL表达式,该表达式可以从VS中获取一个InputStream类型的对象 --><!-- StreamResult就是从这个InputStream对象中读取要输出的二进制信息 --><param name="inputName">inputStream</param></result></action>
3.如何使用json。
a,使用:
需要先导json-lib-2.1.jar和struts2-json-plugin-2.1.8.jar包。
package不再继承struts-default而是继承json-default(json-default继承struts-default)。
eg:
<action name="checkcode" class="com.qxl.netctoss.action.VerifyCodeAction"method="checkcode"><!-- JSONResult默认把VS的栈顶(Action)做成JSON字符串返回; JSONResult对象的root属性是一个OGNL表达式,通过该表达可以从VS中获取一个对象,JSONResult将把这个对象做成JSON字符串返回--><result name="success" type="json"><param name="root">ok</param></result></action>
0 0
- NETCTOSS03_登陆模块
- 登陆模块
- 登陆模块
- jsp登陆模块
- php写登陆模块
- Struts2(登陆模块)
- 登陆模块设计
- 登陆模块学习笔记
- Android APP 登陆模块
- 登陆注册模块
- 登陆模块的描述
- PHP&MySQL登陆模块
- SSH登陆模块
- MVP登陆模块
- 登陆注册模块解析
- KBEngine登陆模块login
- android登陆模块 联网登陆和离线登陆
- 注册,登陆,删除账户模块
- mysql 创建用户和密码提示失败
- 10: const 常量
- POJ 1279 Art Gallery (半平面交求面积)
- 从零开始快速搭建Android应用自动化测试(一)
- SecurePreference的添加方法
- NETCTOSS03_登陆模块
- C语言二维数组
- Spring整合LogBack
- html5语义化标签
- String,StringBuffer与StringBuilder的区别??
- JAVA的StringBuffer类
- NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?
- 1861: [Zjoi2006]Book 书架
- python函数的属性