SSH框架学习(二、在struts基础上加入spring)

来源:互联网 发布:手机淘宝网旺信在哪 编辑:程序博客网 时间:2024/05/18 00:01

原文转自:http://blog.csdn.net/wuyt2008/article/details/8236269

spring现在的版本是3.1.3,下载地址http://www.springsource.org/spring-framework#download 

spring的包里面没有提供例子,额,这点不如struts。


1、导入包。

首先需要添加struts的spring插件:struts2-spring-plugin-2.3.7.jar

其次,spring还需要一个外部的jar:commons-logging-1.1.1.jar,下载地址http://commons.apache.org/logging/download_logging.cgi

在这里,spring只需要以下几个jar



2、新建packa:demo.myssh.business,添加UserService类。

[java] view plaincopy
  1. package demo.myssh.business;  
  2.   
  3. public class UserService {  
  4.   
  5.     public String doing()  
  6.     {  
  7.         return "UserService working";  
  8.     }  
  9. }  

3、为了让UserService能够注入到UserAction,还需要为UserAction添加注入用的属性和方法

[java] view plaincopy
  1. package demo.myssh.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. import demo.myssh.business.UserService;  
  5.   
  6. @SuppressWarnings("serial")  
  7. public class UserAction extends ActionSupport {  
  8.   
  9.     @Override  
  10.     public String execute() throws Exception {  
  11.   
  12.         this.addActionMessage("UserAction working");  
  13.         // this.addActionMessage("hello world.");  
  14.         this.addActionMessage(userService.doing());// 修改下,确认注入成功。  
  15.   
  16.         return ActionSupport.SUCCESS;  
  17.     }  
  18.   
  19.     // 注入用属性  
  20.     private UserService userService;  
  21.   
  22.     // 注入用的方法  
  23.     public void setUserService(UserService userService) {  
  24.         this.userService = userService;  
  25.     }  
  26.   
  27. }  

4、在web.xml文件中加入spring的监听器

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  6.     <display-name>myssh</display-name>  
  7.   
  8.     <filter>  
  9.         <filter-name>struts2</filter-name>  
  10.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  11.     </filter>  
  12.   
  13.     <filter-mapping>  
  14.         <filter-name>struts2</filter-name>  
  15.         <url-pattern>*.action</url-pattern>  
  16.     </filter-mapping>  
  17.   
  18.     <!-- 加入spring的监听器 -->  
  19.     <listener>  
  20.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  21.     </listener>  
  22.   
  23.     <welcome-file-list>  
  24.         <welcome-file>index.jsp</welcome-file>  
  25.     </welcome-file-list>  
  26.   
  27. </web-app>  


5、修改struts.xml文件

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.3.dtd">  
  5. <struts>  
  6.     <package name="mysshdemo" extends="struts-default">  
  7.         <action name="user" class="userAction">  
  8.             <result>/index.jsp</result>  
  9.         </action>  
  10.     </package>  
  11. </struts>  



6、在WEB-INF目录下新建applicationContext.xml文件

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  6.   
  7.     <bean id="userAction" class="demo.myssh.action.UserAction">  
  8.         <property name="userService" ref="userService" />  
  9.     </bean>  
  10.   
  11.     <bean id="userService" class="demo.myssh.business.UserService"></bean>  
  12. </beans>  

这时候访问:http://localhost:8080/user.action

到此,基本的struts2+spring3搭建完成。


要点:这里有3个对应关系一定要注意

1、struts配置文件中,action的class属性要对应到spring配置文件中的bean的id,这样,struts就只负责传递,而所有servlet都有spring来管理。

我试过,struts.xml中,

不用<action name="user" class="userAction">

用<action name="user" class="demo.myssh.action.UserAction">也能正常运行。但是奇怪的是我之前如果这么用就无法注入。不确定是struts版本的问题还是哪里的问题。

个人理解,如果class里面配置的是个id,那么,action将有spring来直接管理。如果class里面配置的是类名,则action将有struts来处理。

推荐还是将action交给spring来管理的好,逻辑上更清晰,也不容易出现奇怪的问题。


2、spring配置文件中,注入类不是直接使用其类名,而是通过bean的id来获取。要注入哪个类,就在ref中填入那个的bean的id。

3、spring配置中注入属性的名称必须和java类里的属性名一致,并且,该属性还要提供set方法。


原创粉丝点击