MVC是一个设计模式,来源于web2.0
如下图所示:
浏览器发一个http请求到控制器(基于http协议,发一个request,接收一个response响应)
控制器:接受客户的请求,转发到其他的组件,然后调用业务逻辑。
模型层:(业务层),访问持久层
持久层:用来对数据进行持久化,真正访问数据库的。
就是 把O(Object)到R(Relations)做一个映射
把一个类映射成数据库中的一张表,把属性映射成表中的字段。
如上图所示,在直线上,是个面向对象的过程(Object)。
上层依赖与下层,下层不依赖与上层。
SpringMvc
如下图所示:
操作步骤机器功能。
1.用户发一个HTTP请求到前端控制器。
前端控制器的作用:(1)截取url (2)转向
2. 处理器映射器:接受查找的Handler,组装后返回查找的Handler到前端控制器。将其请求到处理器适配器。
3.处理器适配器:【注:适配器是一种模式】(按一定的规则,执行处理器)执行处理器。
4.处理器的功能:
(1)获取表单参数,
(2)调用业务逻辑,
(3)转发到其他的web组件。
5.处理器返回ModelAndView给适配器。适配器再将其返回给前端控制器。
6.前端控制器将ModelAndView发送给视图解析器。
视图解析器作用:将逻辑视图转换为物理视图,返回物理视图给前端控制器。
7. 到JSP:请求真实物理视图。(真实视图只是一个框架,里面没有东西)
8.填充model到视图中并返回。
在此给出一个简单的实例:
在新建项目时选中下图中的目录,项目就会自动生成webapp目录
当下面显示BUILD SUCCESS,则表示成功,可以继续进行。
配置xml,注入依赖
接下来配置处理器映射器,处理器适配器,处理器,视图解析器。
有两种方式:
(1)配置的方式
先建一个普通的处理器的类
然后对其进行配置
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/abc.action">handler2</prop>
<prop key="/ming.action">handler1</prop>
</props>
</property>
</bean>
<!--处理器映射器-->
<!--处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
<!--处理器-->
<bean id="handler1" name="/handler1.action" class="com.ming.controller.Handler1"/>
<bean id="handler2" class="com.ming.controller.Handler2"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/jsps/"/>
<property name="suffix" value=".jsp"/>
</bean>
(2)注解
<!-- Mapping + Adapter-->
<mvc:annotation-driven/>
<context:component-scan base-package="com.zh.controller"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> //扫描包
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
上述的注解方式太长了,不方便记忆,我们可以将其修改为以下的写法。
<context:component-scan base-package="com.zh.controller"/>
<mvc:annotation-driven/>
我们在处理器的类中实现模拟数据库的方法
然后编写适配器和映射器
在jsp文件中通过一个表格做。
showItemsList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%> //通过一个标签导入
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1" align="center">
<tr>
<th>ItemsId</th>
<th>ItemsName</th>
<th>ItemsPrice</th>
</tr>
<c:forEach items="${itemsListKey}" var="items">
<tr>
<td>${items.itemsId}</td>
<td>${items.itemsName}</td>
<td>${items.itemsPrice}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
本次示例的运行结果:
运行出来的初始界面:
在http://localhost:8081后面添加/showItemsList.action,回车得到最终的结果
注意事项:控制器类前记得加@Controller
完整的项目工程请见github链接
https://github.com/zhdfuture/SpringMvc/commit/9b2c0d625e98ddf9d7ae1a0dbff112983027686c