SSH整合时知识点

本文采用struts2.3.16+hibernate3.6+spring3.2.8进行整合

[b]jar包列表[/b]
[list]
[*]antlr-2.7.6.jar
[*]aopalliance-1.0.jar
[*]asm-3.3.jar
[*]asm-commons-3.3.jar
[*]aspectjweaver.jar
[*]commons-collections-3.1.jar
[*]commons-dbcp-1.2.1.jar
[*]commons-fileupload-1.3.1.jar
[*]commons-io-2.2.jar
[*]commons-lang3-3.1.jar
[*]commons-logging-api.jar
[*]commons-logging.jar
[*]commons-pool-1.2.jar
[*]dom4j-1.6.1.jar
[*]freemarker-2.3.19.jar
[*]hibernate-jpa-2.0-api-1.0.1.Final.jar
[*]hibernate3.jar
[*]javassist-3.18.1-GA.jar
[*]jta-1.1.jar
[*]mysql-connector-5.1.8.jar
[*]ognl-3.0.6.jar
[*]slf4j-api-1.6.1.jar
[*]spring-aop-3.2.8.RELEASE.jar
[*]spring-beans-3.2.8.RELEASE.jar
[*]spring-context-3.2.8.RELEASE.jar
[*]spring-context-support-3.2.8.RELEASE.jar
[*]spring-core-3.2.8.RELEASE.jar
[*]spring-expression-3.2.8.RELEASE.jar
[*]spring-jdbc-3.2.8.RELEASE.jar
[*]spring-orm-3.2.8.RELEASE.jar
[*]spring-tx-3.2.8.RELEASE.jar
[*]spring-web-3.2.8.RELEASE.jar
[*]struts2-convention-plugin-2.3.16.1.jar
[*]struts2-core-2.3.16.1.jar
[*]struts2-spring-plugin-2.3.16.1.jar
[*]xwork-core-2.3.16.1.jar
[/list]

[b]web.xml[/b]

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SSH1</display-name>

<!--
当hibernate采用懒加载时需要用到此过滤器,位于struts过滤器之前,
因为必须等struts处理完JSP后才能关闭session;如果spring没有配置
事务边界,则openSessionInView会认为所有事务为readonly,进行增删
改动作时会报错
-->
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<!-- 查看源码可知,可过滤器依赖名字为“sessionFactory”的bean,
如果默认名字不是“sessionFactory”,需要加如下初始化参数。
-->
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sf</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<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>

<!-- spring容器初始化 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 加载的配置文件,具体参考spring的文章 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:beans.xml</param-value>
</context-param>
</web-app>


[b]另外几个注意点[/b]
1.struts2集成spring需加入struts-spring-plugin-2.3.16.jar,在此jar包中有个struts-plugin.xml,其中有个属性为struts.objectfactory=spring。
3.action有两种产生方式
3.1 由struts产生,会自动产生多实例
action中的属性会自动按照name注入(对应struts-spring.xml的属性为struts.objectfactory.spring.autowire=name),如果存在对应名字的bean,则属性不需要加@resource注解;如果不存在相应的名字的bean,则会注入失败,此时应该加上@Resource。或者将struts.objectfactory.spring.autowire=type。
action示例注解如下:

@Action(value="userAction",
results={@Result(name="list",location="/listuser.jsp")})

3.2 由spring产生
action交由spring管理。示例如下:
 
@Controller("userAction")
@Scope("prototype")
@Action(className="userAction",value="userAction"
results={@Result(name="list",location="/listuser.jsp")})

注意scope注解必须加,以及@Action中加className代表引用的spring容器的bean
4.中文问题,有如下几种办法
a.在struts2.1.6以上版本,直接找struts默认配置文件default.properties文件中的常量struts.i18n.encoding,看看此属性的值是什么,默认是UTF-8,注意JSP也要是UTF-8。
b.如果是struts2.1.6以下版本,可以自己写fitler(参考spring的实现)或者用spring提供的过滤器。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值