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
http://localhost:8080:服务器域名;
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错误!