第一步:要明白springmvc的原理
springmvc和struts2一样在mvc中充当视图层的任务,负责页面的跳转和页面数据的传送和接受。
springmvc接受请求和转发请求的流程:
1.客户发出请求
2.前端控制器DispatcherServlet(通过监听)接受用户的请求
3.前端控制器要根据请求向处理器映射器HandlerMapper查找对应的Handler。
4.处理器映射器返回i一个执行链。handleExecutionChain{ handlerInterceptor1
handlerInterceptro2
handler}
5.前端控制器可以根据执行链,向处理器适配器去请求处理客户请求
6.handler适配器进行处理,并且返回ModelAndView
7.前端控制器再找视图解析器来解析ModelAndView
8.视图解析器解析后返回给前端控制器
9.前端在进行视图渲染,将模型数据填充到reequest域中去
10.将结果返回给用户
第二部:了解六大组件的作用和如何开发
1.前端控制器:用来接受请求,响应结果。大部分都是他和其他组建进行通话,其他组件之间几乎无交流。可以减少其他组件之间的耦合度。是中央控制器。非常重要,所以页决定了不需要程序员开发。
对于他,就是来拦截请求,所以就像servlet的拦截器作用一样。So,配置就是在web.xml中以servlet的方式进行配置。
示例代码:
<!-- springMVC的前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器,适配器等)
如果你不配置contextConfigLocation,则默认加载的是/WEB-INF/servlet名称-servlet.xml(springmvc-servlet.xml)
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!--
第一种:*.action.访问以.action结尾的由DispatcherServlet进行解析
第二种:/,所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
使用这一种方法可以使用RESTful风格的url
第三种:/*,这样配置不对,使用这种配置,最终要 转发到一个jsp页面时,仍然由DispatcherServlet进行解析 ,根据jsp页面找不到handel,会报错
-->
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
*****注意一点,由于前端控制器和其他组件的联系紧密,前端控制器需要知道其他组件的位置,而处理器映射器,适配器等配置在springmvc加载的配置文件中so需要在配置前端控制器的时候指定springmvc配置文件的位置。、
2。由于映射器是url和handler的映射,这里我们先学习处理适配器HandlerAdapter的作用和配置
适配器的作用就是按照特定的规则去执行handler。handler需要我们编写,即适配器就是提供了一个接口,决定了我们handler的编写格式,对hadler的编写进行约束。
so适配器以前不需要我们编写,我们所做的就是springmvc.xml中将这个接口引入。
实例代码:
<!-- 处理器适配器
所有的处理器适配器都实现HanderAdapter接口
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
3.现在有了handler的编写规范,我们就根据规范,实现接口,编写handler
示例代码:
public class ItemsController1 implements Controller{ //实现接口,否则无法执行
@Override //实现接口的方法
public ModelAndView handleRequest(HttpServletRequest req,
HttpServletResponse resp) throws Exception {
List<Items>itemsList=new ArrayList<Items>();
//向list添加数据
Items items_1=new Items();
items_1.setName("电脑");
items_1.setPrice(6000f);
items_1.setDetail("联想笔记本壳。");
itemsList.add(items_1);
Items items_2=new Items();
items_2.setName("手机");
items_2.setPrice(7000f);
items_2.setDetail("联想手机。");
itemsList.add(items_2);
Items items_3=new Items();
items_3.setName("鼠标");
items_3.setPrice(10000f);
items_3.setDetail("联想鼠标。");
itemsList.add(items_3);
//返回ModelAndView
ModelAndView modelAndView=new ModelAndView();
//相当于reques的setAtrribute,在jsp页面中通过itemsList来获取数据
(两个作用体现出来了,1.设置页面的跳转2.设置返回页面的数据)
modelAndView.addObject("itemsList", itemsList);//制定视图
modelAndView.setViewName("/WEB-INF/JSP/itemsList.jsp");
return modelAndView;
}
}
handler编写完成之后需要在springmvc中配置,让他在spring中加载
实例代码:
<!-- 配置handler --> //这时的name设置了访问路径
<bean name="/queryItems.action" class="ItemsController1"></bean>
4.有了跳转路径,需要将跳转路径对应的页面编写好。
5.一切准备完毕,需要将handler和url联系起来,即配置映射器
在springmvc中配置映射器:
<!-- 配置处理器映射器 --> 处理器映射器会将handler的beanname作为url查找,所以在配置handler时一定要将url设置beanname中。
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
6.最后即为视图解析器的配置:
示例代码:
<!-- 配置视图解析器
解析jsp默认使用jstl标签,calsspath下要有jstl的包
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
第三部:总结
综上所述,springmvc的配置即为前端控制器,处理适配器,handaler,处理映射器,视图,视图解析器的配置。
其中前端控制器为在web.xml中配置
处理适配器和处理映射器和视图解析器不需要程序员编写,由别人编好,我们仅仅需要通过bean的方式在springmvc.xml中引入。同时注意,他们可以有很多引入的类,不同的类之间的作用和格式可能有所不同。
对于handler要根据处理器适配器的要求来实现对应的接口和规范来编写
对于视图就是jsp等文件,需要接收数据显示在页面上,需要使用到jstl标签。