基本自定义 > 用户界面自定义 > MVC 组件 > MVC 组件概述 > MVC > Windchill 中的 MVC > 通过 Spring 请求处理
  
通过 Spring 请求处理
客户端在 Web 应用程序中请求资源。如前面部分所示,Web 容器会将所有 MVC 请求均定向到 Spring DispatcherServlet。Spring 前端控制器将截获这些请求,并根据处理程序映射 (在 Spring 配置文件或注释中配置) 查找相应的处理程序。换句话说,处理程序映射用于将请求从客户端映射到处理程序。Spring 前端控制器将借助处理程序适配器向处理程序发送请求。
Windchill 中,我们使用两个处理程序映射:
RequestMappingHandlerMapping:基于在类型或方法级别通过 RequestMapping 注释表示的 HTTP 路径来映射处理程序。此映射与 mvc.xml 文件中的 <mvc:annotation-driven/> 条目一并配置。
SimpleUrlHandlerMapping:用于从 URL 映射到请求处理程序 bean。在位于 <Windchill>\codebase\config\mvc\ 的特性文件中指定映射,
例如 /servlet/WizardServlet* = wizardController
找到映射后,它将从已配置的适配器中找到合适的处理程序适配器。在 Windchill 中,我们使用三种类型的处理程序适配器:
RequestMappingHandlerAdapter:基于通过 RequestMapping 注释表示的 HTTP 路径、HTTP 方法和请求参数来映射处理程序方法。
SimpleControllerHandlerAdapter:此类适配器使用普通控制器 (即一种由 Controller 接口实现或由 AbstractController 类扩展的控制器类型)
GwtHandlerAdapter:此类适配器用于处理 GWT 客户端请求 (处理程序为 RemoteServiceServlet)
在 Windchill 11.1 M020 中,Spring Framework 升级到版本 5.0.6。非基于注解的控制器将被替换为基于注释的独立控制器。
在 Spring Framework 的升级版本中,必须遵循以下指导原则:
所有具有 @Controller annotation 的 Spring 类都必须与同一类中的 @RequestMapping 存在 URL 映射。不支持选择具有 SimpleUrlHandlerMappingBeanNameUrlHandlerMapping 的控制器,然后根据 @RequestMapping 注释来缩小方法的范围。
@RequestMapping 方法必须在新的支持类中进行唯一映射。不能依靠将方法名称作为回退机制来消除两个 @RequestMapping 方法之间的歧义,这两个方法没有显式路径映射 URL 路径,但通过其他方法同样可实现匹配,例如通过 HTTP 方法。
单个默认方法必须具有显式路径映射。此方法早期被用于在找不到其他控制器匹配时处理请求。在新的支持类中,如果找不到匹配的方法,则会引发 404 错误。单个默认方法不能没有显式路径映射。
处理程序
它们是可以处理请求的 bean。在此提供了一个预设处理程序,用以处理构建组件的请求 - com.ptc.mvc.components.ComponentController。它会准备可由 DispatcherServlet 处理的 ModelAndView (org.springframework.web.servlet.ModelAndView)。
要构建组件,我们需要其说明以及要呈现的数据。我们引入了构建器的概念,这些构建器将提供这些构件。组件说明将通过 ComponentConfig 表示,且由 ComponentConfigBuilder 提供。组件数据将通过 ComponentData 表示,且由 ComponentDataBuilder 提供。
ComponentConfigComponentData 共同定义了要在 UI 中显示的组件信息,并将由 ComponentDefintion 表示。它是 MVC 模式中的模型,而 ComponentController 为控制器。
如何查找构建器?
用于构建组件的典型 MVC 资源为 ptc1/<handler_key>/<componentId>
其中 handler_key 用于将请求映射到处理程序。
componentId 表示要构建的组件。
ComponentController 利用 ComponentBuilderResolver 实现注入,通过它可查找给定组件 componentId 的相应构建器。
ComponentController 的内部构件
ComponentController 的一些重要内部构件
ComponentBuilderResolver:用于查找资源中指定的 componentIdComponentConfigBuilderComponentDataBuilder
defaultMappings:用于定义不同 ComponentConfig 的默认视图。
ComponentParamsFactory:用于根据请求和响应创建 ComponentParams,这些请求和响应将在构建器中提供。
构建器提供了 ComponentConfigComponentData,由这两者构成了模型 ComponentDefinitionModelAndViewComponentDefinition 填充,而视图信息来自 ComponentConfig 或提供的 defaultMapping。
以绿色表示的构件为 Windchill 客户端体系结构 (例如 JCA) 特定构件。以黑色表示的构件由组件所有者提供。