MESSL(maven + extjs + spring portlet mvc + spring web flow + liferay )整合架构 4

简介:

 上篇文章讲到了我们定义portlet应用级别的spring 配置文件为/WEB-INF/config/envprovisioning-config.xml ,下面我们来看下这个spring配置文件内容:

 

 
 
  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.        xmlns:webflow="http://www.springframework.org/schema/webflow-config" 
  5.        xsi:schemaLocation=" 
  6.            http://www.springframework.org/schema/beans 
  7.            http://www.springframework.org/schema/beans/spring-beans.xsd 
  8.            http://www.springframework.org/schema/webflow-config 
  9.            http://www.springframework.org/schema/webflow-config/spring-webflow-config.xsd"> 
  10.  
  11.     <!-- Maps portlet modes to handlers -->  
  12.     <bean id="portletModeHandlerMapping" class="org.springframework.web.portlet.handler.PortletModeHandlerMapping"> 
  13.         <property name="portletModeMap"> 
  14.             <map> 
  15.                 <entry key="view"> 
  16.                     <bean class="com.walmart.platform.envprovisioning.handlers.EnvProvisionFlowHandler" /> 
  17.                 </entry> 
  18.             </map> 
  19.         </property> 
  20.         <property name="interceptors">   
  21.             <list>   
  22.                 <ref bean="envprovisionhandlerinterceptor"/> 
  23.             </list>   
  24.         </property> 
  25.     </bean> 
  26.     <!-- add interceptor to get user and privilege --> 
  27.     <bean id="envprovisionhandlerinterceptor" class="com.walmart.platform.envprovisioning.interceptors.EnvProvisionHandlerInterceptor"/> 
  28.  
  29.     <!-- Maps logical view names selected by the url filename controller to .jsp view templates within the /WEB-INF directory -->    
  30.     <bean id="internalJspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  31.         <property name="prefix" value="/WEB-INF/" /> 
  32.         <property name="suffix" value=".jsp" /> 
  33.     </bean> 
  34.      
  35.     <!-- Enables FlowHandlers --> 
  36.     <bean class="org.springframework.webflow.mvc.portlet.FlowHandlerAdapter"> 
  37.         <property name="flowExecutor" ref="flowExecutor"/> 
  38.     </bean> 
  39.  
  40.     <!-- Executes flows: the central entry point into the Spring Web Flow system --> 
  41.     <webflow:flow-executor id="flowExecutor" /> 
  42.      
  43.     <!-- The registry of executable flow definitions --> 
  44.     <webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices"> 
  45.         <webflow:flow-location path="/WEB-INF/flows/envprovision/envprovision.xml" /> 
  46.     </webflow:flow-registry>     
  47.  
  48.     <!-- Plugs in Spring's JSR-303 validator adapter --> 
  49.     <webflow:flow-builder-services id="flowBuilderServices" development="true" validator="validator" /> 
  50.          
  51.     <!-- Bootstraps JSR-303 validation and exposes it through Spring's Validator interface --> 
  52.     <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 
  53.  
  54.   
  55. </beans> 

这个文件更多的是对spring web flow进行了配置,容我细细道来:

首先在第15-17行,我们portletModeMap,对view Mode ,我们扔给了EnvProvisionFlowHandler类,这就表明,我们让在spring portlet mvc中,我们用EnvProvisionFlowHandler类充当portlet view mode的处理类。 而这个EnvProvisionFlowHandler类是从AbstractFlowHandler继承来的, 所以我们理所当然的使用了Spring WebFlow 的FlowHandler来充当处理器:

 
 
  1. /** 
  2.  * this class is the flowHandler 
  3.  * When application deployed to container ,the container will read the envprovisioning-config.xml 
  4.  * then it will get the instance for this flowHandler ,and the getFlowId() method will identify which flow it will 
  5.  * enter into. 
  6.  *  
  7.  *@author cwang58 
  8.  *@created date: Feb 18, 2013 
  9.  */ 
  10. public class EnvProvisionFlowHandler extends AbstractFlowHandler { 
  11.  
  12.     /** 
  13.      * the flowId which identifies the flow which will be handled by this flowHandler 
  14.      * since here it returns envprovision ,so it will go to the flow which is describled by flow 
  15.      * definition file "envprovision.xml" 
  16.      */ 
  17.     public String getFlowId() { 
  18.     return "envprovision"
  19.     } 
  20.  
  21.      
  22.  
  23.  

这个类我们只需要实现一个方法,就是getFlowId(),他用来表示,我们用什么web flow来充当view 模式的处理器, 在这里,返回的是envprovision,所以我们用这个流来充当view模式处理器。

 

既然得到了flowId之后,我们就去找对应的 web flow.首先必须明白,flow的执行者是由FlowHandlerAdaptor来完成的,所以我们在36-38行,我们定义了一个属性叫flowExecutor来专门用于执行flow.

而flowExecutor会专门使用一个flowRegistry Bean来执行定义在/WEB-INF/flows 下的基于XML的流跳转定义文件,所以我们又在44-46行中显式的给出了流定义XML文件,因为(Convention over Configuration),默认的流定义文件的文件名就是flowId,所以我们很容易找到了前文中返回的envprovision的流Id就对应这里的envprovision.xml文件,所以当portlet view 模式时,就会把控制权交给Spring Web Flow,然后用envprovision.xml中定义的流跳转逻辑来处理view 模式,就这么简单。

 

下篇文章我们来探讨这个流控制文件。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1138849,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
147 29
|
3月前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
77 4
|
4月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
317 2
|
5月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
419 1
Maven——创建 Spring Boot项目
|
5月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
109 1
如何使用 maven 创建一个 Spring Boot项目
|
5月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
6月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
|
5月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
85 2
|
5月前
|
Java 应用服务中间件 Maven
idea+maven+tomcat+spring 创建一个jsp项目
这篇文章介绍了如何在IntelliJ IDEA中使用Maven和Tomcat创建一个JSP项目,包括配置Maven依赖、设置Tomcat服务器、编写JSP页面、创建控制器和配置文件,以及项目的运行结果。
330 0
idea+maven+tomcat+spring 创建一个jsp项目
|
5月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
397 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习

热门文章

最新文章

推荐镜像

更多