SpringMVC学习(一):三层架构及入门案例

一、三层架构和SpringMVC

1、三层架构

我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务端。另一种是B/S架构,也就是浏览器服务器,在
javaEE开发中,几乎全都是基于B/S架构的开发,那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三
层架构在我们的实际开发中使用的非常多。三层架构中,每层各司其职,我们来说说具体每层都负责哪些方面?
表现层:
	也就是我们常说的web层,它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求,web 层,web 需要
	接收 http请求,完成 http 响应。
	表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
	表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
	表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系)
业务层:
	也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务层,但是业务层
	不依赖 web 层。业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,
	事务应该放到业务层来控制)
持久层:
	也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,
	数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是
	和数据库交互,对数据库表进行曾删改查的。

2、MVC模型

	MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建
	 Web 应用程序表现层的模式。MVC 中每个部分各司其职:
	Model(模型):通常指的就是我们的数据模型。作用一般情况下用于封装数据。
	View(视图):通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。通常视图是依据模型数据创建的。
	Controller(控制器):是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的。
						它相对于前两个不是很好理解,这里举个例子:
	例如:
		我们要保存一个用户的信息,该用户信息中包含了姓名,性别,年龄等等。
		这时候表单输入要求年龄必须是 1~100 之间的整数。姓名和性别不能为空。并且把数据填充到模型之中。
		此时除了 js 的校验之外,服务器端也应该有数据准确性的校验,那么校验就是控制器的该做的。
		当校验失败后,由控制器负责把错误页面展示给使用者。
		如果校验成功,也是控制器负责把数据填充到模型,并且调用业务层实现完整的业务需求。

最典型的MVC就是JSP+servlet+javabean的模式。
SpringMVC学习(一):三层架构及入门案例_第1张图片

3、SpringMVC概述

	SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring FrameWork的后续产品,已经
融合在 Spring Web Flow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,从而在
使用Spring进行 WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),
Struts2 等。
	SpringMVC已经成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为最优秀的MVC框架。
它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。

(1)中心控制器

​ Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。

​ Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)

SpringMVC的原理:

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

(2)SpringMVC的执行原理

1、用户发送出请求到前端控制器DispatcherServlet。

2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。

3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。

4、DispatcherServlet调用HandlerAdapter(处理器适配器)。

5、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。

6、Controller执行完成返回ModelAndView对象。

7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。

8、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。

9、ViewReslover解析后返回具体View(视图)。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、DispatcherServlet响应用户。
SpringMVC学习(一):三层架构及入门案例_第2张图片
涉及组件分析:

1、前端控制器DispatcherServlet(不需要程序员开发),由框架提供,在web.xml中配置。

作用:接收请求,响应结果,相当于转发器,中央处理器。

SpringMVC学习(一):三层架构及入门案例_第3张图片

2、处理器映射器HandlerMapping(不需要程序员开发),由框架提供。

作用:根据请求的url查找Handler(处理器/Controller),可以通过XML和注解方式来映射。

3、处理器适配器HandlerAdapter(不需要程序员开发),由框架提供。

作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler。

4、处理器Handler(也称之为Controller,需要工程师开发)

注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。

作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。

5、视图解析器ViewResolver(不需要程序员开发),由框架提供

作用:进行视图解析,把逻辑视图名解析成真正的物理视图。

SpringMVC框架支持多种View视图技术,包括:jstlView、freemarkerView、pdfView等。

6、视图View(需要工程师开发)

作用:把数据展现给用户的页面

View是一个接口,实现类支持不同的View技术(jsp、freemarker、pdf等)

(3)SpringMVC在三层架构中的位置

SpringMVC学习(一):三层架构及入门案例_第4张图片

(4)SpringMVC的优势

  • 清晰的角色划分:

​       前端控制器(DispatcherServlet)

​       请求到处理器映射(HandlerMapping)

​       处理器适配器(HandlerAdapter)

​       视图解析器(ViewResolver)

​       处理器或页面控制器(Controller)

​       验证器( Validator)

​       命令对象(Command 请求参数绑定到的对象就叫命令对象)

​       表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

  • 分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。
  • 由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。
  • 和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的。
  • 可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。
  • 可定制性,HandlerMapping、ViewResolver 等能够非常简单的定制。
  • 功能强大的数据验证、格式化、绑定机制。
  • 利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。
  • 本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
  • 强大的 JSP 标签库,使 JSP 编写更容易。

还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等

二、SpringMVC的入门案例

1、导入依赖


  
    org.springframework
    spring-context
    ${spring.version}
  
  
    org.springframework
    spring-web
    ${spring.version}
  
  
    org.springframework
    spring-webmvc
    ${spring.version}
  
  
    javax.servlet
    servlet-api
    2.5
    provided
  
  
    javax.servlet.jsp
    jsp-api
    2.0
    provided
  

2、配置web.xml,注册DispatcherServlet


    Archetype Created Web Application
    
    
        dispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:springmvc.xml
        
        1
    
    
        dispatcherServlet
        /
    

    
    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        characterEncodingFilter
        /*
    


3、编写配制文件:添加处理映射器,处理适配器,视图解析器




    
    

    
    
        
        
    

    
    
    

    
    
        
            
                
            
        
    

4、编写业务类Controller,要么实现Controller接口,要么增加注解;需要返回一个ModelAndView,装数据,封视图。

//控制器类
@Controller
@RequestMapping(path = "/user")
public class HelloController {
    @RequestMapping(path = "/hello")
    public String sayHello(){
        System.out.println("Hello StringMVC");
        return "success";
    }

    @RequestMapping(value = "/testRequestMapping",params = {"username=yangjian"},headers = {"Accept"})
    public String testRequestMapping(){
        System.out.println("测试RequestMapping注解......");
        return "success";
    }
}

5、将这个类交给SpringIOC容器,注册bean

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

入门程序

<%--入门程序--%> RequestMapping注解

6、配置跳转的页面:success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>


    Title


    

入门成功了

${ requestScope.msg } ${ sessionScope }

可能遇到的问题:访问404.

  1. 查看控制台输出,看一下是不是缺少了什么jar包。
  2. 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖!
  3. 重启Tomcat 即可解决!

你可能感兴趣的:(SpringMVC,SpringMVC)