构建SSH框架步骤struts2.1.8.1+spring2.5.6+hibernate3.3.2
一、先分好层,如 action service dao model
二、整合hibernate
??? ①加hibernate所需要的包和数据库的驱动包(这里用的是与oracle交互,所以引入classes12.jar):
??? antlr-2.7.6.jar
??? commons-collections-3.1.jar
??? dom4j-1.6.1.jar
??? ejb3-persistence.jar
??? hibernate3.jar
??? hibernate-annotations.jar
??? hibernate-commons-annotations.jar
??? javassist-3.9.0.GA.jar
??? jta-1.1.jar
??? log4j-1.2.15.jar
??? slf4j-api-1.5.8.jar
??? slf4j-log4j12-1.5.8.jar
??? ②加上与数据库的连接,这里用jdbc.properties,简单配置与数据库的连接,后面的配置交给spring
???
三、加junit的包(这步可省略,这里是为了测试)??
???? junit-4.4.jar
????
四、???? 整合struts
?? ① 加struts需要的基础包
???? commons-fileupload-1.2.1.jar
???? commons-io-1.3.2.jar
???? commons-logging.jar
???? freemarker-2.3.15.jar
???? ognl-2.7.3.jar
???? struts2-core-2.1.8.1.jar
???? xwork-core-2.1.6.jar
????? 另外:
???? struts2-convention-plugin-2.1.8.jar(支持sturts的注解,struts.xml就可以不需要了)
???②在web.xml中加入struts的核心filter
?? <!-- struts2核心拦截器配置 -->
???? <filter>
????????? <filter-name>struts2</filter-name>
????????? <filter-class>
?????????????? org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
????????? </filter-class>
???? </filter>
???? <filter-mapping>
????????? <filter-name>struts2</filter-name>
????????? <url-pattern>/*</url-pattern>
???? </filter-mapping>
?? ③另外:
??? 还有struts和spring整合的包
??? struts2-spring-plugin-2.1.8.1.jar(注意相应版本)
??? 注意:action是由struts管理,所以想在struts中注入spring中管理的service、dao
??? 等bean,需要加struts2-spring-plugin文件,然后有以下两种方法
????a.
????????? Action类前加@Component,则Action可由spring来管理,例子如下:
????????? Action中写:
????????? @Component("u") //spring管理注解
????????? @Scope("prototype") //多态
????????? public class UserAction extends ActionSupport implements ModelDriven{
?????????????? //内部属性需要有get/set方法 且需要set方法前加@Resource或@Autowired
????????? }
????????? Struts2配置文件中写
????????? <action name="u" action="u.do" >
???? b.
???? ??? Action中也可不加@Component,Action由struts2-spring-plugin管理。此时,如果Action中定义的属性有set方法 则@Autowired 与@Resource也可不写,但是如果没有set方法,则需要在属性前加上@Autowired 或@Resource才能生效。
???
??? 注意:a.这里是struts的action由struts-spring的插件与struts管,是按名称注入,但并非由spring注入,
???????????? 当它需要的service时,到spring容器中找,进行注入,所以在acton上不用加@Component("u")
? ? ? ? ??? ?b.action里面的属性(需要注入的属性)在set上是可以不用加@Autowired 或@Resource的,因为它会自动按照你属性的名字按名称在spring中找,进行注入,这时在set方法上写了也无用
?????????????? 但若要指定注入的名称,则可在属性名称上加@Autowired 或@Resource
?????????????? 比如:
?????????????? @Autowired
?????????????? @Qualifier("portalTemplateFieldService")
?????????????? private IPortalTemplateFieldService portalTemplateFieldService;
?????????????? 或:
?????????????? @resource(name ="portalTemplateFieldService")
?????????????? private IPortalTemplateFieldService portalTemplateFieldService;
?????????
????????? c.不过也可以将action交给spring注入,那么就可以在set方法上加@resource注入了
????????? 这时的配置如下:
????????? struts.xml中:
?????????????? ? <package name="test" namespace="/test" extends="struts-default">
??????????????????? <action name="uu" value="UTF-8" />
????
???? ②???? 使用spring的characterencoding
???? 例:
???? <!-- 过滤器相关配置 ======== 字符编码过滤======== -->
???? <filter>
????????? <filter-name>CharacterEncodingFilter</filter-name>
????????? <filter-class>
?????????????? org.springframework.web.filter.CharacterEncodingFilter
????????? </filter-class>
????????? <init-param>
?????????????? <param-name>encoding</param-name>
?????????????? <param-value>UTF-8</param-value>
????????? </init-param>
????????? <init-param>
?????????????? <param-name>forceEncoding</param-name>
?????????????? <param-value>true</param-value>
????????? </init-param>
???? </filter>
? ? ? ? ? ? ? ? ??