- 浏览: 1990067 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- JavaEE (122)
- Oracle数据库 (29)
- JavaScript (37)
- SAP (5)
- MySql数据库 (7)
- JavaSE (4)
- Ajax (1)
- jQuery (13)
- SSH框架 (36)
- Web Service (10)
- JSF框架 (2)
- JBPM (0)
- ireport报表 (2)
- ibatis (5)
- Hibernate (31)
- JSP (11)
- Tomcat 服务器 (20)
- Other (19)
- JavaWeb (4)
- Maven (11)
- OSWorkFlow (10)
- HTML (13)
- Exception汇总 (7)
- SVN (2)
- 笑话 (1)
- JSTL (1)
- WebSphere Message Broker (13)
- ANT命令 (3)
- Liunx (12)
- Struts2 (26)
- Eclipse (6)
- DOS (3)
- Flex (11)
- WebSphere (1)
- 开发常用工具 (3)
- Junit (2)
- EJB (4)
- Struts1.2 (2)
- Jboss (1)
- Android (2)
- Java框架源码解析 (1)
- Spring (4)
- MyBatis (6)
- SpringMVC (4)
- Jetty (2)
- 数据库表设计 (1)
- SSO (4)
最新评论
-
贝塔ZQ:
也可以试试PageOffice插件,觉得更简单点
Jxl操作Excel设置背景、字体颜色、对齐方式、列的宽度 -
jia1208:
...
Could not publish server configuration for Tomcat v6.0 Server at localhost. -
u011274527:
赞
java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误 -
旭旭小牛啦:
怎么没哟了,继续赛
jQuery 选择器 -
wzw3919:
100行会报空指针
Java 解压缩zip文件
在搭建之前.. 首先,需要准备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="重置"> <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>
- Struts2AjaxDemo.rar (5.7 MB)
- 下载次数: 630
发表评论
-
java.lang.NoSuchMethodException: No such accessible method: addForwardConfig() o
2012-06-07 00:07 3378经常有人在配置Struts1.2的struts-conf ... -
Unable to load configuration. - action - file:/C:/Documents%20and%
2011-12-12 21:34 8035Unable to load configuration. - ... -
Struts2+jQuery+Ajax
2011-11-29 11:05 2926一个简单的Json实例,采用Struts2 + jQuery1 ... -
Struts2 使用”#“获取数据 和不使用“#”号的区别。
2011-09-29 11:43 1221最近使用struts2 做项目时, 如果在后台可以使用两 ... -
struts2 标签 s:optiontransferselect左右下拉列表的使用。
2011-09-24 01:08 1930最近做项目,需要用到struts2中的标签, 自己便研 ... -
Struts2 标签出现'dojo' 未定义 解决方案
2011-09-23 23:09 1366我在做项目用到了struts2中的 s:optiont ... -
struts2几种result type探究
2011-09-22 02:18 1308可以在struts2-core-{version}.jar ... -
Struts2 自定义拦截器,怎么实现先于 action 执行
2011-09-08 00:31 1418在Action前用拦截器是直接return act.invok ... -
struts2自定义拦截器,模拟登陆权限验证
2011-09-08 00:27 2261struts2自定义拦截器一——模拟登陆权限验证 1、h ... -
JSP的Filter对struts2 中的 action拦截不起作用的解决方案.
2011-09-08 00:22 2191好像在web.xml配置filter只能实现对jsp的拦截 ... -
从数据库中获取国际化资源文件的key,然后通过Struts2的标签显示
2011-09-04 13:34 3331首先在mySql数据库中建 ... -
Parse Error at line 2 column 15: Document is invalid: no grammar found.
2011-09-03 00:09 2210今天部署把项目部署到tomcat上面时,发现了一个错误,. ... -
java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputS
2011-08-29 01:02 4042java.lang.NoClassDefFoundError: ... -
java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.mu
2011-08-29 00:32 1414最近做文件上传的功能时,报如下错误..是因为少了一个jar包的 ... -
Struts2 标记判断List集合和Map集合元素的大小
2011-08-25 20:34 4251比如判断一个list集合中的元素等于或小于0, <!- ... -
Struts2 <s:if> 标签的使用
2011-08-25 16:31 1071标签用法如下: test中是用来,放表达式,不能嵌套EL表达 ... -
Struts2 Caused by: java.lang.IllegalArgumentException: argument type mismatch
2011-08-15 09:27 8850前台页面文本框 name 绑定的属性,与后台属性不一致. ... -
Struts2 一些常见的标签的使用
2011-08-10 00:52 1273直接贴后台代码: package com.struts2.a ... -
java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lan
2011-07-16 18:47 5532java.lang.NoSuchMethodError: ... -
Struts2通过使用ActionContext类获取request和response对象
2011-07-16 18:23 2850使用ActionContext类这种方法比较简单,我们可以通过 ...
相关推荐
在"Struts2+JQuery+Json实例"中,我们探讨的是如何结合这三个技术来创建动态、响应式的Web应用。以下是这个实例中的关键知识点: 1. **获取JS值**:在JQuery中,我们可以使用`val()`函数来获取表单元素的值,如...
结合实例,"struts2+jQuery+json 实例"很可能是创建了一个Web应用,用户在前端通过jQuery发送AJAX请求,这些请求可能包含表单数据或者对页面的某些操作。后端Struts2框架接收到请求后,会调用相应的Action执行业务...
在项目中,`Struts2JQueryJson`文件夹可能包含了HTML页面、JavaScript脚本、Struts2相关的Action类、以及可能的 strut2 配置文件等资源。 总结来说,这个实例通过结合Struts2的后端控制、jQuery的前端交互和JSON的...
Struts、jQuery、Ajax以及JSON是Web开发中的四个关键技术,它们在构建动态、交互式的Web应用程序中发挥着重要作用。下面将分别介绍这些技术的核心概念及其在实际应用中的结合使用。 **Struts框架**:Struts是Apache...
在Struts2框架下,我们可以使用Jquery的Ajax方法向服务器发送请求,获取JSON或XML数据,然后动态更新页面的部分内容。 在"06-mvc之struts2.ppt"中,可能涵盖了以下内容: 1. Struts2框架的基本概念和架构 2. 如何...
在这个实例中,Flexigrid与Struts2、JSON和jQuery进行了集成,构建了一个功能丰富的Web应用。 Struts2是Apache软件基金会的一个开源MVC框架,用于构建Java Web应用程序。它提供了强大的动作调度、拦截器机制以及...
标题 "struts2+spring+hibernate+jquery+dwr+json" 描述了一个集成的Web应用程序开发框架,其中包含了多个关键技术和库。这个框架旨在提高开发效率,提供灵活的数据管理,以及用户友好的前端交互。 1. Struts2:...
这个压缩包中的资源,"SSH+jQuery+json 实现的Ajax操作,绝对精华,代码简练清晰,绝对能看明白",显然提供了一个使用这些技术实现Ajax级联操作的实例。下面将详细介绍这些技术及其在Ajax操作中的应用。 **SSH ...
Struts2、Hibernate3、JQuery、Ajax以及Json是Web开发中的重要技术栈,它们各自在Web应用程序中扮演着不同的角色。在这个“三级联动”项目中,这些技术被巧妙地结合在一起,实现了数据的动态交互和展示。 Struts2是...
最新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整合实例(已上传) 1、JSON0.34使用的是struts2附带的struts2-json-plugin-2.1.8.1.jar 2、db是mysql,名字为test,用户名root,密码空 3、...
例如,可以使用jQuery的Ajax方法,配合Struts2的JSON插件,实现前后台的数据交换,从而创建响应式、无刷新的界面。 **Spring与Struts2的整合** Spring可以作为Struts2的依赖注入容器,为Struts2 Action提供依赖对象...
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用户登录验证"项目是Web开发中的典型应用场景,展示了如何利用这些技术实现前后端交互和动态页面更新,为初学者理解Web开发的基本流程和原理提供了很好的实例。
总的来说,这个压缩包提供了一个全面的学习资源,帮助开发者深入理解并熟练运用JSON数据格式、Struts2框架和jQuery库。通过这些实例,你可以提高Web开发技能,尤其是处理动态交互和数据交换的能力。在实践中不断探索...
综上所述,这个“Struts2+Hibernate项目实例”展示了如何利用现代Java Web技术栈进行数据库操作和数据展示,涉及到了MVC架构、ORM映射、前端UI设计以及JSON数据交换等多个关键知识点,对于学习和理解Java Web开发...
本实例"Struts2_jquery_json1.0.zip"显然演示了如何在Struts2框架中利用jQuery和JSON进行数据交换。Struts2的JSON插件允许我们轻松地将Java对象转换为JSON格式,以便在客户端使用JavaScript处理。jQuery则负责在前端...
在这个实例中,“整合jquery+json+struts2异步提交”是一个典型的前端与后端交互的示例,利用了jQuery的Ajax功能和Struts2框架处理JSON数据。下面我们将详细探讨这些技术及其相互配合的工作原理。 **jQuery** 是一...
在本实例中,我们将探讨如何利用Struts2、jQuery、Ajax和JSON技术实现一个用户登录功能。 首先,我们需要理解Ajax的核心概念,即在不刷新整个页面的情况下,向服务器发送异步请求并获取数据。这极大地提升了用户...