- 浏览: 650312 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
nehaoww:
754588141@qq.com,源码可以给一份吗
Struts/JSP可上传、预览服务器端文件(图片、文件、Flash、多媒体)文件组件 -
zzd_md:
把XmlTreeLoader.js 这个文件的路径改一下就好了 ...
ExtJs 实现的后台管理框架 -
llixinrui_strive:
EXT之form.load(转) -
liangzhang0929:
部门管理和用户管理的url怎么显示#,没法打开dept_lis ...
Extjs3.x Struts2 -Json-plugin学习实例 -首页框架代码 05 -
datouren:
您好想问你一下 为什么只显示根节点 其它节点不显示 目前是在一 ...
ExtJs加载本地txt格式的数据
三、BaseAction代码
package com.wjt276.co.web.actions; import com.opensymphony.xwork2.ActionSupport; /** * 父类Action * 可以在构造方法中获取所有Action都需要的参数 * @author wjt276 * */ @SuppressWarnings("serial") public class BaseAction extends ActionSupport { //---------------以下为生成图形验证码的代码---------------------------------------------------------------------------------------------------------------- /** * 用于接受用户从前台输入的验证码,以便进行验证 */ private String validateCode; public String getValidateCode() { return validateCode; } public void setValidateCode(String validateCode) { this.validateCode = validateCode; } protected void validateImgCode(String validateCode) throws Exception{ if(!validateCode.equals(this.getValidateCode().trim())){ throw new Exception("验证码不正确,请重新输入"); } } }
四、AbstractManager代码
package com.wjt276.co.managers.impl; import java.util.List; import org.hibernate.Query; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.wjt276.co.PagerModel; import com.wjt276.co.SystemException; /** * 分页查询类 * @author wjt276 * */ public class AbstractManager extends HibernateDaoSupport{ /** * 分页查询-根据HQL语句进行分页查询 * @param hql HQL语句 * @param offset 从第几条记录开始查询 * @param pageSize 每页显示多少条记录 * @return 返回包含总记录数、以及结果集 */ public PagerModel searchPaginated(String hql, int offset, int pageSize){ return this.searchPaginated(hql, null, offset, pageSize); } /** * 分页查询-根据HQL语句进行分页查询 * @param hql HQL语句 * @param param HQL语句带的一个参数值 * @param offset 从第几条记录开始查询 * @param pageSize 每页显示多少条记录 * @return 返回包含总记录数、以及结果集 */ public PagerModel searchPaginated(String hql, Object param, int offset, int pageSize){ return this.searchPaginated(hql, new Object[]{param}, offset, pageSize); } /** * 分页查询-根据HQL语句进行分页查询 * @param hql HQL语句 * @param params HQL语句带的多个参数值 * @param offset 从第几条记录开始查询 * @param pageSize 每页显示多少条记录 * @return 返回包含总记录数、以及结果集 */ public PagerModel searchPaginated(String hql, Object[] params, int offset, int pageSize){ //1、获取记录总数 String countHql = this.getCountQuery(hql); Query query = this.getSession().createQuery(countHql); if(params != null && params.length > 0){ for(int i = 0; i < params.length; i++){ query.setParameter(i, params[i]); } } int total = ((Long)query.uniqueResult()).intValue(); //获取查询的数据 query =this.getSession().createQuery(hql); if(params != null && params.length > 0){ for(int i = 0; i < params.length; i++){ query.setParameter(i, params[i]); } } query.setFirstResult(offset); query.setMaxResults(pageSize); List datas = query.list(); PagerModel pm = new PagerModel(); pm.setTotal(total); pm.setDatas(datas); return pm; } /** * 根据HQL语句,抽取查询总记录数的HQL语句<br/> * 如:<br/> * from Orgnization o where o.parent is null<br/> * 经过转换,可以得到:<br/> * select count(*) from Orgnization o where o.parent is null<br/> * @param hql * @return */ private String getCountQuery(String hql){ int index = hql.indexOf("from"); if (index != -1){ return "select count(*) " + hql.substring(index); } throw new SystemException("无效的HQL语句"); } }
五、Key代码
package com.wjt276.co.web.actions; public class Key { /** * 保存已经生成的留言簿验证码,以便作为验证依据 * 注:这里是静态变量,目的是就可以保存这个值,只到新的验证码出现替换值 */ public static String guestbookValidateCode; public static String validateCode; public static final int DEFAULT_VALIDATEIMG_WIDTH = 80; public static final int DEFAULT_VALIDATEIMG_HEIGHT = 20; public static final int DEFAULT_VALIDATEIMG_FONT_SIZE = 16; public static final int DEFAULT_VALIDATEIMG_CODE_LENGTH = 4; public static final String DEFAULT_VALIDATEIMG_CONTENT_TYPE = "image/jpeg"; }
六、测试的ACTION
package com.wjt276.co.web.actions; @SuppressWarnings("serial") public class TestAction extends BaseAction { @Override public String execute() throws Exception { return SUCCESS; } public String add() throws Exception{ this.validateImgCode(Key.validateCode); return SUCCESS; } }
七、配置好SPRINGR 的BEAN
<context:annotation-config /> <!--<context:component-scan base-package="com.wjt276" />--> <!--<aop:aspectj-autoproxy/>--> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan"> <list> <value>com.wjt276.co.model</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <!-- 1、配置一个事务管理器txManager 配置此事务管理器时,需要提供一个已经配置的SessionFactory--> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 2、配置advice(建议,建议Spring需要进行事务管理),提提供一个事务管理器,和事务管理器的一些选项 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="deploy*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 3、xml使用Spring事务管理需要在切面配置标签中完成 a、首先需要定义切入点pointcut:说明哪些地方需要进行事务管理 b、再使用advisor说明在什么的pointcut下,使用什么的事务管理。就可以了。 --> <aop:config> <aop:pointcut id="saveServiceOperation" expression="execution(* com.wjt276.co.managers..*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="saveServiceOperation"/> </aop:config> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="validateImageManager" class="com.wjt276.co.managers.impl.ValidateImageManagerImpl"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="validateImgAction" class="com.wjt276.co.web.actions.ValidateImgAction" scope="prototype"> <property name="validateImageManager" ref="validateImageManager"/> </bean> <bean id="testAction" class="com.wjt276.co.web.actions.TestAction" scope="prototype"> </bean>
八、jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/code
jdbc.username=root
jdbc.password=root
九 Struts2配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <constant name="struts.i18n.encoding" value="GBK"></constant> <package name="base" namespace="/" extends="struts-default"> <global-results> <result name="exceptionUrl">/common/exception.jsp</result> <result name="add_success">/common/pub_add_success.jsp</result> <result name="delete_success">/common/pub_delete_success.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="exceptionUrl" exception="java.lang.Exception"/> </global-exception-mappings> </package> <package name="front" namespace="/" extends="base"> <action name="validateImg" class="com.wjt276.co.web.actions.ValidateImgAction"> <result type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">inputStream</param> </result> </action> <action name="test" class="com.wjt276.co.web.actions.TestAction"> <result>/MyJsp.jsp</result> <exception-mapping result="success" exception="java.lang.Exception"/> </action> </package>
最后:JSP测试代码
<body> This is my JSP page. <br> <script type="text/javascript"> function changeValidateCode(obj) { //获取当前的时间作为参数,无具体意义 var timenow = new Date().getTime(); //每次请求需要一个不同的参数,否则可能会返回同样的验证码 //这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。 obj.src="validateImg.action?d="+timenow; } </script> <form action="test!add" method="get"> <input name="validateCode"/><img src="validateImg.action" onclick="changeValidateCode(this)" style="cursor: hand;" alt="点击刷新验证码"/> <input type="submit"> </form> <s:property value="exception.message"/> </body>
发表评论
-
java中switch case用法
2010-11-08 11:40 3867关于java中switch使用的一些说明 switc ... -
计算两个日期之间的天数
2010-08-10 16:14 1949//计算两个日期之间的天数 public static ... -
Struts2 生成图形验证码及进行验证码验证-修改后代码(一)
2010-07-28 09:37 3078验证码代码取之网络,但是网络上代码都不完整,因此修改后发上来 ... -
Java位操作
2010-06-12 10:39 1119二进制负数以它正值的补码形式表达 补码:反码+1等于补码 ... -
Thread.Sleep(0)
2010-04-13 14:03 4286Thread.Sleep(0) 表示挂起0毫秒,你可能觉得没作 ... -
System.currentTimeMillis()
2010-04-13 14:00 6134首先System.currentTimeMillis()产生一 ... -
Random
2010-04-13 13:58 1659一、Random 1、创建Random ... -
排序口诀
2010-04-13 11:47 1320马老师的口诀: 冒择路(入)兮(希尔)快归堆 冒泡 选择 ... -
将JAVA编译为EXE的几种方法
2009-12-23 12:26 1088将Java应用程序本地编译为EXE的几种方法(建议使用JOVE ... -
一个Java程序员应该掌握的10项技能
2009-11-01 12:10 10851、语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报 ... -
Jdbc连接各种数据库代码方法大全
2009-11-01 12:08 12661、Oracle8/8i/9i数据库(thin模式) Cla ... -
Java四舍五入保留两位小数
2009-11-01 12:05 10107public static void main(String[ ... -
Java 将字符串转换为日期
2009-08-24 07:04 1756try { String strForm ... -
for each循环
2009-08-24 06:58 1680for each循环 是jdk5.0新增加的一个循环结构, ... -
java 根据IP获取客户端Mac地址
2009-08-18 22:48 6944需要对用户的 ip 和 mac 地址进行验证,这里用到获取客户 ...
相关推荐
在这个特定的场景中,我们讨论的是如何在Struts2中创建一个能够生成中文验证码的Action。 验证码的主要目的是防止自动机器人或恶意攻击,通过向用户提供一组随机字符(通常是数字和/或字母)来验证他们是否是真实的...
Struts2提供了一些内置的支持来帮助开发者生成和验证验证码,以增强网站的安全性。 验证码的种类多样,包括图像验证码、音频验证码、数学问题验证码等。在Struts2中,我们可以使用插件或自定义拦截器来实现这些功能...
5. **图片生成**:验证码的图像通常是动态生成的,这通常涉及到一些图形库,如Java的`java.awt.image.BufferedImage`和`java.awt.Color`等,用于创建随机颜色和形状的文本。 6. **安全考虑**:为了提高安全性,...
在Struts2的Action中,取出Session中的验证码与用户输入的进行比较,如果匹配则通过验证,否则返回错误信息。 ```java String userCaptcha = actionRequest.getParameter("captcha"); String sessionCaptcha = ...
验证码的核心目的是通过生成随机的图形或字符让用户输入来验证其是否为真实用户。通常包括以下几个步骤: 1. **生成随机字符串**:作为验证码的基础。 2. **渲染成图像**:将字符串转化为图像形式展示给用户。 3. **...
总的来说,通过Eclipse、Struts和Hibernate的结合,我们可以构建出一个完整的、安全的用户登录系统,并辅以图形验证码增强安全性。这个视频教程将会详细演示以上所有步骤,帮助开发者快速掌握这些核心技术的应用。
总结来说,Struts2实现图片验证码主要涉及生成随机字符串、绘制图片、配置Action、定义结果类型以及处理用户验证。这个过程需要结合Java图形编程、HTTP响应处理和会话管理等多个方面的知识。通过实践,你可以更好地...
Struts2验证码是一种用于验证用户身份的安全机制,它在Web应用程序中广泛使用,防止恶意自动化的机器人或爬虫进行操作,比如防止批量注册、刷票等。本示例提供了使用Struts2框架实现验证码功能的完整代码,全部采用...
在Struts2中实现验证码功能,通常涉及到生成随机字符串、显示图像以及验证用户输入是否与生成的验证码匹配。 本压缩包"struts2做的验证码(区分数字和字母).rar"可能包含了一个实现了数字和字母混合的验证码生成器...
"通过Struts2返回验证码文件"这一主题主要涉及如何利用Struts2来生成并返回一个动态的、用于验证用户输入的图形验证码。以下是对这个知识点的详细阐述: 首先,验证码是一种安全机制,它要求用户输入在图像上显示的...
在Struts2框架中,验证码通常用于验证用户输入的安全性,防止自动化的恶意攻击,如机器人脚本或垃圾邮件发送者。验证码是一种图形图像,其中包含随机生成的文字或数字,用户需要正确输入这些内容才能完成特定操作,...
提交表单后,服务器端的action类(可能是一个Servlet或Struts Action)会接收到请求,从会话中取出预存的验证码字符串,与用户输入的验证码进行比对,判断是否匹配,从而完成验证。 验证码的验证流程通常如下: 1. ...
在这个项目中,开发者使用Eclipse、Struts和Hibernate来创建一个图形验证码功能,以增强用户登录的安全性。 首先,`LoginAction.java`是Struts框架中的Action类,它是业务逻辑处理的核心。这个文件通常会包含处理...
验证码图片生成器是一种用于网络安全验证的技术,主要用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。这个Java源码实现的验证码生成器具有易用性且适应性强,可以根据需求调整验证码的类型...
4. **Session存储**:为了在用户提交验证码后进行验证,我们需要将生成的验证码存储在用户的Session中。Session是服务器端的一种数据存储机制,用于在用户会话期间保持数据,防止跨请求的数据篡改。 5. **表单提交*...
本实例将探讨如何使用简单的Servlet生成加法验证码,并将其整合到Struts2、SSH2(Spring、Struts2、Hibernate)和Mybatis等流行框架中。这个实践教程将帮助开发者了解验证码的基本实现以及与主流框架的集成。 首先...
1. **Struts2拦截器**:自定义拦截器实现验证码的生成和验证。 2. **Action类**:处理登录请求的业务逻辑,包括校验验证码。 3. **Result类型**:可能使用了Struts2的FreeMarker模板引擎来渲染验证码图片。 4. **...
4. **验证码验证**: - 用户输入验证码后提交表单。 - 在后端获取`HttpSession`中的验证码并与用户输入进行比较。 #### 四、代码分析 - **验证图片生成**: ```java package cn.com.lough.struts.action; ...
用户提交表单时,Struts2会调用预先配置的验证码验证拦截器,比较session中的验证码值与用户输入,若不匹配则抛出异常或返回错误信息。 ### 其他相关知识点 1. **.jar包**: 提供的.jar包可能包含了验证码生成所...
- **知识点**: 介绍了如何创建自定义标签来实现图形验证码功能。 - **核心内容**: - 自定义标签需要通过实现Tag接口来创建。 - 可以通过配置文件将自定义标签集成到项目中。 通过以上内容的学习,我们可以深入...