Spring之WEB模块

Spring的WEB模块用于整合Web框架,例如Struts 1、Struts 2、JSF等

整合Struts 1

继承方式

Spring框架提供了ActionSupport类支持Struts 1的Action。继承了ActionSupport后就能获取Spring的BeanFactory,从而获得各种Spring容器内的各种资源

import  org.springframework.web.struts.ActionSupport;

public class CatAction extends ActionSupport{
      public ICatService getCarService(){
             return (ICatService) getWebApplicationContext().getBean("catService");
      }
      public ActionForward execute(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){
             CatForm catForm = (CatForm) form;
             if("list".equals(catForm.getAction())){
                    returnthis.list(mapping,form,request,response);
             }
      }

      public ActionForward list(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){
             CatForm catForm = (CatForm) form;
             ICatService catService =getCatService();
             List<Cat> catList =catService.listCats();
             request.setAttribute("carList",catList);

             return mapping.find("list");
      }
}

Spring在web.xml中的配置

<context-param><!--  Spring配置文件的位置-->
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>

<listener><!--  使用Listener加载Spring配置文件-->
      <listener-class>
             org.springframework.web.context.ContextLoaderListener
      </listener-class>
</listener>

<filter><!--  使用Spring自带的字符过滤器-->
      <filter-name>CharacterEncodingFilter</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>
      <init-param>
             <param-name>forceEncoding</param-name>
             <param-value>true</param-value>
      </init-param>
</filter>
<filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

如果与Hibernate结合使用,需要在web.xml中添加OpenSessionInViewFilter过滤器,将session范围扩大到JSP层,防止抛出延迟加载异常

<filter>
      <filter-name>hibernateFilter</filter-name>
      <filter-class>org.springframework.orm.hibernate3.support. OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
      <filter-name> hibernateFilter</filter-name>
      <url-pattern>*.do</url-pattern><!--  对Struts 1的Action启用-->
</filter-mapping>

代理方式

继承方式融入Spring非常简单,但是缺点是代码与Spring发生了耦合,并且Action并没有交给Spring管理,因此不能使用Spring的AOP、IoC特性,使用代理方式则可以避免这些缺陷

public class CatAction extends Action{  //此处继承的Struts 1的Action
      private ICatService catService;
      //setter、getter略

      public ActionForward execute(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){
             CatForm catForm = (CatForm) form;
             if("list".equals(catForm.getAction())){
                    returnthis.list(mapping,form,request,response);
             }
      }

      public ActionForward list(ActionMappingmapping,ActionForm form,HttpServletRequest request,HttpServletResponseresponse){
             CatForm catForm = (CatForm) form;
             ICatService catService =getCatService();
             List<Cat> catList =catService.listCats();
             request.setAttribute("carList",catList);

             return mapping.find("list");
      }
}

这个Action没有与Spring发生耦合,只是定义了一个ICatService属性,然后由Spring负责注入

struts-congfig.xml配置

<form-beans>
      <form-bean name="catForm" type="com.clf.spring.CatForm">
</form-beans>

<action-mappings>
      <action name=" catForm"  path="/cat" type="com.clf.spring.CatAction">
             <forward name="list" path="/jsp/listCat.jsp"></forward>
      </action>
</action-mappings>

<!--  最核心的配置,该配置把Struts的Action交给Spring代理-->
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />

<!-- controller配置生效后,Action的type属性就是去作用了,Struts不会用type属性指定的类来创建CatAction,而是到Spring配置中寻找,因此Spring中必须配置CatAction -->
<!--  Spring中配置Action使用的是name属性而不是id,Spring会截获"/cat.do"的请求,将catService通过setter方法注入到CatAction中,并调用execute()方法-->
<bean name="/cat" class=" com.clf.spring.CatAction">
      <property name="catService" ref="catService" />
</bean>

web.xml的配置与上面的继承方式相同

使用代理方式的Action可以配置拦截器等Spring特性,例如给CatAction配置方法前拦截器和返回后拦截器

<bean id="catBeforeInterceptor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvodor">
      <property name="advice">
             <bean class="com.clf.spring.MethodBeforeInterceptor" />
      </property>
      <property name="mappedName" value="*"></property>
</bean>

<bean id="catAfterInterceptor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvodor">
      <property name="advice">
             <bean class="com.clf.spring.MethodAfterInterceptor" />
      </property>
      <property name="mappedName" value="*"></property>
</bean>

<bean name="/cat" class="org.springframework.aop.framework.ProxyFactoryBean">
      <property name="interceptorNames">
             <list>
                    <value> catBeforeInterceptor</value>
                    <value> catAfterInterceptor</value>
             </list>
      </property>
      <property name="target">
             <bean class="com.clf.spring.CatAction">
                    <property name="catService" ref="catService"></property>
             </bean>
      </property>
</bean>

整合Struts 2

Spring整合Struts 2需要struts2-spring-2.011.jar包

public class CatAction{
      private ICatService catService;
      private Cat cat;
      //setter、getter略

      public String list(){
             catService.listCats();
             return "list";
      }

      public String add(){
             catService.createCat(cat);
             return list();
      }
}

struts.xml配置

除了正常的配置之外,还需要<contstant/>添加名为struts.objectFactory的常量,把值设为spring,表示该Action由Spring产生。然后把<action/>的class属性改为catAction,Struts 2将会到Spring中寻找名为catAction的bean

<constant name=" struts.objectFactory" value="spring" />

<packagename="cat" extends="struts-default">
<action name="*_cat" method="{1}" class="catAction">
      <param name="action" >{1}</param>
      <result>/list.jsp</result>
      <result name="list">/list.jsp</result>
</action>
</package>

Spring配置

<bean id="catAction" scope="prototype" class="com.clf.spring.CatAction">
      <property name="catService" ref="catService"></property>
</bean>

web.xml配置

<context-param><!--  Spring配置文件的位置-->
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>

<listener><!--  使用Listener加载Spring配置文件-->
      <listener-class>
             org.springframework.web.context.ContextLoaderListener
      </listener-class>
</listener>

<filter>
      <filter-name>Struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
      <filter-name> Struts2</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

时间: 2024-12-24 21:16:46

Spring之WEB模块的相关文章

spring源码分析之spring-web web模块分析

0 概述 spring-web的web模块是更高一层的抽象,它封装了快速开发spring-web需要的基础组件.其结构如下: 1. 初始化Initializer部分 1.1  Servlet3.0 的ServletContainerInitializer用来支持基于代码的servlet容器配置,它使用spring的WebApplicationInitializer SPI 来代替(或者混合使用)使用传统的基于web.xml的方式. 1.2  SpringServletContainerIniti

Spring学习(二)——使用用Gradle构建一个简单的Spring MVC Web应用程序

1.新建一个Gradle工程(Project) 在新建工程窗口的左侧中选择 [Gradle],右侧保持默认选择,点击next,模块命名为VelocityDemo. 2.在该工程下新建一个 module,在弹出的窗口的左侧中选择 [Gradle],右侧勾选[Spring MVC],如下图所示: 并勾选[Application server],下方选择框中选择Tomcat7.0,如无该选项,则选中右边的 [ New... ] -- [ Tomcat Server ], 配置 Tomcat .配置好后

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

2.spring的主要模块作用

spring中大约包含20过个模块, 主要包括以下几部分: 1. Core Container Core Container(核心容器)包含Core,Beans,Context和Expression Language模块 Core和Beans是spring的基础部分,提供IOC和依赖注入的特性, 基础概念是BeanFactory, 它提供对Factory模式的经典实现来消除对程序性单列模式的需求,并使得可以程序从逻辑中分离出依赖关系和配置. Core: 主要包含spring框架基本的核心工具类,

Spring Boot 多模块项目创建与配置 (一) (转)

最近在负责的是一个比较复杂项目,模块很多,代码中的二级模块就有9个,部分二级模块下面还分了多个模块.代码中的多模块是用maven管理的,每个模块都使用spring boot框架.之前有零零散散学过一些maven多模块配置的知识,但没自己从头到尾创建和配置过,也快忘得差不多了.这次正好对照着这个项目,动手实践一下,下面我们就开始吧. maven多模块项目通常由一个父模块和若干个子模块构成,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块)相互关联.多模块适用于一些比较大的项

一头扎进Spring之---------Spring七大核心模块

Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现.BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开 应用上下文(Spring Context) Spring上下文是一个配置文件,向Spring框架提供上下文信息.Spring上下文包括企业服务,如J

spring的核心模块

核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现.BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开. 应用上下文(Spring Context) Spring上下文是一个配置文件,向Spring框架提供上下文信息.Spring上下文包括企业服务,如JNDI.EJB.电子邮件

spring的核心模块有哪些?

Spring的七个核心模块,供大家参考,具体内容如下 1.Spring core:核心容器 核心容器提供spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanFactory来产生和管理Bean,它是工厂模式的实现.BeanFactory使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开.BeanFactory使用依赖注入的方式提供给组件依赖.主要实现控制反转IoC和依赖注入DI.Bean配置以及加载.

最详细的 Spring Boot 多模块开发与排坑指南

创建项目 创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提.你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创建一个 Spring Boot 项目,也可以使用 Spring 官方提供的 Spring Boot 项目生成页面得到一个项目. 下面介绍一下使用 Spring 官方生成的方式,如果你已经有了一个 Spring Boot 项目,这部分可以直接跳过. 打开 https://start.spring.io/ 填写 group 和 Artif