学过Java的童鞋都知道,Java中各式各样的框架多如牛毛,Web前端的框架也是数不胜数。在这里,我们要弄清楚一点,我们为什么要学习框架?(多就多呗,关我啥事儿?)
荀子曰:“君子性非异也,善假于物也”。框架不是成型的产品,而是给开发人员用的二次开发包。框架能够帮助我们简化开发步骤,减少工作量,辅助开发人员更加有效的进行开发。各式各样的开源框架的产生其实得益于Java的开源,是Java的开源,使得各种各样的Java框架迅速发展。。(有点跑。。)所以说,善于利用工具,善于利用框架辅助我们进行开发,也是一种非常重要的能力。
但是,如果想将这些框架都学完的话,那还不如直接去自杀更痛快一些,太痛苦了。所以,在学习框架的过程中,有一个正确的态度对待框架是非常重要的。
在过去的年代,学五车竹简书就已经很有才华了(学富五车),但是现如今信息爆炸的时代,上了二十多年的大学生仍然找不到工作。
所以,你别指望着把知识学完,要在学习框架的过程中,对一些经典的框架、典型框架进行深入剖析,以后工作中用到的框架也比较固定,即便是你没学过的,但是你学过类似的框架,类比着学,掌握学习的方法,就能轻松做到触类旁通。
在前面的文章中,分别介绍了struts、Hibernate、spring中的一些概念。今天,我们就来对SSH2框架进行集成。下面看开发环境搭建:
引入的jar包介绍:
(其实,为了深究这三个框架,大家应该明白每个jar包的主要功能是什么,因为不怕你不知道某个jar包怎么用,就怕你不知道这个框架有这个功能 。看完后你很可能记不住,但是你肯定有看过那一遍的印象。这里,我就只将应到的包的功能查了出来,并放在了这里,其他的大家自己下去查。)
struts2
jar包 |
主要内容 |
commons-fileupload-1.3.jar |
文件上传 |
commons-io-2.0.1.jar |
commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的 |
commons-lang3-3.1.jar |
commons中的lang包 |
freemarker-2.3.19.jar |
支持freemaker的,在webwork中也有。struts2的UI标签的模板使用FreeMarker编写 |
javassist-3.11.0.GA.jar |
一个开源的分析、编辑和创建java字节码的类库(Hibernate中也需要,引入一个即可) |
ognl-3.0.6.jar |
Object-Graph Navigation Language表达式,对象图导航语言。struts2通过其读写对象的属性 |
struts2-core-2.3.15.1.jar |
核心包 |
struts2-spring-plugin-2.3.15.1.jar |
Struts与Spring集成时使用的,引入该jar包后需要在struts.xml中指定struts的ObjectFactory(可以使struts也可以使Spring),不然程序报错 |
xwork-core-2.3.15.1.jar |
WebWork和Struts2所依赖的核心包 |
Spring:
jar包 |
主要内容 |
lib/aspectj/ aspectjrt.jar |
支持AOP的包 |
lib/aspectj/ aspectjweaver.jar |
处理事务和aop所需包 |
lib/jakarta-commons/commons-logging.jar |
ASF出品的日志包,三个框架使用这个日志包来支持log4J和JDK的日志记录 |
lib/jakarta-commons/commons-pool.jar |
支持BasicDataSource来配置数据库连接 |
lib/jakarta-commons/commons-dbcp.jar |
支持BasicDataSource来配置数据库连接 |
dist/spring.jar |
Spring核心包 |
lib/cglib/cglib-nodep-2.1_3.jar |
支持cglib动态代理的包 |
common-annotations.jar |
注解包 |
Hibernate:
jar包 |
主要内容 |
lib/ required/ antlr-2.7.6.jar |
语言转换工具,Hibernate利用它实现HQL到SQL的转换 |
lib/ required/commons-collections-3.1.jar |
包含了一些Apache开发的集合类。commons项目中的子项目,是对collection集合的封装 |
lib/ required/dom4j-1.6.1.jar |
读写xml文件 |
hibernate3.jar |
核心包 |
lib/jpa/ hibernate-jpa-2.0-api-1.0.0.Final.jar |
对JPA规范的支持 |
lib/bytecode/ javassist/javassist-3.12.0.GA.jar |
一个开源的分析、编辑和创建Java字节码的类库 |
lib/ required/jta-1.1.jar |
标准的java中事务处理接口 |
web.xml文件
<?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" 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>SSH2</display-name> <context-param> <param-name>contextConfigLocation</param-name> <!-- 如果将该xml文件放在WEB-INF下面的话,就需要下面配置 <param-value>WEB-INF/applicationContext.xml</param-value> --> <!-- 下面是默认配置 --> <param-value>classpath:com/lzq/config/applicationContext-*.xml</param-value> </context-param> <!-- 配置spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Struts2配置 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,com/lzq/config/struts.xml</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Spring的配置文件: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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 启用spring注解支持 --> <context:annotation-config /> <!-- 第一种配置sessionFactory的方法:这种方法,需要Hibernate的hibernate.cfg.xml文件 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="configLocation"> <value>classpath:config/hibernate.cfg.xml</value> </property> 如果采用注解的方式注册实体类,则可以采用如下方法来简化注册步骤,并且class为AnnotationSessionFactoryBean <property name="packagesToScan"> <list> <value>com.lzq.config</value> </list> </property> </bean> --> <!-- 第二种配置sessionFactory的方法:使用BasicDataSource配置数据库连接 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/SSH2"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- 设置Hibernate属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!--如果采用传统的hbm.xml的方式,可以采用如下方式来简化注册hbm.xml的步骤, 并且class为LocalSessionFactoryBean --> <property name="mappingLocations"> <list> <value>classpath:/com/lzq/entity/*.hbm.xml</value> </list> </property> </bean> <!-- 事务管理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!--配置事务 事务细节 :事务的传播特性 --> <tx:advice id="txadvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="modify*" propagation="REQUIRED" no-rollback-for="myException"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置参与事务的类 --> <aop:config> <aop:pointcut expression="execution(* com.lzq.dao.*.*(..))" id="daoMethod"/> <aop:advisor advice-ref="txadvice" pointcut-ref="daoMethod"/> </aop:config> </beans>
struts2的配置文件——struts.xml文件
<?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.3.dtd"> <struts> <!-- 访问时,不需要加.action,无须任何后缀名 --> <constant name="struts.action.extension" value=","></constant> <!-- 引入上传的配置文件 --> <include file="com/lzq/config/struts-upload.xml"></include> <!-- 告诉struts2,action的创建交给spring --> <constant name="struts.ObjectFactory" value="spring"></constant> <!-- package:用来统一管理action --> <package name="loginAction" namespace="/user" extends="struts-default"> <action name="login" class="loginAction"> <result name="success" type="redirect">../user.jsp</result> <result name="error" type="redirect">/error.jsp</result> </action> </package> <package name="userManager" namespace="/user" extends="struts-default"> <!-- 拦截连 --> <interceptors> <interceptor name="myInterceptor" class="myInterceptor4" /> <interceptor-stack name="defaultInterceptorStack"> <interceptor-ref name="myInterceptor"></interceptor-ref> <!-- 拦截器 配置问手写的拦截器,还要配置struts2的拦截器,不然后冲掉手写的拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <action name="*User_*" class="userManagerAction" method="{1}User"> <!-- 默认是转发 --> <result name="success" type="redirect">/success.jsp</result> <!-- 重定向 --> <result name="error" type="redirect">/error.jsp</result> <result name="checkError">/checkError.jsp</result> <!-- 拦截连 --> <interceptor-ref name="defaultInterceptorStack"></interceptor-ref> </action> </package> </struts>
像上面这样,就基本配置了SSH2的开发环境,具体的细节的东东就不往上粘了,提供实例下载(SSH2实例下载),想仔细学习的童鞋可以去下载实例慢慢研究,想了解大概思路的童鞋看本文内容就足够了。
SSH2三个框架中需要学习的内容还是很多的,这里只是介绍了基础中的基础,只搭建了开发环境,本篇博客也只算是学习SSH2的一个开始。希望和大家共同探讨,共同学习。