`

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语句如下:

 

 

 

后台DAO连接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 block
				e.printStackTrace();
				System.out.println("连接失败!");
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("驱动没有找到!");
		}
		return connection;
	}
	
	private PreparedStatement getPreparedStatement(String sql){
		getConnection();
		try {
			preparedStatement =  connection.prepareStatement(sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.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 block
					e.printStackTrace();
				}
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.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 block
				e.printStackTrace();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.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 block
			e.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 block
			e.printStackTrace();
			return false;
		}finally{
			closeConnection();
		}
	}
	
	
	private void closeConnection(){
		if(resultSet!=null){
			try {
				resultSet.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(preparedStatement!=null){
			try {
				preparedStatement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		try {
			if(connection!=null && !connection.isClosed()){
				try {
					connection.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.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" class="pack.java.struts2.UserAction">
       		<result type="json" 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="重置">&nbsp;&nbsp;&nbsp;&nbsp;
		<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  
求数据库表的设计

相关推荐

    Struts2+JQuery+Json实例

    在"Struts2+JQuery+Json实例"中,我们探讨的是如何结合这三个技术来创建动态、响应式的Web应用。以下是这个实例中的关键知识点: 1. **获取JS值**:在JQuery中,我们可以使用`val()`函数来获取表单元素的值,如...

    struts2+jQuery+json 实例

    结合实例,"struts2+jQuery+json 实例"很可能是创建了一个Web应用,用户在前端通过jQuery发送AJAX请求,这些请求可能包含表单数据或者对页面的某些操作。后端Struts2框架接收到请求后,会调用相应的Action执行业务...

    struts2+jQuery+json 实例 测试过了 运行成功 从别人那偷来的

    在项目中,`Struts2JQueryJson`文件夹可能包含了HTML页面、JavaScript脚本、Struts2相关的Action类、以及可能的 strut2 配置文件等资源。 总结来说,这个实例通过结合Struts2的后端控制、jQuery的前端交互和JSON的...

    Struts+Jquery+Ajax+Json应用实例

    Struts、jQuery、Ajax以及JSON是Web开发中的四个关键技术,它们在构建动态、交互式的Web应用程序中发挥着重要作用。下面将分别介绍这些技术的核心概念及其在实际应用中的结合使用。 **Struts框架**:Struts是Apache...

    Struts2+Jquery+Ajax

    在Struts2框架下,我们可以使用Jquery的Ajax方法向服务器发送请求,获取JSON或XML数据,然后动态更新页面的部分内容。 在"06-mvc之struts2.ppt"中,可能涵盖了以下内容: 1. Struts2框架的基本概念和架构 2. 如何...

    flexigrid+struts2+json+jquery实例

    在这个实例中,Flexigrid与Struts2、JSON和jQuery进行了集成,构建了一个功能丰富的Web应用。 Struts2是Apache软件基金会的一个开源MVC框架,用于构建Java Web应用程序。它提供了强大的动作调度、拦截器机制以及...

    struts2+spring+hibernate+jquery+dwr+json

    标题 "struts2+spring+hibernate+jquery+dwr+json" 描述了一个集成的Web应用程序开发框架,其中包含了多个关键技术和库。这个框架旨在提高开发效率,提供灵活的数据管理,以及用户友好的前端交互。 1. Struts2:...

    SSH+jQuery+json 实现的Ajax操作,绝对精华,代码简练清晰,绝对能看明白

    这个压缩包中的资源,"SSH+jQuery+json 实现的Ajax操作,绝对精华,代码简练清晰,绝对能看明白",显然提供了一个使用这些技术实现Ajax级联操作的实例。下面将详细介绍这些技术及其在Ajax操作中的应用。 **SSH ...

    Struts2+hibernate3+JQuery+ajax+json三级联动

    Struts2、Hibernate3、JQuery、Ajax以及Json是Web开发中的重要技术栈,它们各自在Web应用程序中扮演着不同的角色。在这个“三级联动”项目中,这些技术被巧妙地结合在一起,实现了数据的动态交互和展示。 Struts2是...

    最新Struts2+jq+ajax+json 学会总要4步‵‵超级简单,里面包含实例

    最新Struts2.3.8 + jquery + ajax + json 学会struts+jq+ajax+json只要4步‵‵经过作者的总结超级简单 1. 导入struts2 及json包 asm-3.3.jar asm-commons-3.3.jar asm-tree-3.3.jar commons-fileupload-1.2.2.jar...

    JQuery1.4.2+Struts2.1.8+JSON0.34+Spring2.5.6+Hibernate3.5+XFire1.2.6整合实例

    JQuery1.4.2+Struts2.1.8+JSON0.34+Spring2.5.6+Hibernate3.5+XFire1.2.6整合实例(已上传) 1、JSON0.34使用的是struts2附带的struts2-json-plugin-2.1.8.1.jar 2、db是mysql,名字为test,用户名root,密码空 3、...

    struts2+jquery实例

    例如,可以使用jQuery的Ajax方法,配合Struts2的JSON插件,实现前后台的数据交换,从而创建响应式、无刷新的界面。 **Spring与Struts2的整合** Spring可以作为Struts2的依赖注入容器,为Struts2 Action提供依赖对象...

    JQuery+Struts2+JSON0+Spring+Hibernat+XFire整合实例

    1、JSON0.34使用的是struts2附带的struts2-json-plugin-2.1.8.1.jar 2、db是mysql,名字为test,用户名root,密码空 3、com.morningstar.utility.WSUtility为调用WebService的客户端代码,在调用这个WebService返回...

    struts2+easyUI+ajax+json用户登验证

    总结来说,"struts2+easyUI+ajax+json用户登录验证"项目是Web开发中的典型应用场景,展示了如何利用这些技术实现前后端交互和动态页面更新,为初学者理解Web开发的基本流程和原理提供了很好的实例。

    json + struts2 + 80个JQuery 效果 个例子

    总的来说,这个压缩包提供了一个全面的学习资源,帮助开发者深入理解并熟练运用JSON数据格式、Struts2框架和jQuery库。通过这些实例,你可以提高Web开发技能,尤其是处理动态交互和数据交换的能力。在实践中不断探索...

    Struts2+hibernate项目实例

    综上所述,这个“Struts2+Hibernate项目实例”展示了如何利用现代Java Web技术栈进行数据库操作和数据展示,涉及到了MVC架构、ORM映射、前端UI设计以及JSON数据交换等多个关键知识点,对于学习和理解Java Web开发...

    Struts2_jquery_json1.0.zip_Struts2 heloword_struts2_struts2 jque

    本实例"Struts2_jquery_json1.0.zip"显然演示了如何在Struts2框架中利用jQuery和JSON进行数据交换。Struts2的JSON插件允许我们轻松地将Java对象转换为JSON格式,以便在客户端使用JavaScript处理。jQuery则负责在前端...

    整合jquery+json+struts2异步提交实例

    在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例,利用了jQuery的Ajax功能和Struts2框架处理JSON数据。下面我们将详细探讨这些技术及其相互配合的工作原理。 **jQuery** 是一...

    struts2使用jquery整合ajax、json用户登录实例源码

    在本实例中,我们将探讨如何利用Struts2、jQuery、Ajax和JSON技术实现一个用户登录功能。 首先,我们需要理解Ajax的核心概念,即在不刷新整个页面的情况下,向服务器发送异步请求并获取数据。这极大地提升了用户...

Global site tag (gtag.js) - Google Analytics