基础:
关于MVC的理解:
1) 模型:处理业务逻辑.
2) 视图:负责数据页面展示.(视图=数据+视图名)
3) 控制器:用于处理请求,并依据请求调用相应的模型处理,将处理结果返回给视图.
关于springMVC的理解:
1) springMVC也是基于MVC架构设计的.(符合MVC基本结构)
运行流程图:
运行流程口述:
1)DispatcherServlet收到请求,依据HandlerMapping中的配置得到请求路径与Controller的对应关系.
2)接着依据这个对应关系去调用相应的Controller来处理业务.Controller会将处理结果返回给DispatcherServlet
注:以ModelAndView的形式返回结果.
3)DispatcherServlet拿到处理结果后会依据ViewResolver将返回结果解析成视图对象.(就是我们常用的jsp等)
4)最后调用相应的jsp来展现数据.
如有疑问请看下文================================================
2) springMVC有五大组件:
a.DispatcherServlet 前端控制器 用于处理请求,依据handlerMapping去调用相应的Controller,获得
Controller的返回结果(ModelAndView),并依据ViewResolver去调用相应的jsp(也可能是其他的变现形式)
b.HandlerMapping 映射处理器 负责描述请求路径与Controller(模型/处理器)的对应关系
c.Controller 处理器 负责具体的业务处理.(如:计算一个人的bmi指数)
d.ModelAndView 模型和视图 理论上等于 数据+视图名
e.ViewResolver 视图解析器 负责将视图名解析成真正的视图对象(如:jsp)
详解:
DispatcherServlet中文翻译为前端控制器,在这里也是担任MVC控制器的.springMVC为我们封装好了这个控制器,我们只需要配置就可以使用.如果你研究过DispatcherServlet的基础实现的话你会发现,他会自动去启动spring容器,而启动spring容器又需要spring-mvc.xml文件,这也就是下方web.xml配置文件中配置classpath:spring-mvc.xml的原因.(如果不知道启动spring容器为什么需要spring-mvc.xml文件,请自行百度)
下方提供web.xml,HelloController.java,spring-mvc.xml,hello.jsp文件,这是一个springMVC的完整实现实例.
该实例实现了简单的springMVC,成功访问将输出Hello,SpringMVC!.
web.xml
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!--
DispatcherServlet的初始化方法会启动
Spring容器,所以,需要指定Spring配置文件的
位置。
注:(了解)
DispatcherServlet默认会查找
/WEB-INF/springmvc-servlet.xml,
以它作为spring的配置文件。
其中,springmvc是DispatcherServlet的名字。
比如,将名字改为action,则查找
action-servlet.xml。
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
HelloController.java
<!-- 该文件为HelloController.java文件,获得请求后,会在控制台输出handleRequest(),并且返回ModelAndView.(即返回视图名为hello的jsp文件)
-->
package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloController implements Controller{
public ModelAndView handleRequest(
HttpServletRequest arg0,
HttpServletResponse arg1)
throws Exception {
System.out.println("handleRequest()");
/*
* ModelAndView有两个常用的构造器
* ModelAndView(String viewName)
* ModelAndView(String viewName,Map data)
* 注:
* viewName:视图名
* data: 数据
*/
return new ModelAndView("hello");
}
}
spring-mvc.xml
<!--
该文件为spring-mvc.xml文件,常放置已resources目录下.
该文件配置了springMVC五大组件中的:
HandlerMapping (映射处理器)
Controller (处理器)
ViewResolver (视图解析器)
注:剩余两个组件:DispatcherServlet(前端控制器)在web.xml文件中配置
ModelAndView(模型和视图)为jsp
-->
<!-- 配置HandlerMapping -->
<!--
告诉DispatcherServlet,
请求路径与模型(Controller)的对应关系。
-->
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.do">helloController</prop>
</props>
</property>
</bean>
<!-- 配置Controller(处理器) -->
<bean id="helloController"
class="controller.HelloController"/>
<!-- 配置ViewResolver(视图解析器) -->
<!--
告诉DispatcherServlet,视图名与视图对象的对应关系。
注: 视图对象指的是不同的视图技术(比如jsp,
freemarker等)。
-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
hello,jsp
<!-- 该文件为hello.jsp文件,负责页面展示(ModelAndView).即成功访问则输出Hello,SpringMVC! -->
<%@page pageEncoding="utf-8"
contentType="text/html; charset=utf-8" %>
<html>
<head></head>
<body style="font-size:30px;">
Hello,SpringMVC!
</body>
</html>