我们首先要知道用SpringMVC开发需要什么包?
我们需要导入springioc,springweb , springmvc相关的jar包.
有关Spring的jar包的用途如下:
所以我们用Springmvc开发是的jar包如下:
在讲解SpringMVC的工作流程之前先介绍下Struts2.的工作流程。
第一步:发送请求到服务器,产生了HttpServletRequest和请求,这个请求经过了other filters过滤器和Strute2的核心过滤器之后来到了ActionMapper(Struts2特有的)。
第二步:由Struts2判断一下这个请求需不需要Struts2来处理,比如hello.jsp不需要走Struts2.但是Hello.action就需要走Struts2。
第三步:确定需要走Struts2之后,这个请求来到核心过滤器,然后核心过滤器把它交给ActionProxy,交给ActionProxy的目的是为了让ActionProxy去调用ConfigurationManager和ActionMapping去加载struts.xml文件。加载了struts.xml之后,ActionProxy就知道改把这个请求具体交给哪个对应的Action类去处理了
第四步:ActionProxy创建代理,。
第五步:依次走18个过滤器。为什么走18个过滤器呢。因为整个Struts2有32个过滤器,但是默认的过滤器只有18个。每个拦截器做不同的事情。
第六步:调用反射去调用相应的Action.把对应的请求转到具体的Action.比如com.guigu.shen.hello.action这样
第七步:根据Action中的业务方法的处理结果,比如返回“ok”这样子。然后去找相应jsp页面。比如ok.jsp。
第八步:在依次的走逆序的拦截器(18个),最后把处理的结果,数据啊什么的给HttpServletRespon中。在ok.jsp就可以根据HttpServletRespon对象把数据取出来,显示在
界面上。
每个框架都有自己的工作流,我们看一下SpringmVC的工作流。
对上图做讲解:
第一步:.假设我们有一个action,比如叫做hello.action。这个请求经过DispatcherServlect,k可以看到凡是*.actio都会被拦截下来(当然也设为是*.do这样,凡是以do为结尾的Action都会被拦截下来),
第二步:这个请求给映射器,当映射器发现这个有点难处理,就把这个请求交给适配器去处理。为什么会有适配器呢?
因为我们对比一下Struts2中的Action来说,每一个Action都会去extends ActionSupport,这样相对于很好识别。但是SpringMvc的Action不是这样的,SpirngMvc的控制器
有些事继承(extends),有些是实现(implemens),有些干脆就是普通类,五花八门,什么都有,所以就有了适配器,让适配器去识别SpingMvc的控制器。
适配器找到了HelloAction.然后执行里面的业务方法。
第三步:HelloAcition执行后返回一个ModelAntView这么一个对象。
第四步:再把ModelAntView这个对象传给View(视图解析器),视图解析器会专门去解析这个对象。
第五步:把第四步解析得到的数据传给DispatcherServlet,然后在传给jsp页面,把数据显示在jsp页面上。