1、MVC在B/S模式下的数据流
2、springMVC的数据流
包含了以下组建,需要程序员开发的,为4、6。
- 1、前端控制器DispatcherServlet :接受请求,响应结果,相当于转发器。
- 2、处理器映射器HandlerMapping:根据请求的url来找到Handler(通过xml或者注解)
- 3、处理器适配器HandlerAdapter:根据规则去执行handler
- 4、处理器Handler:根据HandlerAdapter的规则去编写,用于执行Handler
- 5、视图解析器View resolver:根据逻辑视图名,得到真正的视图
- 6、视图View:View是一个接口,实现类支持不同的View类型(jsp、freemark、pdf…)
3、需求
和mybatis一样的商城订单系统
4、环境 需要jar包的朋友可以留言
5、入门程序
5.1 前端控制器
在web.xml中指定处理request的servlet(前端控制器)
<!-- springmvc前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfigLocation配置springmvc加载的配置文件
如果不指定的话,它默认加载/WEB-INF/springmvc-servler.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 1、*.action ,访问任何.action都交给DispatcherServlet进行解析
2、/,任何路径都给它解析
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
下面的配置都是在web.xml指定的配置文件(classpath:springmvc.xml)中进行配置的
5.2 处理器映射器
前端控制器的通过url得到handler
<!-- 处理器映射器 -->
<!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中
返回Handler给前端控制器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
5.3 配置处理器适配器
前端控制器传入handler给适配器,适配器处理handler,最后响应返回一个modelAndView
<!-- handlerAdapter处理器适配器
执行handler,把Handler返回的ModelAndView 传递给前端控制器
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
</bean>
观察源代码看出,Adapter支持的类型,是继承了Controller接口的类。换句话说,这就是handler的编写规范,换句话说,Handler需要继承controller接口。
5.4 开发Handler
由5.3可知Handler需要实现controler接口。
5.4.1 controller的java代码编写
package cn.iot.ssm.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import com.iot.ssm.po.Items;
public class ItemsController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
//调用service
List<Items> itemsList = new ArrayList<Items>();
//向list填充静态数据
Items items = new Items();
items.setName("联想笔记本");
items.setPrice(6000f);
items.setDetail("非常好用");
Items items2 = new Items();
items2.setName("苹果笔记本");
items2.setPrice(6002f);
items2.setDetail("mac book");
itemsList.add(items);
itemsList.add(items2);
// 返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
// 相当于request的setAttribut,在jsp页面中通过key:itemsList获取数据
modelAndView.addObject("itemsList",itemsList);
// 指定视图
modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
return modelAndView;
}
}
5.4.1 controller在xml中的配置
<!-- 配置Handler -->
<bean name="/queryItems.action" class="cn.iot.ssm.controller.ItemsController"></bean>
5.6 视图解析器
前端控制器在得到ModelAndView之后,就把渲染视图的工作交给它。
前端控制器 -----逻辑视图名字---> 视图解析器 ---响应的视图--> 前端控制器
在xml中进行配置
<!-- 视图解析器
根据视图的逻辑名字,解析得到view
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
6 小结
搞清楚数据的流向,理解每一个控件接受什么数据,返回什么数据。
入门案例到此结束。
springmvc.xml的完整文件
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<!-- 配置Handler -->
<bean name="/queryItems.action" class="cn.iot.ssm.controller.ItemsController"></bean>
<!-- 处理器映射器 -->
<!-- 根据bean的name进行查找Handler 将action的url配置在bean的name中
返回Handler给前端控制器 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<!-- handlerAdapter处理器适配器
执行handler,把Handler返回的ModelAndView 传递给前端控制器
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
</bean>
<!-- 视图解析器
根据视图的逻辑名字,解析得到view
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
</beans>