学过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 |
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的一个开始。希望和大家共同探讨,共同学习。