在spring和struts整合之前,需要导入spring和struts的jar包
原理:
1、用spring来管理struts的action:
在spring的配置文件中配置action和action所依赖的业务逻辑对象。
2、因为Action要调用业务逻辑对象,将业务逻辑对象注入到Action中,从而避免在Action类中直接进行代码查找:
因此Action中要有业务逻辑对象的声明和此对象的set方法
在spring的配置文件中配置他们之间的依赖关系
3、在struts的配置文件里把action的type改成spring的一个代理类:
org.springframework.web.struts.DelegatingActionProxy
此代理类功能:创建BeanFactory、到IoC容器里查找用户请求的Action。
根据<action>中的path属性值到IoC容器中取得本次请求对应的Action。
4、在spring的配置文件中定义struts的action.注意:必须使用name属性
将Action的 scope设置为prototype多粒模式
必须注入业务逻辑对象
部署描述符 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 定义spring的配置文件,此文件会被spring的监听器获得 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- ContextLoaderListener默认监听spring的applicationContext.xml配置文件 -->
<!-- 当spring的配置文件改名了,就需要有上面的<context-param>配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置Struts ActionServlet -->
<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>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- 配置Struts ActionServlet 的请求路径-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
spring的配置文件 applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="uManage" class="com.cos.manager.UserManager"/>
<!-- 把userManage注入进来、一定要用name不要用id、多粒模式 -->
<bean name="/login" class="com.cos.action.LoginAction" scope="prototype">
<property name="userManager" ref="uManage"/>
</bean>
</beans>
struts的配置文件 struts-config.xml:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE struts-config SYSTEM "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="userForm" type="com.cos.form.UserForm"></form-bean>
</form-beans>
<action-mappings>
<!-- 当一个.do请求过来,先进入struts的配置文件,将此action代理给spring的action管理 -->
<!-- DelegatingActionProxy类使用映射名称path查找Spring环境中的动作名称name -->
<!-- path的值要和spring action中的name值相同 -->
<!-- type的值是spring的代理action: DelegatingActionProxy -->
<!-- 此代理类完成了BeanFactory的创建、根据path值到IoC容器里的查找本次请求对应的Action -->
<action path="/login"
type="org.springframework.web.struts.DelegatingActionProxy"
scope="request"
name="userForm">
<forward name="success" path="/success.jsp" />
</action>
</action-mappings>
</struts-config>
此处一定要把type值配置成DelegatingActionProxy:
把用户的请求提交给spring的action,spring的action创建BeanFactory,再由spring的action调用struts的action。
登录页面 login.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<form action="login.do" method="post">
<table>
<tr>
<td>用户名:</td><td><input type="text" name="username"></td>
</tr>
<tr>
<td>密 码:</td><td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
LoginAction.java:
package com.cos.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.cos.form.UserForm;
import com.cos.manager.UserManager;
public class LoginAction extends Action {
//把此对象注入进来,用set()方法
private UserManager userManager;
public ActionForward execute(ActionMapping mapping, ActionForm actionfrom,
HttpServletRequest request, HttpServletResponse response) {
UserForm loginForm = (UserForm)actionfrom;
userManager.createUser(loginForm.getUsername(), loginForm.getPassword());
return mapping.findForward("success");
}
//set()方法
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
}
struts的FormBean: UserForm.java
package com.cos.form;
import org.apache.struts.action.ActionForm;
public class UserForm extends ActionForm {
private static final long serialVersionUID = 1L;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
业务处理类 UserManager.java:
package com.cos.manager;
//业务逻辑处理
public class UserManager {
public void createUser(String username, String password) {
System.out.println("业务逻辑处理:用户名:" + username + ",密码:" + password);
}
}
成功页面 success.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
登录成功。<a href="login.jsp">返回</a>
</body>
</html>
运行结果:跳转到成功页面success.jsp、控制台打印出 "业务逻辑处理:用户名:xxx,密码:xxx"
优点:
在LoginAction中没有和业务逻辑对象UserManager耦合,即:没有 new UserManager();
注:
如果spring没有使用默认的配置文件名称:applicationContext.xml,那么一定要在web.xml文件中配置:
<!-- 定义spring的配置文件,此文件会被spring的监听器获得 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- <param-value>classpath:applicationContext-*.xml</param-value> -->
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
如果使用了默认名称,则可以不添加<context-param>这段代码。
分享到:
相关推荐
《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...
一个简单的spring+struts2+hibernate+mybatis整合(数据库脚本放在项目资源文件的sql目录下) 因为没想好mvc用springmvc好,还是struts2好 所以没有整合进去
一个spring+struts+hibernate的例子,是eclipse的工程,用tomcat5和mysql,文件夹下包含所有的源码和库,另外还有一个.sql的文件用于建立数据库。大家觉得它有什么不好,欢迎交流
在Java Web开发中,Spring、Struts2和iBatis是三个非常重要的框架,它们各自在不同的层面上提供了强大的功能。Spring是一个全面的后端应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能;Struts...
### SSH框架整合详细步骤(spring+struts2+hibernate) #### 一、整合概述 在现代Web应用开发中,SSH(Struts2、Spring、Hibernate)框架因其各自独特的功能和优势,常被组合使用以构建高效、稳定且易于维护的系统...
一个简单的spring+struts+ibatis整合的实例,实现了用户登录,用户登录成功则显示欢迎信息,失败则显示用户名或密码错误,该实例非常简单基础,特别适合新人学习,工程包含了必要的资源包,部署到服务器中及可运行,...
在学习和使用Spring+Struts+Hibernate的例子时,要注意理解每个框架的核心概念,熟悉它们的配置方式,以及如何通过XML或注解进行组件装配。同时,实践中应注重代码的规范性和可读性,遵循良好的编程习惯,这样才能更...
在Spring+Struts+ibatis这种经典的Java Web开发框架组合中,主要涉及到三层架构:表现层(Action)、业务逻辑层(Service)和数据访问层(DAO)。这些组件协同工作,实现了应用程序的功能。以下是对各部分的详细解释...
标题中的"spring+struts+ibatis"是指一种经典的Java Web开发架构,也被称为SSM框架。这个架构结合了Spring框架、Struts2框架和iBatis(现在称为MyBatis)来构建高效且可维护的Web应用。下面将详细阐述这三个框架以及...
标题中的"spring+struts1+hibernate+jbpm实例"揭示了这是一个基于Java技术栈的Web应用程序开发实例,其中涉及四大核心技术:Spring、Struts1、Hibernate和JBPM。接下来,我们将深入探讨这些技术及其在实际项目中的...
标题中的"spring+struts2+mybatis实例"是指一种常见的Java Web开发框架组合,通常称为SSM框架。SSM是Spring、Struts2和MyBatis三个开源框架的缩写,它们各自负责应用程序的不同部分,协同工作以构建高效、模块化的...
Spring、Struts和Hibernate是Java开发中非常经典的三大框架,它们各自负责应用程序的不同层面:Spring作为全面的容器和依赖注入框架,负责管理对象和提供事务处理;Struts则是一个MVC(模型-视图-控制器)框架,主要...
Spring、Struts2和MyBatis是Java Web开发中非常流行的三大开源框架,它们各司其职,共同构建了一个高效、灵活的企业级应用框架。在这个"Spring+Struts2+MyBatis完整框架"中,我们可以看到这三者是如何协同工作的。 ...
**Spring+Struts2+JPA 整合详解** 在Java Web开发中,Spring、Struts2和JPA是三个非常重要的框架。Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Struts2是一个强大的MVC框架...
本项目以"Spring+Struts2+Hibernate"三大框架为核心,旨在实现一个校园精品课程网的后台系统,提供丰富的功能和良好的用户体验。下面将详细介绍这三个框架以及它们在该项目中的应用。 1. Spring框架:Spring是Java...
Spring+Struts2+Mybatis的一个增删改查的例子,本例子使用 Spring+Struts2 + Mybatis 框架整合,实现了对用户表数据的增、删、改、查的功能, 基于 Spring 注解实现, 省去了 Spring 繁琐的 bean 手工配置。
Spring+Struts2+iBatis是一个经典的Java轻量级开发框架组合,主要用于构建Web应用程序。这三个框架协同工作,提供了一种高效、灵活的解决方案,帮助开发者实现MVC(Model-View-Controller)架构。 首先,Spring框架...
"Spring+Struts+Hibernate"(SSH)框架是Java Web开发中的经典组合,被誉为"三剑客"。这个框架集合提供了全面的企业级应用解决方案,帮助开发者构建高效、可扩展且易于维护的Web应用程序。 Spring框架是核心,它...
标题 "自己的spring+struts2+mybatis Demo" 暗示了这是一个使用Spring、Struts2和MyBatis三个框架构建的Web应用程序示例。这个项目可能是为了教学或者实践目的,展示了如何将这三个流行的技术集成在一起以创建一个...
一个简答的spring+Struts2+mybatis框架整合的demo