1.MVC三层架构:(是一种架构思想,不是设计模式)
M(model):数据模型层:包含了数据和对数据的操作。一般又包括Dao层:直接进行数据库的访问,Service层:调用Dao。
V(View):视图层:展示给用户的东西,前端页面;
C(Controller):控制层:接受从View层(视图层)传递来的数据,再调用Model(数据模型层),进行数据库的操作,再向View层返回处理的结果,职责上相当于一个调度器。
2.SpringMVC是基于Java实现的MVC的轻量级web框架。
1.DispatcherServlet:(核心分发器)
SpringMVC和其他的MVC框架一样,也是以请求驱动的,核心由中心Servlet进行分发处理这些请求。
DispatcherServlet本质也是servlet,同样继承自HttpServlet。
2.SpringMVC的原理如下图所示:
用户发出的请求首先被前端拦截器(中心分发器)拦截,将请求委托给控制器,由具体的控制器去完成请求的内容,此过程一般包括创建模型,访问数据库来完成具体的业务,再将数据模型和视图返回中心分发器,中心分发器将视图和数据模型交给视图层进行渲染,再返回给中心分发器,再交给请求者。
3.SpringMVC的执行原理:
图为SpringMVC的一个整体的工作流程,其中实线的部分有框架提供,虚线的由程序员进行实现。
流程分析:
1.DispatcherServlet(前端控制器),用来接受和拦截用户的请求,在进行分发。
url请求的解析:eg:http://localhost:8080/SpringMVC/hello
SpringMVC:部署在服务器上的web站点;
hello:表示一个具体的控制器。
2.HandlerMapping:根据url找到控制器;
3.HandlerExecution:表示具体的Handler,作用是根据url找到具体的控制器;
4.HandlerAdapter:表示处理器适配器,它按照特定的规格来执行Handler,完成控制器的执行;
5.Controller:具体的控制器;
6.Handler让具体的Controller执行;
7.Controller将执行的结果model view返回给diapatcherservlet;
8.分发给视图层进行渲染;
9.将渲染的结果返回给用户;
代码实现:
1.springmvc web.xml文件的编写:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<!--1.注册 dispatcherServlet-->
<servlet>
<!--servlet的name-->
<servlet-name>springmvc</servlet-name>
<!--对应的类 由Spring提供-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置Spring的配置文件-->
<!--配置文件的命名有讲究-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动参数-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- /* 匹配所有的请求,包括.jsp -->
<!-- / 匹配所有的请求,不包括.jsp -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2.springmvc配置文件的编写(注意命名规范):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--HandlerMapping 处理器映射器-->
<!--根据url找到相应的控制器-->
<!--Spring容器中bean的注册-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--HandlerAdapter 处理器适配器-->
<!--执行具体的控制器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--Controller bean的注册-->
<!-- controller bean的id就是访问的发起点 -->
<bean id="/hello" class="com.xbf.controller.HelloController"/>
</beans>
3.controller层的编写:
package com.xbf.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","hello,springmvc");
mv.setViewName("hello");
return mv;
}
}
4,前端页面的编写:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
总结:
实现流程:
1.web.xml:
注册dispatcherServlet -》servlet名字,servlet对应的类,Springmvc配置文件,启动级别,请求过滤的范围
2.springmvc-servlet.xml:
处理器映射器 HandlerMapping:根据url获得到具体的处理器 bean
处理器适配器 HandlerAdapter:执行处理器 bean
视图解析器 前缀,后缀
3.Controller:
作用:model&view,传递
实现Controller接口,实现handleRequest方法;
并在spring容器中注册bean
4.编写前端页面:
访问:
先被拦截在dispatcherServlet;
最终是要用处理器进行访问的发起: 访问ID
<!--Controller bean的注册-->
<bean id="/hello" class="com.xbf.controller.HelloController"/>
总结:用户不能直接访问web-inf下面的页面,会报404错误!