(Portal 开发读书笔记)Spring PortletMVC 工作流程

简介:

 

 

如上所示,这是Spring Portlet MVC的整个工作流程:

DispatcherPortlet 作为前端控制器,负责接收所有到Portlet的请求

(1) 当Portlet请求发送到DispatcherPortlet时,它利用PortletMVC的HandlerMapping来找到一个合适的Handler(也就是controller)来处理当前请求


  
  
  1. <portlet> 
  2. <portlet-name>helloWorld</portlet-name> 
  3. <portlet-class> 
  4. org.springframework.web.portlet.DispatcherPortlet 
  5. </portlet-class> 
  6. <supports> 
  7. <mime-type>text/html</mime-type> 
  8. <portlet-mode>view</portlet-mode> 
  9. </supports> 
  10. <resource-bundle>content.Language-ext</resource-bundle> 
  11. <portlet-info> 
  12. <title>HelloWorld</title> 
  13. </portlet-info> 
  14. </portlet> 

(2) PortletMVC 提供了一个PortletModeHandlerMapping,它实现了HandlerMapping接口,并且它基于当前Portlet的模式(view/edit/help....)来选择恰当的Handler.这个模式->Handler的映射规则配置在 <portlet-name>-portlet.xml ,它是该portlet的Spring配置文件

比如:


  
  
  1. <beans ... > 
  2. <bean id="helloWorldController" 
  3. class="chapter07.code.listing.HelloWorldController"/> 
  4.  
  5. <bean id="portletModeHandlerMapping" 
  6. class="org.springframework.web.portlet.handler.PortletModeHandlerMapping"> 
  7. <property name="portletModeMap"> 
  8. <map> 
  9. <entry key="view"> 
  10. <ref bean="helloWorldController" /> 
  11. </entry> 
  12. </map> 
  13. </property> 
  14. </bean> 
  15.  
  16. </beans> 

在这个例子中,我们可以看到PortletModeHandlerMapping将view模式匹配到了HelloWorldController 作为Handler,所以这个HellowWorldController有能力处理render类型的请求(对应view模式)

(3) 于是,这个DispatcherPortlet会指派HelloWorldController,而HelloWorldController处理了render类型的请求,然后返回一个ModelAndView对象给DispatcherPortlet.


  
  
  1. public class HelloWorldController implements Controller{ 
  2. public void handleActionRequest(ActionRequest request, 
  3. ActionResponse response)throws Exception { 
  4. //这个是render类型请求的处理函数,请求结果被封装在ModelAndView对象中返回给调用者,也就是返回给DispatcherPortlet
  5. public ModelAndView handleRenderRequest 
  6. (RenderRequest request, RenderResponse response) 
  7. throws Exception { 
  8. Map<String, Object> model = 
  9. new HashMap<String, Object>(); 
  10. model.put("helloWorldMessage""Hello World"); 
  11. return new ModelAndView("helloWorld", model); 

 

(4) 于是DispatcherPortlet找一个合适的视图来渲染页面,这时候,它委托ViewResolver 来解析包含在ModelAndView中的视图名"helloWorld",ViewResolver 根据以下portlet的Spring 配置文件:


  
  
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans ... > 
  3. .. 
  4. <bean id="viewResolver" 
  5. class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  6. <property name="viewClass" 
  7. value="org.springframework.web.servlet.view.JstlView"/> 
  8. <property name="prefix" value="/WEB-INF/jsp/" /> 
  9. <property name="suffix" value=".jsp" /> 
  10. </bean> 
  11. </beans> 

得知,一个叫 helloWorld的视图名会被映射到/WEB-INF/jsp/helloWorld.jsp的视图,它把最终解析得到的视图页面jsp信息连同模型Model信息返回给DispatcherPortlet

 

(5)最后到了渲染阶段,于是DispatcherPortlet 委托ViewRenderServlet ,让它基于helloWorld.jsp和模型数据进行渲染。ViewRenderServlet最终渲染到浏览器上。


  
  
  1. <web-app ...> 
  2. ... 
  3. <servlet> 
  4. <servlet-name>ViewRendererServlet</servlet-name> 
  5. <servlet-class> 
  6. org.springframework.web.servlet.ViewRendererServlet 
  7. </servlet-class> 
  8. </servlet> 
  9. <servlet-mapping> 
  10. <servlet-name>ViewRendererServlet</servlet-name> 
  11. <url-pattern>/WEB-INF/servlet/view</url-pattern> 
  12. </servlet-mapping> 
  13. ... 
  14. </web-app> 

 





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

目录
相关文章
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
42 4
|
9天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
21 2
|
29天前
|
XML Java 数据格式
提升效率!Spring Boot 开发中的常见失误轻松规避
本文深入探讨了在 Spring Boot 开发中常见的失误,包括不当使用注解、不良异常处理、低效日志记录等,提供了有效的规避策略,帮助开发者提升代码质量和系统性能,构建更健壮、高效的应用程序。
|
14天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
28 0
|
1月前
|
开发框架 Java API
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
56 0
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
47 0
|
1月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
80 0
|
XML 设计模式 Java
SPRING03_为什么要学习源码、基础的接口、SPRING工作流程详解
①. 为什么要学习源码? ②. Spring基础接口 ③. Spring的工作流程详解
134 0
SPRING03_为什么要学习源码、基础的接口、SPRING工作流程详解
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
166 2

热门文章

最新文章

下一篇
无影云桌面