流程:
jsp-->ActionServlet(接收请求)-->ActionForm(填充/页面get/set)-->Action(调用service/注入)
-->service(调用DAO/注入)-->DAO(使用pojos/注入)-->pojos
添加顺序:hibernate->spring->生成pojos->删除asm2.2.3->添加log4j->structs
配置文件:
hibernate配置文件
pojo.hbm.xml + hibernate.cfg.xml 不需要配置
spring配置文件
applicationContext.xml + 实现注解时: xxx.xml
applicationContext.xml
1.spring自动生成sessionFactory
2.spring自动将sessionFactory注入给DAO
3.service注入:将DAO注入给service
4.事务管理器:将sessionFactory注入给HibernateTransactionManager
5.事务属性:<tx:advice:> 注意换头+四大属性
6.织入:<aop>
7.Action:把service注入给Action 注意bean内不是id 而是name 是structs-config中action-mappings中的action中的path
structs配置文件
structs-config.xml 在WEB-INF下
1.ActionForm: name+type
2.Action: path:页面请求 parameter:页面请求参数p name:formBean type:Action
web.xml 在WEB-INF下
1.初始化配置
contextConfigLocation -->classpath:appli*.xml
2.过滤器
中文处理 chineseFilter -->CharacterEncodingFilter + init-param:encoding->utf-8
session控制开关 openSessionInViewFilter 关闭session
3.监听器
ContextLoaderListener 监听applicationContext.xml文件
4.servlet
ActionServlet 是structs核心控制器 工具配置structs会自动生成
在dwr实现下需要手动配置DwrServlet
applicationContext.xml如下:
<!-- spring自动创建sessionFactory工厂 -->
<!-- 取代了hibernate实现 由于事务 spring本身实现了代理 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- DAO -->
<!-- spring对hibernate封装模板HibernateTemplate DAO继承HibernateDaoSupport -->
<!-- HibernateDaoSupport 存在setSessionFactory 需要注入 -->
<bean id="EmpDAO" class="com.dao.EmpDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="DepDAO" class="com.dao.DepDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 业务层service -->
<bean id="empService" class="com.service.EmpService">
<property name="depDAO" ref="DepDAO"></property>
<property name="empDAO" ref="EmpDAO"></property>
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 事务属性advice -->
<tx:advice id="mytx" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 织入 -->
<aop:config>
<aop:advisor advice-ref="mytx" pointcut="execution(* com.service.*.*(..))"/>
</aop:config>
<!-- action -->
<!-- action调用service service由spring注入 -->
<!-- 在struts-config.xml中的action-mapping不需要structs去new action 只需要代理即可 由spring代理实现 -->
<bean name="/emp" class="com.actions.EmpAction">
<property name="empService" ref="empService"></property>
</bean>
<!-- 注意:bean内是name 不是id name中的内容是action-mappings下的action的path-->
web.xml如下:
<!-- 配置文件路径:contextConfigLocation:读取applicationContext.xml文件
spring内部通过SAX解析xml文件
过滤器:
session开关:OpenSessionInViewFilter:打开对数据库的操作
中文处理:CharacterEncodingFilter 注意初始化参数别忘记写
监听器:
ContextLoaderListener:加载applicationContext.xml文件
structs-action:
ActionServlet:获取页面*.do请求
//如果不使用structs,而是dwr,需要配置DWRSwrvlet
在WEB-INF下。。。
-->
<!-- 配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app*.xml</param-value>
</context-param>
<!-- 控制session开关 -->
<filter>
<filter-name>OpenSession</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<!-- 中文处理 -->
<filter>
<filter-name>ChineseFilter</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>
</filter>
<filter-mapping>
<filter-name>OpenSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ChineseFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 监听器 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- action ActionServlet(structs工具自动生成)-->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
struts-config.xml如下:
<!-- form-bean -->
<form-beans> <!-- empForm随便取的 在action-mapping中使用 -->
<form-bean name="empForm" type="com.forms.EmpForm"></form-bean>
</form-beans>
<global-exceptions />
<global-forwards />
<!-- action-mapping -->
<action-mappings> <!-- 页面路径以/emp的接收 填充到name="empForm" 到spring代理的action处理 参数通过p获取页面的p 在action中就要写p作为键的值的方法 -->
<action path="/emp" name="empForm" type="org.springframework.web.struts.DelegatingActionProxy" parameter="p"></action>
</action-mappings>
<!-- 请求处理器 com.util.MyRequest继承RequestProcessor处理编码问题 -->
<controller processorClass="com.util.MyRequest"></controller>
<!-- 资源文件 i18n国际化 -->
<message-resources parameter="com.yourcompany.struts.ApplicationResources" />