struts2和spring的整合
来源:互联网 发布:python help 用法 编辑:程序博客网 时间:2024/06/02 14:29
最近公司组织学习struts2.0+spring2.0技术,为下一个项目作技术准备。这两个技术对于计算机软件来说,说她是个新技术,但已经很成熟,说她旧新东西还真不少,现在就让我们一块做一个小例子。(适合于已经简单了解struts2和spring原理的同志),这是我在其他人的例子基础上加以细化的:
为了简单起见,文中只是讲操作过程,不讲原理,请大家理解.
(1)新建一个web项目
加入spring-2.0.jar,struts2-core-2.0.11.jar,struts2-spring-plugin-2.0.11.jar,xwork-2.0.4.jar,freemarker-2.3.8.jar,commons-logging-1.0.4.jar,ognl-2.6.11.jar等jar包
(2)修改WEB-INF/web.xml文件了,内容为:
<? xml version="1.0" encoding="UTF-8" ?>
< web-app version ="2.4" xmlns ="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< filter >
< filter-name > struts-cleanup </ filter-name >
< filter-class >
org.apache.struts2.dispatcher.ActionContextCleanUp
</ filter-class >
</ filter >
< filter >
< filter-name > struts2 </ filter-name >
< filter-class >
org.apache.struts2.dispatcher.FilterDispatcher
</ filter-class >
</ filter >
< filter-mapping >
< filter-name > struts-cleanup </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< filter-mapping >
< filter-name > struts2 </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< listener >
< listener-class >
org.springframework.web.context.ContextLoaderListener
</ listener-class >
</ listener >
< welcome-file-list >
< welcome-file > index.html </ welcome-file >
</ welcome-file-list >
</ web-app >
清单1 WEB-INF/web.xml
较纯struts2程序多了两项:
1:加入Spring的ContextLoaderListener监听器,方便Spring与Web容器交互
2:struts-cleanup让程序知道在正确的时候清除请求(servletContext)而不是立即清除,方便在程序中取得servletContext
(3)在Struts.properties中加入以下项:
struts.objectFactory = spring
告知Struts 2运行时使用Spring来创建对象(如Action等).
同样可以实现:
在struts.xml文件中配置:
<struts>
<constant name="struts.objectFactory" value="spring" />
</struts>
(4)创建接口ChatService
package ss;
import java.util.Set;
public interface ChatService {
Set < String > getUserNames();
}
再创建一个默认实现ChatServiceImpl
package ss;
import java.util.HashSet;
import java.util.Set;
public class ChatServiceImpl implements ChatService {
public Set < String > getUserNames() {
Set < String > users = new HashSet < String > ();
users.add( " Max " );
users.add( " Scott " );
users.add( " Bob " );
return users;
}
}
下来,就该新建Action了。tutorial.ChatAction.java的代码如下:
package ss;
import java.util.Set;
import com.opensymphony.xwork2.ActionSupport;
public class ChatAction extends ActionSupport {
private static final long serialVersionUID = 8445871212065L ;
private ChatService chatService;
private Set < String > userNames;
public void setChatService(ChatService chatService) {
this .chatService = chatService;
}
public Set < String > getUserNames() {
return userNames;
}
@Override
public String execute() {
userNames = chatService.getUserNames();
return SUCCESS;
}
}
然后,配置Spring的applicationContext.xml(位于WEB-INF下)文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" >
<bean id ="chatService" class ="ss.ChatServiceImpl" />
<bean id ="chatAction" class ="ss.ChatAction" scope ="prototype" >
<property name ="chatService" >
<ref local ="chatService" />
</property >
</bean >
</beans >
述代码有二点值得大家注意的:
- Struts 2会为每一个请求创建一个Action对象,所以在定义chatAction时,使用scope="prototype"。这样Spring就会每次都返回一个新的ChatAction对象了;
- 因为ChatServiceImpl被配置为默认的scope(也即是singleton,唯一的),所以在实现时应保证其线程安全(关于编写线程安全的代码的讨论已经超出本文的范围,更超出了本人的能力范围,大家可以参考Addison Wesley Professional出版的《Java Concurrency in Practice》)。
spring的配置文件也可以放在其它地方,不过要这样配置一下:
文件web.xml中
<!-- 用来定位Spring XML文件的上下文配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml
</param-value>
</context-param>
接下来,在classes/struts.xml中配置Action,内容如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml" />
<package name="ss" extends="struts-default">
<action name="Chat" class="ss.ChatAction">
<result>/UserList.jsp</result>
</action>
</package>
</struts>
最后,让我们看看/UserList.jsp,内容如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="Utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h2>
User List
</h2>
<s:iterator value="userNames">
<li>
<s:property />
</li>
</s:iterator>
</body>
</html>
大功告成,分布运行应用程序,在浏览器中键入http://localhost:8080/strutsspring/Chat.action,就可以实现了,呵呵
- struts2和spring的整合
- Struts2和Spring的整合
- Spring和Struts2的整合
- Struts2和Spring整合
- Struts2和Spring整合
- Spring和Struts2整合
- Struts2和Spring整合
- Spring和struts2整合
- struts2、Spring和mybatis的整合
- struts2和spring框架的整合
- Struts2、Spring和Hibernate的整合
- Struts2和Spring的整合代码截图
- struts2和spring的简单整合
- 使用Spring插件完成Spring和Struts2的整合
- spring【3】(struts2和spring的整合上)
- spring【3】(struts2和spring的整合下)
- spring和struts2整合详解
- Struts2-Spring和Hibernate整合
- 读《编程之美》中 1的数目 的笔记
- oracle的表空间、分区表、以及索引的总结
- 100以内可以累加为100的整数组合
- DWR reverse ajax
- 用钩子(hook)实现C#的屏幕键盘效果
- struts2和spring的整合
- oracle分区表学习及应用
- ASP.NET页面生命周期
- core dump
- Oracle-Bigfile and Smallfile
- debian镜像地址
- distinct在HQL中使用
- 我可以学好它吗?(制作网站)
- CBR综述(Survey, Reviews or Overviews)