zoukankan      html  css  js  c++  java
  • springMVC基础

      一:SpringMVC概述

      Spring MVC框架是围绕DispatcherServlet这个核心展开的,DispatcherServlet是Spring MVC的总导演,总策划,它负责截获请求并将其分派相应的处理器处理。

      二:SpringMVC体系结构

      体系结构如下:

      

      从接收请求到返回响应,Spring MVC框架的众多组件同理配合,各司其职,有条不紊地完成分内的工作。在整个框架中,DispatcherServlet处于核心位置,它负责协调和组织不同组件以完成请求处理并返回响应的工作。和大多数Web MVC框架一样,Spring MVC通过一个前端Servlet接收所有的请求,并将具体工作委托给其他组件进行处理,DispatcherServlet就是Spring MVC的前端Servlet。Spring MVC处理请求的整体过程如下:

      1.整个过程始于客户端发出一个HTTP请求,web应用服务器接收到这个请求,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器就将该请求转交给DispatcherServlet处理。

      2.DispatcherServlet接收到这个请求后,将根据请求信息及HandlerMapping的配置找到处理请求的处理器(Handler)。可将HandlerMapping看成路由控制器,将Handler看成目标主机。

      3.当DispatcherServlet根据HandlerMapping得到对应当前请求的Handler后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler。

      4.处理器完成业务逻辑的处理后将返回一个ModelAndView给DispatcherServlet,ModelAndView包含了视图逻辑名和模型数据信息。

      5.ModelAndView中包含的是“逻辑视图名”而非真正的视图对象,DispatcherServlet借由ViewResolver完成逻辑视图名到真实视图对象的解析工作。

      6.当得到真实的视图对象View后,DispatcherServlet就使用这个View对象对ModelAndView中的数据模型进行视图渲染。

      7.最终客户端得到的响应消息可能是一个普通的HTML页面,也可能是一个XML或JSON串,甚至是一张图片或一个PDF文档等不同的媒体形式,

      :案例分析

      1.添加SpringMVC所需要的jar包,大致如下:(根据需要还可自行添加)

      

      2.web容器之web.xml配置:

      

      3.SpringMVC默认配置文件名及位置:

      SpringMVC默认的配置文件名格式:web.xml中配置的“servlet的名称”+“-”+servlet.xml。那么,该SpringMVC的配置文件名为:test-servlet.xml。存放位置默认在WEB-INF目录下,即WEB-INF/test-servlet.xml。如下:

      

      内容如:

      

      4.Controller层

       4.1.StartController自己自己编写的ctrl

      

      当在浏览器中输入:http://localhost:7080/testSpringMVC/start.test请求的时候,会被总派发器DispatcherServlet拦截,经由HandlerMapping把请求映射到具体的控制器。从test-servlet.xml中可以得知:<prop key="start.test">startController</prop>,<bean id="startController" class="com.olymtech.springmvc.StartController"></bean>。将此请求映射到StartController控制器。经由该控制器处理后返回ModelAndView,其中返回的有个逻辑视图名“start”,然后配置中的视图解析器,把控制器返回的视图逻辑名映射到一种具体的视图实现。

      运行结果:页面跳到start.jsp页面,控制台打印出:controller is start!

      4.2.使用自带的ctrl

      这样一来不需要自己编写ctrl去实现Controller接口,但这仅仅用于配置逻辑视图名,直接跳转页面。从test-servlet.xml配置文件中可以看出:

      

      当在浏览器中输入:http://localhost:7080/testSpringMVC/login.test请求的时候,会被总派发器DispatcherServlet拦截,经由HandlerMapping把请求映射到具体的控制器。从test-servlet.xml中可以得知:<prop key="login.test">loginController</prop>。将此请求映射到ParameterizableViewController控制器(自带的控制器实现类)。从配置中可以看出,其中返回的有个逻辑视图名“login”,然后配置中的视图解析器,把控制器返回的视图逻辑名映射到一种具体的视图实现。

      运行结果:页面跳到login.jsp页面。

      4.3.使用自带的ctrl的另一种写法

      这样一来不需要自己编写ctrl去实现Controller接口,但这仅仅用于配置逻辑视图名,直接跳转页面。从test-servlet.xml配置文件中可以看出:

      

      当在浏览器中输入:http://localhost:7080/testSpringMVC/login.test请求的时候,会被总派发器DispatcherServlet拦截,经由HandlerMapping把请求映射到具体的控制器。从test-servlet.xml中可以得知:<prop key="login.test">loginController</prop>。将此请求映射到UrlFilenameViewController控制器(自带的控制器实现类)。然后配置中的视图解析器,把控制器返回的视图逻辑名映射到一种具体的视图实现。(不用显示的指定逻辑视图名,而是默认截取url请求中的login)。

      运行结果:页面跳到login.jsp页面。

      4.4.自己编写的ctrl继承能自动实现对象封装的AbstractCommandController

      

      Emp实体对象:

      

      我们的目的是在员工添加页面,输入相关信息,点击add按钮,能将表单信息提交到ctrl层,并自动封装成Emp对象,而不是利用传统的方式:request.getParameter("name"),这种方式去获取传过来的参数。

      首先,我们根据请求:http://localhost:7080/testSpringMVC/add_emp.test,到达添加员工页面:

      

      当输入这些信息到达EmpController之后,根据test-servlet.xml中的配置,会被自动封装成到command对象中。这样有个缺点就是对Date类型的参数无法封装。

     

  • 相关阅读:
    ActiveMQ 默认用户名和密码
    # ActiveMQ连接超时问题(java.net.SocketException: Connection reset)
    SpringBoot(十) Logback 配置详解
    postgresql10以上的自动分区分表功能
    基于Redis实现延时队列服务
    Redis(十三):Redis分布式锁的正确实现方式
    Redis(十七):批量操作Pipeline
    Redis(十八):Redis和队列
    PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句
    PostgreSQL 从文件时间戳获悉一些信息(如数据库创建时间)
  • 原文地址:https://www.cnblogs.com/vanl/p/5668063.html
Copyright © 2011-2022 走看看