- 浏览: 350507 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (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 1366平时在维护开源程序 ... -
android在布局中动态增加view时的层级控制
2014-03-24 14:40 34042问题:我们有时候希望动态的在android的布局中增加vi ... -
android 在配置文件中指定上级activity
2013-12-07 23:47 1466今天在看sdk doc时发现可以在配置文件中定义一个acti ... -
android button 点击事件
2013-12-06 11:49 1169<Button android:layou ... -
在eclipse 4.2中配置tomcat插件并修改jvm启动参数
2013-06-04 12:31 4766情况:今天在运行项目的时候发现需要一个比较大的内存才能够完成 ... -
搜寻了关于android推送资料后的一些思考
2013-04-11 22:23 1688其实我们要用推送服务的情况还挺多: 1,站内性 其实是可以 ... -
java中集合的父类collection的那些事
2013-04-10 18:02 01,collection是所有集合的父类 2,Li ... -
有那些设计模式,观察者模式是什么
2013-04-09 15:41 0设计模式还挺多的。可以分成如下几类 创建模式: ... -
写一个线程安全的单例模式
2013-04-08 23:30 1726谢谢 http://blog.sina.com.cn/s/b ... -
ThreadLocale是什么
2013-04-07 21:53 1113维持线程封闭性的一种更规范的方法是用ThreadLocal, ... -
如何保证线程安全 实现线程安全有那些方法
2013-04-07 20:45 73951,如何保证线程安全 不在线程之间共享状态变量 将状态 ... -
final搞不清的那些事
2013-04-07 19:44 945面试老是问final,finally ... -
java 拦截器和过滤器区别(转载)
2013-04-06 21:21 19781、拦截器是基于java的反射机制的,而过滤器是基于函数回 ... -
struts默认提供了那些拦截器
2013-04-06 21:07 1264如下是struts-default.xml中的部分内容,主 ... -
spring aop的实现原型模拟
2013-04-06 20:59 1037我们都知道spring的配置文件中可以进行声明式事务管理,其 ... -
jdk动态代理
2013-04-06 17:38 840以下的内容是从 http://www.blogjava.n ... -
org.springframework.transaction.CannotCreateTransactionException: Could not open
2013-01-11 11:51 11141一客户和我说,服务器报错了, org.springframe ... -
ubuntu12下安装jdk
2012-09-26 14:17 1379这几天 我 忽然想在ubuntu12下进行java web 的 ... -
TabHost整合Listview进行数据显示和单独准确绑定listview中的控件
2012-08-21 16:05 4817情况:最近ostocy-jshop这个开源项目,一直在进行pa ... -
ostocyjshop模板体系功能说明
2012-08-09 13:24 1476ostocy-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设备提供的...
11KW OBC两电平pfc+cllc仿真源码实现:单相与三相兼容版双向控制研究,11KW OBC两电平pfc+cllc仿真源码实现:单相与三相兼容版,实现双向控制策略,11KW OBC两电平pfc+cllc仿真,源代码实现。 注意:已成单相,三相兼容版仿真文件。 双向控制。 ,核心关键词:11KW OBC两电平pfc; CLLC仿真; 源代码实现; 单相三相兼容; 双向控制。,11KW OBC单相与三相兼容版仿真:两电平PFC+CLLC双向控制源代码实现
3GPP R15 38.331 5G NR无线资源控制(RRC)协议规范解析
五运六气YUNQI_V471_SRC_D1023
19考试真题最近的t63.txt
基于MATLAB的牛拉法电力系统潮流计算程序,结合BPA方法,附参考文献,适合基础学习与拓展创新,基于MATLAB的牛拉法电力系统潮流计算程序:涵盖基础学习与拓展创新,附参考文献,牛拉法电力系统潮流计算 MATLAB编写潮流计算程序 BPA计算潮流 另外包含参考文献 这个程序把潮流计算的一般流程包括了,非常适合基础学习,并进一步的进行拓展创新 ,牛拉法; 电力系统潮流计算; MATLAB; BPA计算; 程序编写; 流程; 基础学习; 创新拓展,基于MATLAB的牛拉法电力系统潮流计算程序:基础学习与拓展创新指南
YOLOv11m权重文件
高一-语文-2025年1月张家界市高一期末联考-缺考不计、违纪不计、0分不计_2025-01-16-12-21 (1).zip
android kotlin 版本的贪吃蛇游戏
19考试真题最近的t57.txt
基于疫情封控区域的生活物资配送优化模型:结合遗传算法与模拟退火,实现时间最短和综合满意率最高的路径优化。,疫情下封控区域生活物资配送优化模型:结合遗传算法与模拟退火算法求解路径优化问题,实现时间与满意率双重目标优化。,模型及MATLAB代码:考充分考虑并结合疫情下封控区域生活物资配送问题及车辆路径问题的特点构建物资配送优化模型。 在一般单一目标——时间最短的基础上,加入综合满意率优化目标的路径优化问题 关键词:遗传算法、改进、模拟 火算法,路径优化、CVRP 完整模型+代码+注释 主要内容:以配送时间最短及综合满足率最高为目标,充分考虑并结合疫情下封控区域生活物资配送问题及车辆路径问题的特点构建物资配送优化模型,为疫情下生活物资配送找到了更好的思路。 在模型设计与求解问题上,首先设计标准遗传算法,继而对算法加以改进,最后设计出了改进遗传-模拟 火算法对模型进行求解。 还有参数灵敏度分析等。 服务内容:脚本 工具 部分展示如下: ,关键词:疫情下物资配送;车辆路径问题;优化模型;遗传算法;改进;模拟退火算法;CVRP;参数灵敏度分析;脚本工具;时间最短;综合满意率。 核心关键词用分号分
## 01、数据介绍 动态能力理论最早由提斯(Teece)与皮萨洛(Pisano)于1994年正式提出,他们将动态能力定义为“能够创造新产品和新过程,以及对变化的市场环境做出响应的一系列能力”。 动态能力具体体现在吸收能力、创新能力和适应能力三个方面。这些能力使公司能够快速适应市场变化,抓住新的商业机会,从而保持或提升竞争优势。 数据名称:上市公司-动态能力数据 数据年份:2012-2023年 ## 02、相关数据及指标 证券代码 证券名称 年份 Symbol RD IA ACV DC
基于ASIO的插件式服务器,支持TCP, UDP, 串口,Http, Websocket,统一化的数据接口,隔离开发人员和IO之间的操作。可以快速迭代。PSS 是针对不同 IO 逻辑的插件管理系统。您可以忽略 IO 建立的细节,构建自己的 logic 应用程序。PSS 封装了 Tcp、udp、kcp、串行端口、http、websocket 和 ssl 的统一接口。您可以使用 配置文件 或 统一接口 来创建和使用它们。logic plug-in 是完成数据到达后的 logic 处理,全部以动态库的形式加载,将 IO 和 logic 本身的耦合分开。简单的逻辑开发。本项目由三部分组成 (1) 主机(2) 数据包分析插件(3) 逻辑处理插件。您可以实现后两个插件来完成您的业务逻辑部署。
电机控制器源码:通用无感BLDC方波控制,高效参数化启动,转速达12w,环控系统一键调节,电机控制器源码:通用无感BLDC方波控制,高效调速,参数宏定义便捷调试,最高电转速达12w,电机控制器,低压无感BLDC方波控制,全部源码,方便调试移植 1.通用性极高,图片中的电机,一套参数即可启动。 2. ADC方案 3.电转速最高12w 4.电感法和普通三段式 5.按键启动和调速 6.开环,速度环,限流环 7.参数调整全部宏定义,方便调试 代码全部源码 ,电机控制器;低压无感BLDC方波控制;全部源码;通用性极高;电转速最高12w;电感法与普通三段式;按键启动调速;开环、速度环、限流环;参数调整宏定义。,通用电机控制器:低压无感BLDC方波控制源码,支持高转速12W,便捷调试移植
基于MPC的电动汽车分布式协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的电动汽车协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的分布式电动汽车协同自适应巡航控制,采用上下分层控制方式,上层控制器采用模型预测控制mpc方式,产生期望的加速度,下层根据期望的加速度分配扭矩;仿真结果良好,能够实现前车在加减速情况下,规划期望的跟车距离,产生期望的加速度进行自适应巡航控制。 ,关键词:MPC(模型预测控制); 分布式电动汽车; 协同自适应巡航控制; 上下分层控制方式; 期望加速度; 扭矩分配; 仿真结果良好; 前车加减速; 跟车距离。,基于MPC的分层控制电动汽车自适应巡航系统,仿真实现前车加减速跟车距离自适应
多维度购电与售电模型构建及基于CVaR与WOA优化的收益风险评估方法研究,基于CVaR风险评价及WOA优化的新型售电公司购售电模型与策略仿真研究,建立了一个电公司的购电侧模型和电侧模型,其中购电侧模型包括长期市场业务,现市场业务,可再生能源购电市场业务,分布式电源购电市场业务以及储能租赁市场业务五种类型。 电侧包括均 电价合同和实时电价合同两种类型。 然后在购电模型的基础上,提出了一种基于CVaR的购电收益风险评价方法。 根据电公司的CVaR购电收益风险数学模型,提出了一种基于WOA优化算法的新型购电收益计算方法。 该方法将购电收益风险计算公式作为WOA优化算法的目标函数,然后通过WOA的鲸鱼行走觅食、鲸鱼包围以及鲸鱼螺旋捕食三个步骤计算电公司的最优购电策略。 最后,通过MATLAB仿真工具对本文所研究的基于WOA优化的新型购电收益计算方法进行了仿真分析。 仿真结论验证了通过WOA优化算法得到的购电策略为最优购电策略。 matlab代码 仿真平台:MATLAB平台 代码具有一定的深度和创新性,注释清晰 ,关键词: 1. 购电侧模型; 2. 售电侧模型; 3. 长期/现货/可再生
迅雷软件下载原理介绍.md
## 01、数据简介 碳排放是指在人类活动中,如能源消耗、工业生产、交通运输、农业活动等过程中向大气中释放的二氧化碳等温室气体的行为。这些温室气体在大气中形成隔热层,导致地球气温升高,引发全球气候变化。分行业碳排放则是指按照不同的经济活动或产业部门来划分和统计碳排放量。 按省市县整理成面板数据,其中包括电力行业、工业过程、工业燃烧、建筑物能源、浪费、农业、燃料能源和运输八种指标排放量各省市县的最大值、最小值、平均值、总和。 数据名称:省市县分行业碳排放月度数据 数据年份:2023年 ## 02、相关数据 name 指标 时间 数值 更多数据 ## 03、数据截图