读书人

Struts2+JQuery+Json登陆范例

发布时间: 2012-10-24 14:15:58 作者: rapoo

Struts2+JQuery+Json登陆实例

在搭建之前.. 首先,需要准备struts2.0框架的5个核心包, 以及jsonplugin-0.32.jar

以及json-lib-2.2.2-jdk15.jar ,用来转换JSON对象的.,ojdbc14.jar oracle驱动包. jquery-1.2.6.js文件。

?

?

开始建立WebProject ,取名为Struts2AjaxDemo

把包分别复制到WEB-INF/lib包下面。

?

建立struts.xml文件 和 web.xml文件。 这个功能,还对数据库进行了操作..数据库代码,贴出来见表的sql语句:

建立表的SQL语句如下:

?

?

?

后—AO连接Oracle数据库代码:

package pack.java.basedao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import pack.java.vo.User;public class BaseConnection {private static final String USERNAME ="scott";private static final String PASSWORD ="tiger";private static final String DRIVER ="oracle.jdbc.driver.OracleDriver";private static final String URL  = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";private Connection connection = null;private PreparedStatement preparedStatement= null;private ResultSet resultSet = null;private Connection getConnection(){try {Class.forName(DRIVER);try { connection =  DriverManager.getConnection(URL, USERNAME, PASSWORD); connection.setAutoCommit(true);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("连接失败!");}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("驱动没有找到!");}return connection;}private PreparedStatement getPreparedStatement(String sql){getConnection();try {preparedStatement =  connection.prepareStatement(sql);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return preparedStatement;}public User getUserByName(String name){User user = null;String sql = "select userId,username,password,faicount,to_char(lastlogintime,'yyyy-MM-dd hh:mi:ss')tdate from user_info U where U.username = '"+name+"'";try {resultSet = getPreparedStatement(sql).executeQuery();while (resultSet.next()) {user = new User();user.setId(resultSet.getInt("USERID"));user.setName(resultSet.getString("USERNAME"));user.setPassword(resultSet.getString("PASSWORD"));user.setFaiCount(resultSet.getInt("FAICOUNT"));try {user.setLastLoginDate(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(resultSet.getString("tdate")));} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{closeConnection();}return user;}public Date getDBCurrentTime(){String sql = "select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')as tdate from dual";Date date = null;try {resultSet = getPreparedStatement(sql).executeQuery();try {while (resultSet.next()) {date =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(resultSet.getString("tdate"));}} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{closeConnection();}return date;}public boolean updateFailureCountToUserInfo(int totalNumber,String username){String sql = "update User_Info set  FAICOUNT="+totalNumber +" where User_INFO.username =  '"+username+"'";System.out.println(sql);try {int i = getPreparedStatement(sql).executeUpdate();connection.commit();return i>0;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}finally{closeConnection();}}public boolean updateLastLoginTimeToUserInfo(Date lastLogindate,String username){String sql = "update USER_INFO set LASTLOGINTIME = to_date('"+new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(lastLogindate)+"','yyyy-MM-dd hh:mi:ss') where username = '"+username+"'";System.out.println(sql);try {int i = getPreparedStatement(sql).executeUpdate();return i>0;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}finally{closeConnection();}}private void closeConnection(){if(resultSet!=null){try {resultSet.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(preparedStatement!=null){try {preparedStatement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try {if(connection!=null && !connection.isClosed()){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

?

?

?

struts.xml配置文件如下:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "//struts.apache.org/dtds/struts-2.0.dtd" ><struts><!-- 配置Ajax求的包; --><package name="pack.java.struts2" extends="json-default">        <action name="ajaxRequest" name="ajaxSuccess">                   <param name="root">result</param>           </result>        <result type="dispatcher" name="success">/main.jsp</result>          <result type="dispatcher" name="failure">/login.jsp</result>        </action>    </package></struts>

?

?

web.xml配置文件如下:建立strtus2的过滤器。

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>Struts2AjaxDemo</display-name>    <filter>  <filter-name>struts2</filter-name>  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  </filter>    <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping>  <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>*.action</url-pattern>  </filter-mapping>    <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>login.jsp</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list></web-app>

?

?

建立UserAction文件.与Jquery中的Ajax交互..以及判断用户名和密码, 登陆的方法.等等..

具体代码如下:

改Action中,还具备,输入三次错误.锁定2分钟..功能。

?

package pack.java.struts2;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import net.sf.json.JSONObject;import pack.java.service.UserService;import pack.java.service.UserServiceImpl;import pack.java.vo.User;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;/** *  * @author ZhouHaiTao; * */public class UserAction extends ActionSupport {private static final long serialVersionUID = 5088292503353625986L;private UserService userService = new UserServiceImpl();private static final int FAILOGINCOUNT = 3;private String result;public String getResult() {return result;}public void setResult(String result) {this.result = result;}//注入User VO实体;private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}/** * 检查用户名是否存在! * @return */public String checkUserName(){User userInfo = userService.checkUserNameExists(user.getName());//判断用户名是否存在!if(userInfo!=null){result ="User Name okay!";}else{result = "User Name Not exists!";}return "ajaxSuccess";}/** * User Login  * @return string; */@SuppressWarnings("unchecked")public String userLogin(){Map map =new HashMap();map.put("name", user.getName());map.put("password", user.getPassword());boolean bol = true;//把map转成json对象;JSONObject object =  JSONObject.fromObject(map);result = object.toString();User userObj = userService.checkUserNameExists(user.getName());if(userObj!=null){System.out.println("最后登陆日期:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(userObj.getLastLoginDate()));System.out.println("当前数据日期:"+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(userService.getDBCurrentTime()));long mi = countTime(userObj.getLastLoginDate(),userService.getDBCurrentTime());System.out.println("时间差分钟:"+mi);long i = (2-mi);if(i>0){ActionContext.getContext().put("timeInfo", "你还需要等待:"+i+"分钟,才能登陆!");}if(userObj.getFaiCount()>=2 && mi<2){System.out.println("登陆失败!");ActionContext.getContext().put("invaliPassworError", "对不起,你的账户已被系统锁定2分钟,请稍后登陆!");return "failure";}else{if(mi>=2 && userObj.getFaiCount()>=3){System.out.println("统一都恢复成0!");if(userService.updateFailureCountToUserInfo(0, user.getName())){System.out.println("失败总数恢复为0,成功!");}else{System.out.println("失败总数恢复为0,失败!");}userService.updateLastLoginTimeToUserInfo(userService.getDBCurrentTime(),user.getName());bol = false;}}if(user.getPassword().equals(userObj.getPassword())&& user.getFaiCount()< FAILOGINCOUNT){ActionContext.getContext().getSession().put("user", userObj);result ="User Name okay!";System.out.println("登陆成功!");userService.updateFailureCountToUserInfo(0, user.getName());if(userService.updateLastLoginTimeToUserInfo(userService.getDBCurrentTime(),user.getName())){System.out.println("成功修改数据库最后登陆时间!");}else{System.out.println("失败修改数据库最后登陆时间!");}return "success";}else{System.out.println("登陆失败!");if(bol){userService.updateFailureCountToUserInfo(userObj.getFaiCount()+1, user.getName());ActionContext.getContext().put("invaliPassworError", "Invalid login or password!");}return "failure";}}else{ActionContext.getContext().put("invaliPassworError", "Invalid login or password!");return "failure";}}    /**     * 计算时间差     *      * @param begin       * @param end       * @return     */public static long countTime(Date begin,Date end){int hour = 0;int minute = 0;long total_minute = 0;StringBuffer sb = new StringBuffer();Date begin_date = begin;Date end_date = end;total_minute = (end_date.getTime() - begin_date.getTime())/(1000*60);hour = (int) total_minute/60;minute = (int) total_minute%60;//sb.append("工作时间为:").append(hour).append("小时").append(minute).append("分钟");return minute;}public static void main(String[] args) {System.out.println(countTime(new Date(),new Date()));}}

?

?

JSP页面Login登陆的代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><script type="text/javascript" src="scripts/jquery-1.2.6.js"></script><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Ajax效果</title><script type="text/javascript">    //检查用户名是否存在!function onCheckUserName(){var url = "ajaxRequest!checkUserName.action"; var params = { "user.name":jQuery("#name").attr("value"), "user.password":jQuery("#password").attr("value") };    jQuery.getJSON(url,params,function callback(data){ jQuery("#divUserName").css("color","red");    jQuery("#divUserName").html(data);         });      }</script></head><body><center><form method="post" action="ajaxRequest!userLogin.action" name="myform" id="myform"><table cellpadding="1" width="40%" cellspacing="0" bordercolor="00FFFF"style="text-align: left" border="1px"><tr><td width="10%">用户名:</td><td width="10%"><input id="name" name="user.name" type="text" onkeyup="onCheckUserName()"></td><td width="20%"><div id="divUserName" style="height: 10px">请输入用户名!</div></td></tr><tr><td width="10%">密码:</td><td width="10%"><input id="password" name="user.password"type="password"></td><td>请输入密码![密码必须大于6位]</td></tr><tr><td colspan="2" align="center"><input type="reset" value="重置">    <input type="submit" value="登陆"></td></tr><tr><Td colspan="3"><div id="loginResultId" style="color:red">${invaliPassworError==null?"":invaliPassworError}</div></Td></tr><tr><Td colspan="3"><div id="timeInfo" style="color:red">${timeInfo==null?"":timeInfo}</div></Td></tr></table><div id="result"></div></form></center></body></html>

?

1 楼 kuzhifeng 2012-09-07 求数据库表的设计

读书人网 >JavaScript

热点推荐