跟踪一个 .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附带的例子 jpetstore 包括spring mvc 和 struts
NULL 博文链接:https://jnh.iteye.com/blog/452766
用spring改造的jpetstore4.0,适用于jdk7+,tomcat6+。mysql数据库
最新spring带的JPetStore的MyEclipse项目,包括了数据库,可用hsqldb直接运行,可以直接导入MyEclipse中并部署运行。 在Myeclipse里新建一个web项目,导入shopping项目即可,数据库在db文件夹里
本例子经过修改,配置,组装成了一个可直接部署运行,不需要修改的demo,是学习spring ibatis struts 的一个非常好的例子。绝对好东西!!尽情下吧!!!
spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包
spring的jpetstore实例,可以直接用myeclipse打开的工程,里面含有建数据库的文件。
spring jpetstorespring jpetstorespring jpetstorespring jpetstorespring jpetstorespring jpetstore
这是使用Struts+Spring+Hibernate实现jpetstore的功能的源代码
jpetstore学习j2ee的好资料,可以学到很多的设计模式
NULL 博文链接:https://tgwall163.iteye.com/blog/1219314
NULL 博文链接:https://ritaleo.iteye.com/blog/723394
该jpetstore经典案例为最新SPRING开发包里面的完全案例,并集成到eclipse里面了,在eclipse里面可以直接运行并调试,在工作目录里面直接建立jpetstore目录,自动导入该目录下文件,修改jdbc.properties配置文件,连接...
在原有的JPetStore5.0的基础上修改,数据持久层用hibernate替换原有的ibatis;添加Spring框架。
用jpetstore学习架构 使用Spring boot+MyBatis +MySQL
myeclipse些测试运行成功
eclipse环境下spring框架的宠物商店的例子目录结构~
Struts+Spring+ibatis开发的Jpetstore宠物商店的开源程序,在SourceForce上下载的,学JAVA WEB开发的人研究的热门开源程序。有需要的同学分享吧!这里提供的是一个下载地址,因为有点大,所以就提供了一个地址,大家...