- 浏览: 348292 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (139)
- Java (49)
- C# (23)
- 软件实施 (1)
- Mysql (8)
- Struts2&1.x (15)
- DWR (0)
- Javascript (7)
- Effective Java (8)
- Oracle (0)
- SqlServer (1)
- Spring (6)
- 数据结构 (2)
- 设计模式 (0)
- Hibernate (6)
- c++ (2)
- Qt (1)
- 瞎侃几句 (5)
- Openbravo2.5实施记录 (3)
- 工作总结 (6)
- 软件测试 (3)
- css (1)
- Android (13)
- Object-c (0)
- Html5 (1)
- jshoper开源项目 (34)
- Windows Phone (1)
- activiti (2)
最新评论
-
yzlseu:
没有思考,就是抄的,垃圾文章
Activiti5用户手册---Message Event Definitions -
yy756127197:
<timeDuration>P10D</ti ...
Activiti5用户手册---Events---Timer Event Definitions -
云端帕帕:
Activiti5用户手册---Events---Timer Event Definitions -
raychiong:
lz现在哪里高就呢?
记录一次高德软件面试经历 -
sdywcd:
water_quite 写道sdywcd 写道water_qu ...
jshoper3x在线商城系统更新说明及未来开发计划
首先我要感谢下【北京-痕迹】同学在这个过程中的帮助,让我能及时完成这部分工作。也让产品有了一个新的版本,新的编码体验。接下来就说下基本情况和过程吧!
本分分为如下几个部分:
A, 原始版本介绍
B, 注解版本介绍
C, 注解过程疑难问题总结
开源地址:http://code.google.com/p/ostocy-jshop/ 完全开源
A, 原始版本是基于struts2+spring2.5+hibernate3+freemarker构件的。完全没有使用注解,所以在整个编码从dao到action的过程都需要在applicationContext.xml和多个struts.xml中配置(我为了区分业务,定义了多个struts2的配置文件)。
对于团队合作开发来说太多配置文件每次加入新方法都需要修改是很不好的,很容易造成svn的冲突。
B, 注解版本的构件也是基于原始版本的,但是使用了注解。具体使用了spring的注解给类进行依赖注入,用struts2的注解完成页面控制和拦截器设定。本来有想过想用spring mvc代替action层,但是这样会破坏了现有较为完好的逻辑和页面控制。所以放弃了。再者个人对spring mvc 不怎么熟悉。
这里来一个applicationContext.xml文件的内容吧然后我做一个小解释,大牛们可以略过了。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" default-autowire="byName"> <aop:aspectj-autoproxy> </aop:aspectj-autoproxy> <context:component-scan base-package="com.jshop" /> <context:annotation-config /> <context:property-placeholder location="classpath*:*.properties" /> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="initialPoolSize" value="${pool.initialPoolSize}" /> <property name="minPoolSize" value="${pool.minPoolSize}" /> <property name="maxPoolSize" value="${pool.maxPoolSize}" /> <property name="maxIdleTime" value="${pool.maxIdleTime}" /> <property name="acquireIncrement" value="${pool.acquireIncrement}" /> <property name="checkoutTimeout" value="${pool.checkoutTimeout}" /> <property name="maxIdleTimeExcessConnections" value="${pool.maxIdleTimeExcessConnections}" /> </bean> <!-- 邮箱服务器配置 --> <bean id="javamailsenderimpl" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="${email.host}"></property> <property name="defaultEncoding" value="${email.defaultEncoding}"></property> <property name="port" value="${email.port}"></property> <property name="username" value="${email.username}"></property> <property name="password" value="${email.password}"></property> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">${email.auth}</prop> <prop key="mail.smtp.timeout">${email.timeout}</prop> </props> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" destroy-method="close"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="mappingDirectoryLocations"> <list> <value>classpath:com/jshop/entity</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <aop:config> <aop:advisor pointcut="execution(* com.jshop.action.service.*Service.*(..))" advice-ref="txAdvice"/> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="query*" read-only="true"/> <tx:method name="find*" read-only="true"/> <tx:method name="load*" read-only="true"/> <tx:method name="*" rollback-for="Exception"/> </tx:attributes> </tx:advice> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- 配置异步线程执行器 --> <!-- 为异步线程执行器 进注入 --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 设置核心池子的大小 --> <property name="corePoolSize" value="10"></property> <!-- 设置最大池子的大小 --> <property name="maxPoolSize" value="30"></property> </bean> </beans>
从上到下,依次的内容解释为
<!--[if !supportLists]-->1, <!--[endif]-->default-autowire="byName" 要求spring按照name来依赖注入而不是类型。
<!--[if !supportLists]-->2, <!--[endif]-->context:component-scan base-package="com.jshop" 要求spring去扫描com.jshop下得所有类去解释注解。
<!--[if !supportLists]-->3, <!--[endif]-->context:property-placeholder location="classpath*:*.properties" 要求spring检索web-info下得文件,这里主要是给下面的数据库和邮箱信息提供了properties形式的保存而已。
<!--[if !supportLists]-->4, <!--[endif]--><value>classpath:com/jshop/entity</value> 要求spring去搜索这个目录下得所有数据库映射文件,以前都是一个一个写的,现在让他自己搜索去,省事点。
<!--[if !supportLists]-->5, <!--[endif]-->com.jshop.action.service.*Service.*(..))" advice-ref="txAdvice"/>这个就是事务管理了,在service进行事务的回滚
<!--[if !supportLists]-->6, <!--[endif]--> <bean id="taskExecutor" 是邮件发送,是用的线程发送。
接下来是摘录部分类的注解了
Dao层
@Repository("articleCategoryTDaoImpl") public class ArticleCategoryTDaoImpl extends HibernateDaoSupport implements ArticleCategoryTDao {
继承HibernateDaoSupport 就不用注入hibernateTemplate了
Service 层
@Service("articleCategoryTServiceImpl") @Scope("prototype") public class ArticleCategoryTServiceImpl implements ArticleCategoryTService { @Resource(name="articleCategoryTDaoImpl") private ArticleCategoryTDaoImpl articleCategoryTDaoImpl; public ArticleCategoryTDaoImpl getArticleCategoryTDaoImpl() { return articleCategoryTDaoImpl; }
Action层@ParentPackage("jshop")
@Controller("articleCategoryTAction") public class ArticleCategoryTAction extends ActionSupport { @Resource(name = "articleCategoryTServiceImpl") private ArticleCategoryTServiceImpl articleCategoryTServiceImpl;
接下来是struts.xml了
<!--开发状态 --> <constant name="struts.devMode" value="true" /> <!-- 配置文件重新加载 --> <constant name="struts.configuration.xml.reload" value="true" /> <!-- convention类从新加载 --> <constant name="struts.convention.classes.reload" value="true" /> <!-- 主题 --> <constant name="struts.ui.theme" value="simple" /> <constant name="struts.custom.i18n.resources" value="globalMessages" /> <constant name="struts.i18n.encodeing" value="UTF-8" /> <constant name="struts.convention.result.path" value="/" /> <package name="jshop" extends="json-default" > <interceptors> <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" /> <!-- 新增登录验证拦截器 --> <interceptor name="authoritylogin" class="com.jshop.action.interceptor.impl.AuthorityLogininterceptor"></interceptor> <!-- 定义全部变量拦截器!是否开启用户注册 --> <interceptor name="isusercanregister" class="com.jshop.action.interceptor.impl.MyIsusercanregisterInterceptor" /> <!-- 定义全局变量拦截器 是否允许用户注册多个商城信息 --> <interceptor name="canuserregistermoreshopinfo" class="com.jshop.action.interceptor.impl.CanuserregistermoreshopinfoInterceptor"></interceptor> <!-- 定义全局变量拦截器是否允许发送激活邮件 --> <interceptor name="issendactivatemail" class="com.jshop.action.interceptor.impl.Issendactivatemail" /> <interceptor-stack name="jshopdefaultStack"> <!-- 将登录验证拦截器加入默认的拦截器栈中 --> <interceptor-ref name="authoritylogin"> <param name="excludeMethods">adminlogin,uploadFiles,findAllCoupon,loginforAndroid,registerforAndroid</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="json"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="jshopdefaultStack" /> <global-results> <result name="login" type="redirect">/jshop/admin/jump.jsp</result> <result name="isusercanregister">/usercenter/warning/warningmsg.jsp</result> <result name="canuserregistermoreshopinfo">/jshop/admin/error/adminerror.jsp </result> </global-results> <!-- 验证码 --> <action name="randomchecknum" class="com.jshop.tools.RandomCheckNumAction"> <result type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">inputStream</param> </result> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package>
解释如下
1,<constant name="struts.convention.result.path" value="/" /> 这个很重要,告诉struts2我所有可以跳转的页面在项目根目录下。
2,<package name="jshop" extends="json-default" >这个package和action中的package要一致,因为这个影响到拦截器的作用域。
C,注解过程疑难问题总结
1, 注解默认的依赖注入对象是首字母小写的类名@Repository("articleCategoryTDaoImpl")对应的dao层的类就是ArticleCategoryTDaoImpl
2, Struts2配置文件中的拦截器作用域是和package有关的,所有action类都要统一package和struts.xml一致。
3, Struts2的注解中有namespace注解,这个注解是会影响页面跳转的,应该是url了的显示问题,我这里没有用。需要在研究下。
4, Struts2我继承了json-default,所以绝大部分action层的struts2的@Action没有显示的跳转页面,我都让前台的js做了页面控制。
发表评论
-
看了一些git教程后自己的总结
2014-04-24 12:45 1342平时在维护开源程序 ... -
android在布局中动态增加view时的层级控制
2014-03-24 14:40 34001问题:我们有时候希望动态的在android的布局中增加vi ... -
android 在配置文件中指定上级activity
2013-12-07 23:47 1453今天在看sdk doc时发现可以在配置文件中定义一个acti ... -
android button 点击事件
2013-12-06 11:49 1158<Button android:layou ... -
在eclipse 4.2中配置tomcat插件并修改jvm启动参数
2013-06-04 12:31 4750情况:今天在运行项目的时候发现需要一个比较大的内存才能够完成 ... -
搜寻了关于android推送资料后的一些思考
2013-04-11 22:23 1672其实我们要用推送服务的情况还挺多: 1,站内性 其实是可以 ... -
java中集合的父类collection的那些事
2013-04-10 18:02 01,collection是所有集合的父类 2,Li ... -
有那些设计模式,观察者模式是什么
2013-04-09 15:41 0设计模式还挺多的。可以分成如下几类 创建模式: ... -
写一个线程安全的单例模式
2013-04-08 23:30 1712谢谢 http://blog.sina.com.cn/s/b ... -
ThreadLocale是什么
2013-04-07 21:53 1106维持线程封闭性的一种更规范的方法是用ThreadLocal, ... -
如何保证线程安全 实现线程安全有那些方法
2013-04-07 20:45 73851,如何保证线程安全 不在线程之间共享状态变量 将状态 ... -
final搞不清的那些事
2013-04-07 19:44 929面试老是问final,finally ... -
java 拦截器和过滤器区别(转载)
2013-04-06 21:21 19611、拦截器是基于java的反射机制的,而过滤器是基于函数回 ... -
struts默认提供了那些拦截器
2013-04-06 21:07 1255如下是struts-default.xml中的部分内容,主 ... -
spring aop的实现原型模拟
2013-04-06 20:59 1023我们都知道spring的配置文件中可以进行声明式事务管理,其 ... -
jdk动态代理
2013-04-06 17:38 826以下的内容是从 http://www.blogjava.n ... -
org.springframework.transaction.CannotCreateTransactionException: Could not open
2013-01-11 11:51 11123一客户和我说,服务器报错了, org.springframe ... -
ubuntu12下安装jdk
2012-09-26 14:17 1366这几天 我 忽然想在ubuntu12下进行java web 的 ... -
TabHost整合Listview进行数据显示和单独准确绑定listview中的控件
2012-08-21 16:05 4806情况:最近ostocy-jshop这个开源项目,一直在进行pa ... -
ostocyjshop模板体系功能说明
2012-08-09 13:24 1462ostocy-jshop的模板体系介绍。 1,osto ...
相关推荐
《ostocy-jshop系统商品体系结构详解》 在IT行业中,构建一个高效、灵活的商品管理系统是电子商务平台的核心...同时,持续的系统优化和升级,使得ostocy-jshop系统在应对不断变化的电商环境时,保持了强大的竞争力。
- "sdywcd-ostocy-jshop-a816fd9"可能代表项目的版本号或者Git提交ID,这通常用于版本控制和代码管理。 - 这个文件可能是源代码包,包含了项目的各个模块和资源文件,如XML布局文件、Java或Kotlin源码、图片、样式...
ostocy-jshop的功能会陆续移植到jshoper3x中 欧斯塔克在线商城系统 基于java技术开发有如下特性: 1,使用spring + hibernate + struts2 + freemarker + jquery + css开发 2,在服务端有部分为android设备提供的...
代驾应用系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
线上书籍查阅系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
c语言教工工资管理系统
可保存图片,开源,绘制奇妙美丽的图片
# 基于Xilinx FPGA加速的面部评分系统 ## 项目简介 本项目是一个基于Xilinx FPGA加速的面部识别和评分系统,名为FaceScore。该项目在国际夏季学校中作为案例研究完成,旨在展示如何在嵌入式系统中高效部署深度学习应用。通过利用Xilinx的硬件加速技术,系统能够实现快速且高效的面部识别与评分功能。 ## 项目的主要特性和功能 1. 面部检测利用深度学习模型从视频流中识别出人脸,并输出人脸的坐标。 2. 硬件加速通过Xilinx FPGA加速深度学习模型的计算密集型部分,如卷积操作。 3. 面部评分对检测到的人脸进行特征提取,并通过图像分类CNN模型进行评分。 4. 整体架构项目包含ARM处理器(用于视频流和图像处理)、面部检测模块、DPU(FPGA上的软核)和面部评分模块。 ## 安装与使用步骤 假设用户已经下载了本项目的源码文件。 1. 环境准备 安装Xilinx提供的开发环境及相关工具链。
PHP学生成绩查询(源代码+论文)
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
Android项目之——漂亮的平台书架
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
c语言商品销售系统源码
android_jni操作指南
gee python 教程(西班牙语)
金融支付终端管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
教务管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
Android ListView下拉刷新 Demo
jackson-core-2.10.4.jar
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。