Spring定时器在SSH框架中的应用.
ssh详解
![ssh详解](https://img.taocdn.com/s3/m/1ec923b565ce0508763213b7.png)
SSH框架整合步骤详解SSH框架 2009-04-09 10:47:00 阅读611 评论0 字号:大中小订阅更系统地学习Struts1.x/Struts2.x+Hibernate+Spring,请学习该开源项目Appfuse终于,终于将SSH整合成功了,弄了几个小时,可以休息了(有的朋友弄了半个月,甚至重装了系统也没弄好,哎,庆幸啊)。
碰到问题千万不要放弃,要相信没有解决不了的问题!项目结构图:jsp部分为:index.jsp;success.jsp;fail.jspUserDAO.java,User.hbm.xml自动生成,HibernateSessionFactory 是多余的。
相关的配置文件、类文件详细信息,请参看Struts+Spring+Hibernate/SSH整合开发详细二以前是整过这三个框架的,可是工作期间都不曾用过,不知不觉之中,学的东西全忘了。
这次又要开始找工作了,看着招聘启事上都写着:要求熟练掌握Struts,Hibernate或Spring框架……,没得办法,重新学呗。
Spring in Action中文版下载地址(ftp协议)ftp://222.214.218.61/book5/20080228/cf8b35cc-5bcd-497 3-b6b7-37ae3ec78391.rar如果无法下载,可以在里重新搜索首先开始搭建项目环境,步骤如下:使用平台:MyEclipse 6.0框架版本:Struts 1.2 Hibernate 3.0 Spring 2.01>添加过程:<1> 新建项目。
Package Explorer视图下,右键单击 New -> Web Project;<2> 添加Struts框架。
菜单栏MyEclipse -> Capabilities,或者右键单击新建的项目名,选择快捷菜单中的"MyEclipse"下的二级菜单;设置相关的包名后,请写一个Struts的小例子,用来测试Struts是否可用;<3> 添加Spring。
搭建SSH框架(Struts1,Spring2.5,Hibernate3)
![搭建SSH框架(Struts1,Spring2.5,Hibernate3)](https://img.taocdn.com/s3/m/2aa7894069eae009581becb7.png)
搭建SSH框架:Struts1.* + Spring2.5 + Hibernate3.0 一,项目结构:图(1)Jsp页面省略,主要是一些添删改查的页面;二,开始搭建项目环境,步骤如下:使用平台:MyEclipse6.0/6.5框架版本:Struts1.* + Spring2.5 + Hibernate3.0;1,添加过程:1>,新建项目: 打开MyEclipse,在Package Explorer视图下,右键单击New-> Web Project;注意:在新建项目时,JDK的版本最好要选择Java EE 5.0;因为版本过低,可能有些JSP方面的功能不支持;新建玩项目之后,把该导的包导入到下面,下图为SS H 框架所需要的Jar包,注意,该项目用的是ORACLE数据库;其中,activation与mail这两个包为Java发邮件的包;classes12为Oracle数据库的驱动包,如果不是Oracle数据库,可更换该Jar包;dwe为Ajax dwr 框架中的包;2>,接着就开始用MyEclipse辅助开发Struts,Spring,Hibernate了;3>,首先MyEclipse辅助开发Struts,方法:右键单击你所建的项目,出现一级菜单,选择Myeclipse,选择Myeclipse之后会出现二级菜单,接着选择Add Struts Capabilities;;接着具体操作如下面图示:点击Finish按钮完成;完成之后,可将包删除;在上图中,如果那个勾没有去掉的话,就会自动生产如下标签:当然,如果你觉得标签对你没什么用的话,可以删除;如果该勾去掉的话,就只生成标签,这是Struts的核心标签;4>,MyEclipse辅助开发Spring,方法跟上面的一样,选择Add Spring apabilities;;接着具体操作如下面图示:然后点击Next,具体操作如下图:接着点击 Finish按钮,完成此项操作;5>,,最后MyEclipse辅助开发Hibernate,在执行和上面类似方法之前,Hibernate 需要先做另外一件事情,那就是和数据建立连接,具体操作如下图:点击上图位置的或者右边的>> ,然后再选择MyEclipse Database Explorer切换到如下图页面:,然后右键单击,新建一个Database Driver;如下图:下面这个截图是该项目的数据库链接图:如图所示,测试数据库链接成功;然后可直接点击Finish完成;接着切换到窗口,按照上面第三小步的方法,选择Add Hibernate apabilities;;接着具体操作如下面图示:点击下一步:点击下一步:点击下一步:点击下一步:点击 Finish 完成;6>,最后一步,就是运用Hibernate的映射机制,把数据库的表与JAVA的对形成一个关系映射;在此之前,首先应该在项目SRC的目录下面新建一个包,如该项目所示,用来存放映射生成的POJO对象以及映射文件;如下图:有一点说一下,你生成的*.hbm.xml文件可能不止一个,对,你可以把它们整合到一个文件中;然后新建按第五小步的方法,把窗口切换到MyEclipse Database Explorer界面,然后打开右键刚才所建立的链接,选择属于你自己的用户;然后选择Tble;右键选择如上图的属性:接下来的操作如下图:点击 Next,进入下一步:点击 Next,进入下一步:至此,项目环境己经搭建完成;三,项目搭建完成,SSH各个部分配置文件的说明,以及它们之间存在的关系:1,首先是Struts的核心配置文件,即struts-config.xml:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN""/dtds/struts-config_1_2.dtd"><struts-config><data-sources /><form-beans><!—建立Form表单,在此处进行登记 -→<form-bean name="userForm"type="erForm" /> </form-beans><global-exceptions /><global-forwards /><!—各个Action对应与之相对应的表单 -→<action-mappings><!-- 用户管理 --><action parameter="opers" attribute="userForm" name="userForm"path="/doUser" scope="request"><forward name="login_ok" path="/welcome.jsp"></forward><forward name="login_no" path="/index.jsp"></forward> </action></action-mappings><controllerprocessorClass="org.springframework.web.struts.DelegatingRequestProc essor"></controller><message-resourcesparameter="ermanagerview.struts.ApplicationResources"> </message-resources><!—Spring辅助Struts管理Struts-→<plug-inclassName="org.springframework.web.struts.ContextLoaderPlugIn"><set-property property="contextConfigLocation"value="/WEB-INF/action-servlet.xml" /></plug-in></struts-config>2,其次就是Springd的applicationContext.xml文件和action-servlet.xml文件:applicationContext.xml文件:<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd"><!-- Session 工厂 --><bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"value="classpath:hibernate.cfg.xml"><!-- 可以不要配置文件(hibernate.cfg.xml),直接写在这个Spring的配置文件中 --></property></bean><!-- 模板 --><bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 事务器 --><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManage r"><property name="sessionFactory" ref="sessionFactory" /> </bean><!-- 对外代理 --><!-- 1,用户管理 --><bean id="userDaoImp"class="erDaoImp"><property name="hibernateTemplate" ref="hibernateTemplate" /> </bean><bean id="userServiceTarget"class="erServiceImp"> <property name="userdao"><ref local="userDaoImp" /></property></bean><bean id="userService"class="org.springframework.transaction.interceptor.TransactionProxyF actoryBean"><property name="transactionManager"><ref local="transactionManager" /></property><property name="target"><ref local="userServiceTarget" /></property><property name="transactionAttributes"><props><prop key="*">PROPAGATION_REQUIRED</prop></props></property></bean></beans>action-servlet.xml文件:<!—Spring辅助Struts管理Struts-<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"> <bean name="/doUser"class="erAction"scope="prototype"></bean></beans>3,最后就是Hibernate的hibernate.cfg..xml文件:<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="ername">wangxiaodong</property><property name="connection.url">jdbc:oracle:thin:@192.168.0.2:1521:ALIZEEDB</property><property name="dialect">org.hibernate.dialect.Oracle9Dialect</property><propertyname="myeclipse.connection.profile">Test</property><property name="connection.password">donny</property><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><mappingresource="com/ygkq/usermanager/model/entity/User.hbm.xml" /></session-factory></hibernate-configuration>该文件基本上不用动,都是自动生成的代码;当然,你也可以根据自己的需要添加代码,例如,你想在执行HQL语句的时候让它显示SQL语句,可将<property name="hibernate.show_sql">true</property>插入代码中;另外在图(1)中还有两个配置文件没有提到,那就是log4j.properties 与mytag.tld;其中log4j.properties是配置日志信息的;而mytag.tld主一个自定义标签;四,SSH框架搭建完成:SSH框架基本搭建完成,如果有不对或者不妥之处,请随时指教!~E-mail:jerry8059@。
ssh框架实验报告
![ssh框架实验报告](https://img.taocdn.com/s3/m/435e05c782d049649b6648d7c1c708a1284a0ac3.png)
ssh框架实验报告《SSH框架实验报告》SSH框架是指Struts2 + Spring + Hibernate的整合框架,它将三大框架有机地结合在一起,为Java开发人员提供了一种高效、稳定的开发方式。
在本实验中,我们对SSH框架进行了深入的研究和实验,以期能够更好地理解和掌握这一框架的使用方法和特点。
在实验中,我们首先进行了环境搭建,包括安装和配置Struts2、Spring和Hibernate框架,以及建立数据库连接等。
接着,我们创建了一个简单的Web应用程序,包括前端页面和后端业务逻辑,以便于对SSH框架进行测试和验证。
在这个过程中,我们深入了解了SSH框架的各个组成部分,包括Struts2的MVC模式、Spring的依赖注入和AOP特性,以及Hibernate的ORM映射和持久化操作。
通过实验,我们发现SSH框架具有以下几个特点:1. 结构清晰:SSH框架将前端页面、业务逻辑和数据持久化分离,使得应用程序的结构更加清晰和模块化,方便于开发和维护。
2. 灵活性强:由于整合了Struts2、Spring和Hibernate三大框架,SSH框架具有很强的灵活性,可以根据实际需求进行定制和扩展。
3. 性能优秀:通过对SSH框架进行性能测试,我们发现其在处理大规模数据和高并发访问时表现优秀,能够保持稳定的性能和响应速度。
4. 社区支持:由于SSH框架是目前Java开发领域最流行的整合框架之一,拥有庞大的用户群体和活跃的社区支持,能够及时获取到最新的技术资讯和解决方案。
总的来说,SSH框架是一种非常成熟和稳定的Java开发框架,具有广泛的应用前景和市场需求。
通过本次实验,我们对SSH框架有了更深入的了解和体验,相信在今后的开发工作中能够更加熟练地运用这一框架,为企业应用程序的开发和维护提供更好的技术支持。
ssh框架 实验报告
![ssh框架 实验报告](https://img.taocdn.com/s3/m/6210c82ba55177232f60ddccda38376baf1fe02f.png)
ssh框架实验报告《SSH框架实验报告》一、实验目的本实验旨在通过对SSH框架的学习和实践,掌握SSH框架的基本原理和应用技巧,提高对SSH框架的理解和运用能力。
二、实验内容1. 理解SSH框架的概念和组成结构2. 搭建SSH框架的开发环境3. 编写基本的SSH框架应用程序4. 调试和测试SSH框架应用程序5. 总结和分析实验结果三、实验步骤1. 理解SSH框架的概念和组成结构通过阅读相关文献和资料,了解SSH框架的基本概念和组成结构,包括Struts、Spring和Hibernate三大框架的作用和相互关系。
2. 搭建SSH框架的开发环境在本地计算机上安装并配置好Java开发环境、Tomcat服务器、MySQL数据库,并下载安装好Struts、Spring和Hibernate框架的相关文件和插件。
3. 编写基本的SSH框架应用程序创建一个简单的SSH框架应用程序,包括前端页面的设计和开发、后端业务逻辑的编写和数据库的操作等内容。
4. 调试和测试SSH框架应用程序对编写好的SSH框架应用程序进行调试和测试,确保程序能够正常运行并达到预期的效果。
5. 总结和分析实验结果总结本次实验的收获和体会,分析在实践中遇到的问题和解决方法,以及对SSH框架的进一步学习和应用展望。
四、实验结果通过本次实验,我对SSH框架有了更深入的理解,掌握了搭建SSH框架的基本步骤和技巧,同时也发现了一些问题和需要改进的地方。
在实践中,我对SSH 框架的应用有了更清晰的认识,对于将来的开发工作也更有信心。
五、结论SSH框架是一种非常强大和灵活的开发框架,通过本次实验的学习和实践,我对SSH框架有了更深入的理解和掌握,相信在将来的工作中能够更好地应用和发挥其优势,提高开发效率和质量。
六、参考文献1. 《SSH框架入门与实战》2. 《Spring实战》3. 《Hibernate实战》4. 《Struts2权威指南》以上就是本次实验的实验报告,希望能够对大家对SSH框架的学习和应用有所帮助。
idea搭建ssh框架的超详细教程
![idea搭建ssh框架的超详细教程](https://img.taocdn.com/s3/m/43dcdbd15ebfc77da26925c52cc58bd631869319.png)
idea搭建ssh框架的超详细教程⽬录⼀。
创建项⽬1.new->project出现如下2.构建⽬录结构⼆。
Struts21.⾸先引⼊struts2依赖2.WEB-INF下web.xml⽂件配置3.在resources下添加struts.xml⽂件4.在action包下创建TestAction类,为了测试在webapp下新建了test.jsp页⾯5.部署6.启动测试三。
Spring1.⾸先引⼊spring相关依赖2.在web.xml中添加listener,并在resources下新建spring,xml⽂件四。
Hibernate1.引⼊hibernate依赖2.View--》Toolwindows---->Database3.编写代码⼀。
创建项⽬先附上测试的数据库DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(5) NOT NULL AUTO_INCREMENT,`name` varchar(10) COLLATE utf8_bin DEFAULT NULL,`password` varchar(10) COLLATE utf8_bin DEFAULT NULL,`remark` varchar(50) COLLATE utf8_bin DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'zhangsan', '123456', null);INSERT INTO `user` VALUES ('2', 'lisi', '123', null);INSERT INTO `user` VALUES ('3', 'wangan', '456', null);INSERT INTO `user` VALUES ('4', 'xinxi', '000', null);1.new->project出现如下点击next后出现如下填写GroupId和ArtifactId在点击next直⾄finish2.构建⽬录结构在main下新建java和resources⽬录如下并将java⽬录标记为Sources Root,resources标记为Resources Root在java下新建如下包package⼆。
SSH框架面试题(自己+别人的试题)
![SSH框架面试题(自己+别人的试题)](https://img.taocdn.com/s3/m/72c30f60011ca300a6c390fc.png)
(问答题+选择题(在55页))Java工程师(程序员)面题Struts,Spring,Hibernate三大框架1.Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作6.提交事务7.关闭Session 8.关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2.Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many4.Struts1流程:1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被ActionServlet接收。
3、根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。
ssh框架原理及流程
![ssh框架原理及流程](https://img.taocdn.com/s3/m/008c60b705a1b0717fd5360cba1aa81144318ffb.png)
ssh框架原理及流程SSH框架原理及流程。
SSH框架是指Struts、Spring、Hibernate三大开源框架的整合,它们分别解决了Web层、业务逻辑层和数据访问层的开发问题。
SSH框架的整合,旨在充分发挥各自框架的优势,实现高效、灵活、可维护的Web应用程序开发。
在本文中,我们将深入探讨SSH框架的原理及流程。
首先,我们来了解一下SSH框架各个组成部分的原理。
Struts作为Web层框架,它采用MVC(Model-View-Controller)设计模式,将应用程序分为模型、视图和控制器三层,实现了数据、展示和控制的分离,提高了代码的复用性和可维护性。
Spring作为业务逻辑层框架,它提供了IoC(控制反转)和AOP(面向切面编程)等功能,通过IoC容器管理对象之间的依赖关系,实现了松耦合,降低了组件之间的耦合度。
Hibernate作为数据访问层框架,它提供了ORM(对象关系映射)功能,将Java对象和数据库表之间建立映射关系,实现了面向对象的数据访问,简化了数据库操作。
接下来,我们来了解SSH框架的整合流程。
首先,我们需要在项目中引入Struts、Spring、Hibernate的相关jar包,并配置它们的配置文件。
在web.xml中配置DispatcherServlet,用于拦截所有的请求,然后将请求分发给对应的Controller处理。
在Spring的配置文件中配置业务逻辑层和数据访问层的Bean,以及事务管理器等。
在Hibernate的配置文件中配置数据源、SessionFactory等。
然后,我们需要编写业务逻辑层和数据访问层的代码,并在Controller中调用业务逻辑层的方法,最终将数据返回给视图层进行展示。
在SSH框架中,我们可以充分利用Struts的表单验证、Spring的事务管理、Hibernate的持久化操作等功能,实现了Web应用程序的快速开发。
同时,SSH框架也提供了良好的扩展性,我们可以根据项目的需要,灵活地替换其中的某个框架,而不影响整体架构。
javawebssh框架实例
![javawebssh框架实例](https://img.taocdn.com/s3/m/533cf472f6ec4afe04a1b0717fd5360cbb1a8d66.png)
javawebssh框架实例javawebssh框架实例是一种用于实现Java与WebSSH的框架。
WebSSH是一种基于Web的SSH(Secure Shell)客户端,可以通过浏览器远程登录到服务器并执行命令。
在本文中,我们将介绍如何使用javawebssh框架来实现WebSSH 功能。
我们需要在项目中引入javawebssh框架的依赖。
可以通过Maven 或Gradle等构建工具来管理依赖。
在pom.xml文件中添加以下依赖:```xml<dependency><groupId>com.hierynomus</groupId><artifactId>sshj</artifactId><version>0.29.0</version></dependency><dependency><groupId>com.hierynomus</groupId><artifactId>sshj-gateway</artifactId><version>0.29.0</version></dependency><dependency><groupId>org.apache.sshd</groupId><artifactId>sshd-core</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.eclipse.jetty.websocket</groupId><artifactId>websocket-server</artifactId><version>9.4.31.v20200723</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>9.4.31.v20200723</version></dependency>```接下来,我们需要创建一个WebSSHController类来处理WebSSH的请求。
项目中需要用到spring 的地方
![项目中需要用到spring 的地方](https://img.taocdn.com/s3/m/8a8ce22558fb770bf78a55c6.png)
对结果列表进行加工:不论通过jdbc还是hibernate方式,如果需要对find方法取得的列表中的对象进行加工,显然使用回调模式进行效率更高。实际上如果使用HibernateTemplate并且希望查询出的结果不是对象列表而是数组列表,那么也可以使用回调,如下:
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
另外在实际项目中有一个发现,在websphere6.0的容器下部署的web应用,使用websphere自带的数据库连接池,当spring事务配置为readOnly,在数据量比较大,并且有一定并发量时会导致websphere连接池抛出异常,并导致性能严重下降。去掉readOnly选项就恢复正常了,这种情况不容易在测试环境重现,因此只能去掉readOnly选项,发现去掉以后性能也没有太多的下降。
service端的框架支持:在serivce层通过ioc进行bean的管理配置,同时进行事务控制的定义。
aop:利用拦截器配置管理特性
jndi:利用spring的context组件对jndi进行定义,通常用于数据库连接池的配置和查找
其他:spring1.2版本的mvc组件是针对web端的应用框架,尽管理念非常oop,不过实际使用的时候确实不如struts2好使,spring 2.0以后的mvc据说有很大改进,以后有机会再用吧。另外spring的定时任务(job)也经常用到,后边会有提及。
SSH协议的实际应用场景
![SSH协议的实际应用场景](https://img.taocdn.com/s3/m/868e8de6d05abe23482fb4daa58da0116c171f1d.png)
SSH协议的实际应用场景SSH(Secure Shell)是一种通过网络进行加密传输的协议,可以在不安全的网络中提供安全的远程登录和执行命令。
它的应用场景非常广泛,下面将介绍一些SSH协议的实际应用场景。
1. 远程登录和管理服务器SSH最常见的应用场景之一是远程登录和管理服务器。
通过使用SSH协议,系统管理员可以安全地远程访问服务器,执行命令、查看日志等。
相比于传统的telnet等协议,SSH通过加密传输数据,有效地保护了敏感的登录信息和数据。
2. 文件传输SSH协议还支持安全的文件传输。
系统管理员可以使用SCP (Secure Copy)命令或者SFTP(SSH File Transfer Protocol)协议来上传或下载文件,不仅保证了文件的安全性,而且提供了方便的操作界面。
这在跨平台的文件传输、备份和同步中非常有用。
3. 隧道技术SSH还可以用于创建安全的隧道,将不安全的网络转换为安全的网络。
例如,使用SSH隧道可以通过公共网络安全地访问内部网络中的服务,如数据库、Web服务器等。
这种方式避免了直接将内部服务暴露在公网上,提高了系统的安全性。
4. 远程维护和故障排除当远程服务器发生故障或需要维护时,SSH协议可以派上用场。
管理员可以通过SSH协议远程登录服务器,查看日志、修改配置文件和执行诊断命令,快速定位和解决问题。
SSH协议的安全性和可靠性使其成为远程故障排除的首选工具。
5. Git和版本控制许多代码托管平台使用SSH协议来进行代码的安全传输和版本控制。
开发者可以使用SSH密钥来认证自己的身份,并通过SSH协议与代码仓库进行交互。
这在多人协作开发中非常有用,不仅保证了代码的安全性,还提供了便捷的版本管理功能。
6. 基于SSH协议的安全访问控制基于SSH协议的安全访问控制可以帮助管理员更好地管理用户权限,限制用户在服务器上的操作。
通过SSH协议,管理员可以为每个用户绑定特定的权限,控制其能够执行的命令和访问的资源。
详解ssh框架原理及流程
![详解ssh框架原理及流程](https://img.taocdn.com/s3/m/d3a2cfc53086bceb19e8b8f67c1cfad6195fe92a.png)
详解ssh框架原理及流程什么是SSHSSH是 struts+spring+hibernate的⼀个集成框架,是⽬前较流⾏的⼀种web应⽤程序开源框架。
SSH不是⼀个框架,⽽是把多个框架(Struts、Spring以及Hibernate)紧密的结合在⼀起,⽤于构建灵活、易于扩展的多层Web应⽤程序。
SSH框架的系统从职责上分为四层:表⽰层、业务逻辑层、数据持久层和域模块层(实体层)。
SSH(Struts2+Spring+Hibernate)框架的项⽬,该架构主要分为三个层次:(1)Struts2:负责web层(2)Spring:业务层的管理(3)Hibernate:负责数据持久化Struts2⼯作原理:1.初始化⼀个指向servlet容器的请求。
2.请求经过web.xml中配置的过滤器过滤,FilterDispatcher(struts2控制器的核⼼)询问ActionMapper是否需要调⽤某个Action来处理这个请求。
如果ActionMapper决定需要调⽤某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
3.ActionProxy通过配置⽂件Struts.xml配置⽂件找到需要调⽤的Action类。
4.ActionProxy创建⼀个ActionInvocation实例,同时ActionInvocation通过代理模式调⽤Action。
但在调⽤之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。
5.Action执⾏完毕后,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。
即开发⼈员通过发送http请求,这个请求经过web.xml的过滤器过滤看看是否要调⽤某个action,如果有则在Struts.xml找到该请求的实现的⽅法,然后返回运⾏的结果。
Hibernate⼯作原理:1. 读取并解析配置⽂件2.读取并解析映射信息,创建SessionFactory3. 打开Sesssion4.创建事务Transation5. 持久化操作6.提交事务7.关闭Session8. 关闭SesstionFactory即通过spring管理的Hibernate初始化时加载了xxx.hbm.xml然后读取解析映射信息,创建了SessionFactory。
SSH整合过程(struts-2.3.15.1+spring-3.2.4+hibernate-4.2.3)
![SSH整合过程(struts-2.3.15.1+spring-3.2.4+hibernate-4.2.3)](https://img.taocdn.com/s3/m/2a4ba41d0b4e767f5acfce17.png)
SSH整合SSH整合前应该先熟悉各个框架的单独使用,至少要了解各自的xml配置。
环境:struts-2.3.15.1,spring-3.2.4,hibernate-4.2.3,myeclipse10,JDK-1.6,Mysql Jar包:1.新建web项目2.以简单的登录验证为例3.建立login.jsp,login_success.jsp,login_error.jsp4.引入struts2(1)web.xml配置<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepa reAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>(2)src下的struts.xml配置<package name="default"namespace="/"extends="struts-default"><action name="login"class="com.accp.action.LoginAction" method="login"><result name="success"> /login_success.jsp </result><result name="error"> /login_error.jsp </result></action></package>(3)测试struts2是否能够通过5.引入spring(1)配置web.xml,添加listener<listener><listener-class>org.springframework.web.context.ContextLoaderListener </listener-class></listener><!-- 告知spring config location 的存储位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:beans.xml</param-value></context-param>(2)配置src下的beans.xml将spring的ApplicationContext.xml拷贝至src下,删除里面的配置项,只保留下面内容<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"></beans>6.引入hibernate(1)配置beans.xml<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:jee="/schema/jee"xmlns:tx="/schema/tx"xmlns:aop="/schema/aop"xmlns:p="/schema/p"xmlns:util="/schema/util"xmlns:tool="/schema/tool" xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd /schema/tx/schema/tx/spring-tx.xsd/schema/aop/schema/aop/spring-aop.xsd/schema/jee/schema/jee/spring-jee.xsd/schema/context/schema/context/spring-context.xsd/schema/util/schema/util/spring-util.xsd/schema/tool/schema/tool/spring-tool.xsd"default-lazy-init="true"default-autowire="byName"><!--spring jdbc配置数据源 Mysql--><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/test" /><property name="username"value="user"/><property name="password"value="123456"/></bean><!-- hibernate.cfg.xml Spring config --><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!-- connection --><property name="dataSource"><ref local="dataSource"/></property><!-- hibernate自身属性 --><property name="hibernateProperties"><props><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop><propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <propkey="hibernate.current_session_context_class">thread</prop></props></property><!-- 映射文件<property name="mappingResources"><list><value>com/forwor/ssh/entity/xml/User.hbm.xml</value></list></property>--></bean><!-- 注入 --><bean id="userDao"class="erDaoImpl"> <property name="sessionFactory"><ref local="sessionFactory"/></property></bean><!-- aop --><!-- transaction --><bean id="userManager"class="erManagerImpl"><property name="userDao"><ref local="userDao"/></property></bean><!-- advice --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager "><property name="sessionFactory"><ref local="sessionFactory"/></property></bean><!-- 事务处理 --><bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterce ptor"><property name="transactionManager"><ref local="transactionManager"/></property><property name="transactionAttributes"><props><prop key="register">PROPAGATION_REQUIRED</prop><!--hibernate4必须配置为开启事务否则 getCurrentSession()获取不到--><prop key="get*">PROPAGATION_REQUIRED,readOnly</prop><prop key="find*">PROPAGATION_REQUIRED,readOnly</prop><prop key="select*">PROPAGATION_REQUIRED,readOnly</prop><prop key="query*">PROPAGATION_REQUIRED,readOnly</prop><prop key="sync*">PROPAGATION_REQUIRED</prop><prop key="finish*">PROPAGATION_REQUIRED</prop><prop key="add*">PROPAGATION_REQUIRED</prop><prop key="insert*">PROPAGATION_REQUIRED</prop><prop key="edit*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><prop key="save*">PROPAGATION_REQUIRED</prop><prop key="remove*">PROPAGATION_REQUIRED</prop><prop key="delete*">PROPAGATION_REQUIRED</prop><prop key="login*">PROPAGATION_REQUIRED</prop><propkey="*">PROPAGATION_REQUIRED,ng.Exception</prop></props></property></bean><!-- autoproxy 自动创建代理--><bean id="ProxyCreator"class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyC reator"><property name="beanNames"><list><value>*Manager</value></list></property><property name="interceptorNames"><list><value>transactionInterceptor</value></list></property></bean><bean id="loginAction"class="com.accp.action.LoginAction"scope="prototype"><property name="userManager"><ref local="userManager"/></property></bean></beans>7.类图以用户登录验证为基础的测试流程控制8.注意事项(1)login.jsp 输入内容的name为ername user.password时,LoginAction中应该为user生成相应的get/set方法。
ssh框架期末考试题及答案
![ssh框架期末考试题及答案](https://img.taocdn.com/s3/m/42397a51b80d6c85ec3a87c24028915f804d84d8.png)
ssh框架期末考试题及答案一、选择题(每题2分,共20分)1. SSH框架中,S代表的是:A. SpringB. StrutsC. HibernateD. SpringMVC答案:A2. 在Struts2框架中,OGNL表达式中获取参数值的正确方式是:A. ${param.paramName}B. ${paramName}C. ${request.paramName}D. ${session.paramName}答案:A3. Hibernate中,以下哪个接口用于获取当前会话的持久化对象?A. SessionB. TransactionC. QueryD. Criteria答案:A4. Spring框架中,以下哪个注解用于声明一个Bean?A. @AutowiredB. @ServiceC. @ComponentD. @Repository答案:C5. 在Spring MVC中,以下哪个注解用于映射请求到对应的处理器方法?A. @ControllerB. @RequestMappingC. @ResponseBodyD. @PathVariable答案:B6. Struts2中,以下哪个标签用于遍历集合?A. <s:iterator>B. <s:property>C. <s:if>D. <s:else>答案:A7. Hibernate中,以下哪个是事务管理的接口?A. SessionB. TransactionC. QueryD. Criteria答案:B8. Spring框架中,以下哪个注解用于自动注入集合类型的Bean?A. @AutowiredB. @QualifierC. @ResourceD. @Inject答案:A9. 在Struts2框架中,以下哪个拦截器用于处理表单验证?A. TimerInterceptorB. PrepareInterceptorC. ValidationInterceptorD. WorkflowInterceptor答案:C10. Spring MVC中,以下哪个注解用于将请求参数绑定到控制器方法的参数上?A. @RequestParamB. @PathVariableC. @RequestBodyD. @RequestHeader答案:A二、简答题(每题5分,共20分)1. 简述SSH框架的组成及其各自的作用。
spring自带的定时任务功能@EnableScheduling
![spring自带的定时任务功能@EnableScheduling](https://img.taocdn.com/s3/m/53761b2d5627a5e9856a561252d380eb6294231d.png)
spring⾃带的定时任务功能@EnableScheduling1 demopackage com.test.domi.config;import org.springframework.beans.factory.annotation.Configurable;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import ponent;import java.text.SimpleDateFormat;import java.util.Date;@Component@Configurable@EnableSchedulingpublic class ScheduledTasks {//每30秒执⾏⼀次@Scheduled(fixedRate = 1000 * 30)public void reportCurrentTime(){System.out.println ("Scheduling Tasks Examples: The time is now " + dateFormat ().format (new Date ()));}//在固定时间执⾏@Scheduled(cron = "0 */1 * * * * ")public void reportCurrentByCron(){System.out.println ("Scheduling Tasks Examples By Cron: The time is now " + dateFormat ().format (new Date()));}private SimpleDateFormat dateFormat(){return new SimpleDateFormat ("HH:mm:ss");}}Scheduling Tasks Examples: The time is now 11:55:54Scheduling Tasks Examples By Cron: The time is now 11:56:00Scheduling Tasks Examples: The time is now 11:56:24Scheduling Tasks Examples: The time is now 11:56:54Scheduling Tasks Examples By Cron: The time is now 11:57:002 详解1.cron是设置定时执⾏的表达式,如 0 0/5 * * * ?每隔五分钟执⾏⼀次2.zone表⽰执⾏时间的时区3.fixedDelay 和fixedDelayString ⼀个固定延迟时间执⾏,上个任务完成后,延迟多久执⾏4.fixedRate 和fixedRateString⼀个固定频率执⾏,上个任务开始后多长时间后开始执⾏5.initialDelay 和initialDelayString表⽰⼀个初始延迟时间,第⼀次被调⽤前延迟的时间3 总结常见问题a: 单线程任务丢失,转为异步线程池默认的 ConcurrentTaskScheduler 计划执⾏器采⽤Executors.newSingleThreadScheduledExecutor() 实现单线程的执⾏器。
IntelliJ_IDEA中建立SSH应用步骤
![IntelliJ_IDEA中建立SSH应用步骤](https://img.taocdn.com/s3/m/148b954477232f60ddcca1f2.png)
public interface IUserDAO { public List search(UsersEntity condition);
}
UserDAO.java
package com.dao;
import ersEntity; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.criterion.Example;
7. 接下来,我们打开 web.xml,增加如下配置,让 Web 应用程序启东市自动装载 Spring 容 器,如下所示。
如果没有在 Project 中手工添加 spring-web-x.x.x.RELEASE.jar,那么一开始会报告找不到 org.springframework.web.context.ContextLoaderListener 错误,这个接口存在于 springweb-x.x.x.RELEASE.jar 包中,需要手工添加到系统,方法如下,打开 Project Structure, 选中左侧的 Libraries,再选中+按钮,选择 From Maven,出现了 Maven 查找对话框,输 入 spring-web 进行搜索,在提示的搜索结果中找到合适的版本去下载,下载的文件很 多,可以删除掉其他的,只保留 spring-web-x.x.x.RELEASE.jar
UsersEntity that = (UsersEntity) o;
if (id != that.id) return false; if (account != null ? !account.equals(that.account) : that.account != null) return false; if (name != null ? !name.equals() : != null) return false; if (password != null ? !password.equals(that.password) : that.password != null) return false;
SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)
![SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)](https://img.taocdn.com/s3/m/8d1a581b4531b90d6c85ec3a87c24028915f855a.png)
SpringBoot中并发定时任务的实现、动态定时任务的实现(看这⼀篇就够了)原创不易,如需转载,请注明出处,否则将追究法律责任!!!⼀、在JAVA开发领域,⽬前可以通过以下⼏种⽅式进⾏定时任务1、单机部署模式Timer:jdk中⾃带的⼀个定时调度类,可以简单的实现按某⼀频度进⾏任务执⾏。
提供的功能⽐较单⼀,⽆法实现复杂的调度任务。
ScheduledExecutorService:也是jdk⾃带的⼀个基于线程池设计的定时任务类。
其每个调度任务都会分配到线程池中的⼀个线程执⾏,所以其任务是并发执⾏的,互不影响。
Spring Task:Spring提供的⼀个任务调度⼯具,⽀持注解和配置⽂件形式,⽀持Cron表达式,使⽤简单但功能强⼤。
Quartz:⼀款功能强⼤的任务调度器,可以实现较为复杂的调度功能,如每⽉⼀号执⾏、每天凌晨执⾏、每周五执⾏等等,还⽀持分布式调度,就是配置稍显复杂。
2、分布式集群模式(不多介绍,简单提⼀下)问题:I、如何解决定时任务的多次执⾏?II、如何解决任务的单点问题,实现任务的故障转移?问题I的简单思考:1、固定执⾏定时任务的机器(可以有效避免多次执⾏的情况,缺点就是单点故障问题)。
2、借助Redis的过期机制和分布式锁。
3、借助mysql的锁机制等。
成熟的解决⽅案:1、Quartz:可以去看看这篇⽂章[Quartz分布式]( https:///jiafuwei/p/6145280.html)。
2、elastic-job:(https:///elasticjob/elastic-job-lite)当当开发的弹性分布式任务调度系统,采⽤zookeeper实现分布式协调,实现任务⾼可⽤以及分⽚。
3、xxl-job:(https:///xuxueli/xxl-job)是⼤众点评员发布的分布式任务调度平台,是⼀个轻量级分布式任务调度框架。
4、saturn:(https:///vipshop/Saturn) 是唯品会提供⼀个分布式、容错和⾼可⽤的作业调度服务框架。
SSH三大框架的工作原理及流程
![SSH三大框架的工作原理及流程](https://img.taocdn.com/s3/m/6c7a2769178884868762caaedd3383c4bb4cb422.png)
SSH三⼤框架的⼯作原理及流程摘要: Hibernate⼯作原理及为什么要⽤? 原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置⽂件 2.由hibernate.cfg.xml中的读取并解析映射信息 3.通过config.buildSessionFactory();//创建SessionFactory 4.sessionFactoryHibernate⼯作原理及为什么要⽤?原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置⽂件2.由hibernate.cfg.xml中的读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession();//打开Sesssion5.session.beginTransaction();//创建事务Transation6.persistent operate持久化操作7.session.getTransaction().commit();//提交事务8.关闭Session9.关闭SesstionFactory为什么要⽤:1. 对JDBC访问数据库的代码做了封装,⼤⼤简化了数据访问层繁琐的重复性代码。
1. Hibernate是⼀个基于JDBC的主流持久化框架,是⼀个优秀的ORM实现。
他很⼤程度的简化DAO层的编码⼯作2. hibernate使⽤Java反射机制,⽽不是字节码增强程序来实现透明性。
3. hibernate的性能⾮常好,因为它是个轻量级框架。
映射的灵活性很出⾊。
它⽀持各种关系数据库,从⼀对⼀到多对多的各种复杂关系。
2. Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)1. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从⽽提⾼了服务器的性能。
产品方案技术白皮书模板2(含系统架构说明书)
![产品方案技术白皮书模板2(含系统架构说明书)](https://img.taocdn.com/s3/m/ddd5fcfab9f67c1cfad6195f312b3169a451ea00.png)
附件二十九:产品方案技术白皮书一、背景概述 (2)1、研发背景 (2)2、产品定位 (2)二、产品方案功能介绍 (2)1、设计理念 (2)2、系统拓扑图 (2)3、系统构架描述 (2)4、系统功能介绍 (2)5、产品方案规格 (2)四、产品方案应用介绍 (3)1、应用模式 (3)2、应用流程 (3)3、应用环境 (3)五、产品方案特性介绍 (3)1、技术特性 (3)2、应用特性 (3)3、系统特性 (3)六、产品方案技术介绍 (3)1、相关技术 (3)2、技术指标 (4)七、产品方案测评数据 (4)八、实施运维方式说明 (4)九、售后服务方式说明 (4)一、背景概述1、研发背景介绍用户需求背景、该产品所在行业信息化建设背景、产品所涉及的相关政策简述等,以说明该产品的研发背景,以及满足的客户需求。
2、产品定位为了满足客户以上需求,该产品具有什么功能,能够解决什么问题。
二、产品方案功能介绍1、设计理念该产品方案的设计思路。
2、系统拓扑图使用统一的图标,制作系统拓扑图。
3、系统构架描述按照系统的构成,分类对系统进行描述。
4、系统功能介绍详细阐述系统的主要功能。
5、产品方案规格产品方案不同的规格介绍,或者对产品方案技术规格的介绍。
四、产品方案应用介绍1、应用模式该产品方案包括的应用模式类型,或者针对不同类型客户的解决方案。
2、应用流程该产品方案的应用流程。
3、应用环境描述该产品所运行的应用环境。
五、产品方案特性介绍1、技术特性主要是性能先进性、功能齐全性、系统兼容性、技术稳定性等。
2、应用特性主要是部署灵活性、可扩展性、管理方便性、易用性等。
3、系统特性对系统的主要特性进行描述,根据产品不同和竞争优势的不同而不同。
六、产品方案技术介绍1、相关技术主要应用技术的介绍,以及该技术的优势。
2、技术指标针对技术参数进行描述。
七、产品方案测评数据产品方案主要测评数据,可以是内部测评数据,也可以是第三方的测评数据。
SSH框架运行流程
![SSH框架运行流程](https://img.taocdn.com/s3/m/be6ade2cb94ae45c3b3567ec102de2bd9605de91.png)
SSH框架运行流程1.初始化阶段:在初始化阶段,SSH框架会加载配置文件、创建核心对象和建立组件之间的关联关系。
1.1加载配置文件:1.2创建核心对象:1.3建立组件关联:2.请求处理阶段:在请求处理阶段,SSH框架根据请求的URL找到相应的处理器,并将请求参数传递给处理器进行处理。
2.1客户端发送请求:客户端通过浏览器向服务器发送请求,请求的URL中包含了需要调用的方法和相应的参数。
2.2URL映射:2.3参数绑定:2.4方法调用:处理器会调用相应的方法,并将参数传递给方法进行处理。
2.5数据库操作:如果需要进行数据库操作,如增删改查等,处理器会通过Hibernate 框架进行数据库访问。
3.结果返回阶段:在结果返回阶段,SSH框架将处理结果返回给客户端,通常是通过页面展示或异步请求返回数据。
3.1视图解析:如果处理器返回的是页面,SSH框架会根据配置文件中定义的视图解析器,将逻辑视图转换为具体的物理视图。
3.2页面渲染:3.3异步请求返回数据:如果处理器返回的是异步请求的数据,SSH框架会将数据封装成JSON 或XML格式,并通过HTTP协议返回给客户端。
总结:SSH框架的运行流程可以概括为初始化、请求处理和结果返回三个阶段。
在初始化阶段,SSH框架会加载配置文件、创建核心对象和建立组件之间的关联关系;在请求处理阶段,SSH框架根据请求的URL找到相应的处理器,并将请求参数传递给处理器进行处理;在结果返回阶段,SSH框架将处理结果返回给客户端,通常是通过页面展示或异步请求返回数据。
这个流程使得开发者能够快速开发出高质量的Java Web应用程序。
java ssh 面试题
![java ssh 面试题](https://img.taocdn.com/s3/m/421143c403d276a20029bd64783e0912a2167c36.png)
java ssh 面试题Java SSH面试题一、简介SSH(Spring+SpringMVC+Hibernate)是一种常用的Java Web开发框架,被广泛应用于企业级Web应用开发。
在面试中,面试官常常会提问与SSH框架相关的问题。
本文将介绍一些常见的Java SSH面试题及其答案,以帮助准备面试的Java开发人员更好地应对这些问题。
二、常见问题与解答1. 什么是SSH框架?答:SSH框架是由Spring、SpringMVC和Hibernate三个框架组合而成的一种Java Web开发框架。
Spring作为一个轻量级的IoC容器和AOP框架,负责管理Java对象的生命周期和实现面向切面编程。
SpringMVC作为一个基于MVC模式的Web框架,负责请求的分发和处理。
Hibernate作为一个ORM(Object-Relational Mapping)框架,负责将Java对象与数据库中的数据进行映射和交互。
2. SSH框架的优点是什么?答:SSH框架有以下几个优点:- 高度可配置:SSH框架提供了灵活的配置选项,可以根据具体需求进行定制。
- 松耦合:各个组件之间的耦合度较低,开发人员可以针对不同的组件进行独立开发和维护。
- 强大的功能支持:Spring、SpringMVC和Hibernate都是成熟且功能强大的框架,提供了丰富的特性和扩展性。
- 易于测试:SSH框架采用了依赖注入和面向接口编程等技术,使得代码更易于测试和调试。
- 与Java EE标准兼容:SSH框架可以与Java EE标准技术集成,如JSP、Servlet、JPA等。
3. Spring的核心功能是什么?答:Spring的核心功能包括:- IoC容器:负责管理和控制对象的生命周期,通过依赖注入(Dependency Injection)将对象之间的依赖关系交给容器管理。
- AOP框架:通过面向切面编程(Aspect-Oriented Programming),在不修改源代码的情况下,实现对目标对象的增强功能,如日志记录、事务处理等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring定时器在SSH框架中的应用---Spring调度任务本课题参考自《Spring in action》。
并非应用系统中发生的所有事情都是由用户的动作引起的。
有时候,系统自己也需要发起一些动作。
例如,集抄系统每天早上六点把抄表数据传送给营销系统。
我们有两种选择:或者是每天由用户手动出发任务,或者让应用系统中按照预定的计划自动执行任务。
在Spring中有两种流行配置:Java的Timer类和OpenSymphony的Quartz来执行调度任务。
下面以给商丘做的接口集抄900到中间库的日冻结数据传输为例:1. Java Timer调度器首先定义一个定时器任务,继承java.util.TimerTask类实现run方法import java.util.TimerTask;import xj.service.IJdbc1Service;import xj.service.IJdbc2Service;public class DayDataTimerTask extends TimerTask{private IJdbc2Service jdbc2Service=null;private IJdbc1Service jdbc1Service=null;public void run({SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss";System.out.println("日冻结转接任务开始时间:"+df.format(Calendar.getInstance(.getTime(;System.out.println("日冻结转接任务结束时间:"+df.format(Calendar.getInstance(.getTime(;}//通过set方法获取service服务,如果没有该方法,则为nullpublic void setJdbc2Service(IJdbc2Service jdbc2Service {this.jdbc2Service = jdbc2Service;}public void setJdbc1Service(IJdbc1Service jdbc1Service {this.jdbc1Service = jdbc1Service;}}Run(方法定义了当任务运行时该做什么。
jdbc1Service,jdbc2Service通过依赖注入的方式提供给DayDataTimerTask。
如果该任务中没有service服务的set方法,则取到的该service服务为null。
其次,在Spring配置文件中声明dayDataTimerTask:<bean id="dayDataTimerJob" class="xj.action.DayDataTimerTask"><property name="jdbc1Service"><ref bean="jdbc1Service"/>property><property name="jdbc2Service"><ref bean="jdbc2Service"/>property>bean>该声明将DayDataTimerTask放到应用上下文中,并在jdbc1Service、jdbc2Service属性中分别装配jdbc1Service、jdbc2Service。
在调度它之前,它不会做任何事情。
<bean id="scheduledDayDataTimerJob"class="org.springframework.scheduling.timer.ScheduledTimerTask"><property name="timerTask"><ref bean="dayDataTimerJob"/>property><property name="delay"><value>3000 value>property><property name="period"><value>864000000 value>property>bean>属性timerTask告诉ScheduledTimerTask运行哪个TimerTask。
再次,该属性装配了指向scheduledDayDataTimerJob的一个引用,它就是DayDataTimerTask。
属性period告诉ScheduledTimerTask以怎样的频度调用TimerTask的run(方法。
该属性以毫秒作为单位,它被设置为864000000,指定这个任务应该每24小时运行一次。
属性delay允许你指定当任务第一次运行之前应该等待多久。
在此指定DayDataTimerTask的第一次运行相对于应用程序的启动时间延迟3秒钟。
<bean class="org.springframework.scheduling.timer.TimerFactoryBean"><property name="scheduledTimerTasks"><list><ref bean="scheduledDayDataTimerJob"/>list>property>bean>Spring的TimerFactoryBean负责启动定时任务。
属性scheduledTimerTasks要求一个需要启动的定时器任务的列表。
在此只包含一个指向scheduledDayDataTimerJob的引用。
Java Timer只能指定任务执行的频度,但无法精确指定它何时运行,这是它的一个局限性。
要想精确指定任务的启动时间,就需要使用Quartz[kwɔ:ts]调度器。
2.Quartz调度器Quartz调度器不仅可以定义每隔多少毫秒执行一个工作,还允许你调度一个工作在某个特定的时间或日期执行。
首先创建一个工作,继承QuartzJobBean类实现executeInternal方法import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.dao.DataIntegrityViolationException;import org.springframework.scheduling.quartz.QuartzJobBean;import xj.service.IJdbc1Service;import xj.service.IJdbc2Service;public class DayDataQuartzTask extends QuartzJobBean{private IJdbc2Service jdbc2Service=null;private IJdbc1Service jdbc1Service=null;protected void executeInternal(JobExecutionContext context throws JobExecutionException{SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss";System.out.println("日冻结转接任务开始时间:"+df.format(Calendar.getInstance(.getTime(;System.out.println("日冻结转接任务结束时间:"+df.format(Calendar.getInstance(.getTime(;}//通过set方法获取service服务,如果没有该方法,则为nullpublic void setJdbc2Service(IJdbc2Service jdbc2Service {this.jdbc2Service = jdbc2Service;}public void setJdbc1Service(IJdbc1Service jdbc1Service {this.jdbc1Service = jdbc1Service;}}在Spring配置文件中按照以下方式声明这个工作:—声明工作--><bean id="dayDataJob" class="org.springframework.scheduling.quartz.JobDetailBean"><property name="jobClass"><value>xj.action.DayDataQuartzTask value>property><property name="jobDataAsMap"><map><entry key="jdbc1Service">entry><entry key="jdbc2Service"><ref bean="jdbc2Service"/>entry>map>property>bean>Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。
Spring提供了两个触发器SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean与scheduledTimerTasks类似。
指定工作的执行频度,模仿scheduledTimerTasks配置。
<bean id="simpleDayDataJobTrigger"class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property name="jobDetail"><ref bean="dayDataJob"/>property><property name="startDelay"><value>1000 value>property><property name="repeatInterval"><value>86400000 value>property>bean>—调度cron工作--><bean id="dayDataJobTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail">property><property name="cronExpression"><value>0 30 2 * * ? value>property>bean>一个cron表达式有6个或7个由空格分隔的时间元素。