MVC代表的含义
- M 代表 模型(Model),即dao,bean
- V 代表 视图(View),即页面,jsp、html等
- C 代表 控制器(controller),即负责接收并转发请求,对请求处理之后拿到响应结果,指派要使用的视图(类似于指定Servlet跳转到不同的页面进行展示),将响应结果返回给客户端。对应的组件一般是Servlet
SpringMVC的工作流程
- DispatcherServlet:首先页面发出请求,请求被DispatcherServlet拦截,转发到SpringMVC控制器
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
- 处理器映射(HandlerMapping):被拦截的请求就到处理器映射(HandlerMapping),处理器映射会根据请求所携带的 URL 信息来进行选择哪个控制器
- 控制器:选择好了控制器, DispatcherServlet 会将请求发送给选中的控制器,然后由控制器处理这些请求
- 返回 DispatcherServlet:当控制器在完成逻辑处理后,通常会产生一些信息,这些信息就是需要返回给用户并在浏览器上显示的信息,它们被称为模型(Model)。仅仅返回原始的信息时不够的——这些信息需要以用户友好的方式进行格式化,一般会是 HTML,所以,信息需要发送给一个视图(view),通常会是 JSP。
控制器所做的最后一件事就是将模型数据打包,并且表示出用于渲染输出的视图名(逻辑视图名)。它接下来会将请求连同模型和视图名发送回 DispatcherServlet。 - 视图解析器:这样以来,控制器就不会和特定的视图相耦合,传递给 DispatcherServlet 的视图名并不直接表示某个特定的 JSP。(实际上,它甚至不能确定视图就是 JSP)相反,它传递的仅仅是一个逻辑名称,这个名称将会用来查找产生结果的真正视图。
DispatcherServlet 将会使用视图解析器(view resolver)来将逻辑视图名匹配为一个特定的视图实现,它可能是也可能不是 JSP - 视图:视图使用模型数据渲染出结果,这个输出结果会通过响应对象传递给客户端
@RequestParam(value=“name”, required=true, defaultValue=“张三”) String name)
value 与前端页面对应,不写默认为变量名
required,参数值是否可以为空,默认是true,如果为空否则将报404错误码
defaultValue,默认值,表示如果请求中没有同名参数时的默认值
ModelMap中的addAttribute与put方法的区别
ModelMap的定义类:
public class ModelMap extends LinkedHashMap<String, Object>
ModelMap是继承自LinkedHashMap的,而LinkedHashMap继承自HashMap,HashMap实现了Map接口,实现其put()方法,因此ModelMap中的put()方法是继承自 HashMap的;
addAttribute方法的定义如下:
public ModelMap addAttribute(String attributeName, Object attributeValue){
Assert.notNull(attributeName, "Model attribute name must not be null");
put(attributeName, attributeValue);
return this;
}
其实也是调用的put方法,但是会在调用之前判断 key值是否为null,如果为null则会抛出以下异常
java.lang.IllegalArgumentException: Model attribute name must not be null,而put方法不会检查key值是否会空
结论:
ModelMap对象的 addAttribute,put两个方法区别是: addAttribute是不允许添加空值的key,put是允许的