MVC框架:
MVC是一个设计模式, MVC全名是Model View Controller,
是模型(model)-视图(view)-控制器(controller)的缩写,
一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,
将业务逻辑聚集到一个部件里面,
在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型)表示应用程序核心(比如数据库记录列表)是应用程序中用于
处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。
View(视图)显示数据(数据库记录)。
负责从视图读取数据,控制用户输入,并向模型发送数据。
Spring MVC应用程序中,模型通常由POJO对象组成,
视图通常是用JSP标准标签库(JSTL)编写的JSP模板,
控制器部分是由dispatcher servlet负责。
Dispatcher servlet(Spring控制器):
当一个web请求发送到Spring MVC应用程序,dispatcher servlet首先接收请求,
然后它组织那些在Spring Web应用程序上下文
配置(实际请求处理控制器和视图解析器)的或者使用注解配置
的组件,所有的这些都需要处理该请求。
基本流程:
Spring3.0中定义一个控制器类,这个类必须标有@Controller注解,当有@Controller注解的控制器收到一个请求时,它会寻找一个合适的handler方法去处理这个请求。在每个handler方法前面都会有一个@RequestMapping注解装饰,它代表该方法用于拦截某一个具体的url请求。所以多个url请求可以被多个handler方法拦截。
当handler方法处理完请求后,它把控制权委托给视图名与handler方法返回值相同的视图。为了提供一个灵活的方法,一个handler方法的返回值并不代表一个视图的实现而是一个逻辑视图也就是没有任何文件扩展名。你可以将这些逻辑视图映射到正确的实现,为一个逻辑名称匹配正确的文件是视图解析器的责任。在mvc-dispatcher-servlet.xml文件中会有一项:
mvc-dispatcher-servlet.xml:
我们来看一个简单的HelloWorld程序:
1> 首先拦截器的配置在web.xml中:
2> mvc-dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.springapp.mvc"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
<context:component-scan base-package="com.springapp.mvc"/>
代表允许com.springapp.mvc包下的使用注解
com.springapp.mvc.HelloController类:
package com.springapp.mvc;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printWelcome(ModelMap model) {
model.addAttribute("message", "Hello World!");
return "hello";
}
}
视图页面hello.jsp:
<html>
<body>
<h1>${message}</h1>
</body>
</html>
运行结果: