跟踪一个 .do 请求吧
就它了。 Enter the Store
http://localhost:8080/jpetstore/shop/index.do
org.springframework.web.servlet.DispatcherServlet 动用了强大的handlerMapping 。
当然这个接口有很多实现。
引用
AbstractDetectingUrlHandlerMapping, AbstractHandlerMapping, AbstractPathMapHandlerMapping, AbstractUrlHandlerMapping, BeanNameUrlHandlerMapping, CommonsPathMapHandlerMapping, ControllerClassNameHandlerMapping, DefaultAnnotationHandlerMapping, SimpleUrlHandlerMapping
看看petstore-servlet.xml 用了哪个? 这里使用了org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping这个实现
,说白了其实它特单纯。也就是 /shop/index.do 这段作为对应处理Controller bean的那么属性。找找吧。是不是有个 name="/shop/index.do" bean
引用
<bean name="/shop/index.do" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
<property name="viewName" value="index"/>
</bean>
对了,就是这个bean了。找到了吗。这个请求就被分发到了org.springframework.web.servlet.mvc.ParameterizableViewController 这个Controller也是个很单纯的控制器了。直接就转向一个viewName属性指定的index.jsp页面了。当然省略了一个过程。index怎么就到了index.jsp呢?
这个问题的答案在这里
引用
org.springframework.web.servlet.view.InternalResourceViewResolver
一个ViewResolver的实现。还有其他几个实现。
引用
AbstractCachingViewResolver, AbstractTemplateViewResolver, BeanNameViewResolver, FreeMarkerViewResolver, InternalResourceViewResolver, JasperReportsViewResolver, ResourceBundleViewResolver, UrlBasedViewResolver, VelocityLayoutViewResolver, VelocityViewResolver, XmlViewResolver, XsltViewResolver
它悄悄的做了手脚。
引用
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/spring/"/>
<property name="suffix" value=".jsp"/>
</bean>
首先到 /WEB-INF/jsp/spring/ 里找 后缀..jsp 这就成了 /WEB-INF/jsp/spring/index.jsp了。完了,放松一下吧。一个请求到此已经结束了。是不是太快了。。。。
spring mvc 这部机器 说白了其实很简单,DispatcherServlet 把 HandlerMapping Controller ViewResolver 3个组件 组装在一起就完成了整个处理过程。
想起来就像人吃饭一样。把饭放入嘴巴,经过喉咙,然后到胃里,处理一下,再接着往下传,到肠子 最后把处理的结果 排泄出来。呵呵,恶心一把
当然还吸收了一些,这就类似存了一些数据到数据库。说白了还真这么回事。
还以2个小细节,看到有部分的请求由另外一个HandlerMapping实现了。
引用
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
为什么他要第二个?看这个bean的id应该就能明白几分了。secureHandlerMapping,这些请求需要经过一个安全验证。这个安全验证通过 signonInterceptor 这个interceptors 插件插入到了 HandlerMapping 中。
引用
<bean id="signonInterceptor" class="org.springframework.samples.jpetstore.web.spring.SignonInterceptor"/>
关于这个插入的组件有很多文章提到它。也就是一个类似AOP或者filter的作用吧。看到一篇文章上提到 一点就是 interceptors比aop少了一个方式就是round环绕模式的实现。也就是无法把一个 前部分处理的变量 舒服的传递到 后部。
另外安全控制 如果在一个大一点的项目里,现在可以用 spring 另外一个独立的模块 ACEGI Spring security 来做。
再一次可以看出来spring 真的是三头六臂的感觉,满身都是插口。到处都能安装插件。和变形金刚差不多了。
分享到:
相关推荐
《Spring框架学习:以JpetStore为例》 Spring框架是Java企业级应用开发中的核心框架,它为开发者提供了丰富的功能,简化了开发流程,提高了代码的可测试性和可维护性。JpetStore作为Spring的经典示例项目,是学习...
标题 "spring例子: jpetstore" 提到的是一个基于Spring框架的应用示例——JPetStore。这个项目是Spring官方提供的一个经典示例,用于展示如何使用Spring框架来构建Web应用程序。它是一个小型的在线宠物商店,包含了...
《Spring JPetStore:Spring框架的经典示例》 Spring框架是Java开发中广泛使用的轻量级框架,以其灵活、高效和模块化的特性深受开发者喜爱。其中,JPetStore项目是Spring官方提供的一个经典示例,它展示了Spring的...
4. **配置Web.xml**:这是Spring应用的入口点,需要正确配置Spring的DispatcherServlet、ContextLoaderListener等组件,以及相应的bean定义文件路径。 5. **配置数据库连接**:根据实际环境修改JPetStore的数据库...
**Spring jpetstore** 是一个基于Spring框架的开源示例应用,它展示了如何使用Spring MVC、Spring JDBC以及Spring的其他核心特性来构建一个完整的Web应用。这个项目是Spring官方提供的,旨在帮助开发者学习和理解...
4. **数据访问集成**:Spring与iBatis结合,提供了对数据库操作的支持,简化了数据访问代码。 **Struts框架** Struts是基于MVC设计模式的Web应用框架,它为开发者提供了处理HTTP请求和响应、展示视图、以及控制应用...
《基于jpetstore的Spring、iBatis与Struts整合实战》 jpetstore项目是Spring框架的一个经典示例,它全面展示了如何将Spring、iBatis和Struts这三个核心的Java Web技术进行集成,构建出一个完整的MVC(Model-View-...
《MyEclipse中加载Spring的JPetStore详解》 在软件开发领域,Spring框架以其强大的功能和灵活性,已经成为Java企业级应用开发的事实标准。而MyEclipse作为一款强大的Java集成开发环境,为开发者提供了便捷的Spring...
《Spring之JPetStore:深度解析与实践指南》 在Java世界中,Spring框架以其强大的功能和灵活性,已经成为企业级应用开发的首选。而JPetStore作为Spring框架的经典示例项目,是学习和理解Spring核心特性的绝佳起点。...
《Spring的JPetStore工程与MyEclipse集成详解》 Spring框架是Java开发中的核心组件,它提供了丰富的功能,如依赖注入(DI)、面向切面编程(AOP)、数据访问和事务管理等。JPetStore作为Spring官方提供的一个示例...
最新spring带的JPetStore的MyEclipse项目,包括了数据库,可用hsqldb直接运行,可以直接导入MyEclipse中并部署运行。 在Myeclipse里新建一个web项目,导入shopping项目即可,数据库在db文件夹里
《Eclipse环境下的Spring框架——以JPetStore项目为例》 在Java开发领域,Eclipse作为一款强大的集成开发环境(IDE)被广泛使用,而Spring框架则是企业级应用开发的重要选择。本文将深入探讨如何在Eclipse环境中...
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包
**标题解析:** "JPetStore (Struts + Spring + Hibernate)版" 是一个基于Java技术的开源电子商务示例应用,它集成了Struts、Spring和Hibernate三个关键的开源框架。这个版本相较于之前的JPetStore5.0,进行了重要的...
在 jpetstore 中,Spring 作为整个应用的“胶水”,管理各个组件的生命周期和依赖关系。它可能通过XML配置或注解驱动的方式来定义bean,这些bean可以是DAO(数据访问对象)、Service、Controller等。Spring还提供了...
《jpetstore开源学习代码》是一个深受开发者欢迎的学习资源,特别针对那些希望深入理解J2EE(Java 2 Platform, Enterprise Edition)技术的初学者和有经验的程序员。jpetstore项目是一个示例应用,它展示了如何在...
该jpetstore经典案例为最新SPRING开发包里面的完全案例,并集成到eclipse里面了,在eclipse里面可以直接运行并调试,在工作目录里面直接建立jpetstore目录,自动导入该目录下文件,修改jdbc.properties配置文件,连接...
【标题】"用jpetstore学习架构 使用Spring boot+MyBatis +MySQL"是一个实践项目,旨在帮助开发者通过实现一个具体的电商应用——jpetstore,掌握基于Spring Boot、MyBatis和MySQL数据库的架构设计与开发技能。...
尽管jpetstore5.0系统架构图未明确提及Spring框架,但Spring在企业级应用开发中起着举足轻重的作用。它提供的依赖注入(DI)和面向切面编程(AOP)功能,极大地提升了代码的灵活性和可维护性。在实际应用中,Spring...