zoukankan      html  css  js  c++  java
  • spring MVC体系结构和请求控制器

     MVC处理过程

    spring MVC架构模式都进行了分层设计如下

    • 数据访问接口:DAO层
    • 处理业务逻辑层:service层
    • 数据实体:POJO
    • 负责前端请求的接受并处理:servlet
    • 负责前端页面展示:JSP

      这种框架就是MVC设计模式,它是软件工程中的一种软件架构模式。它强制性地使软件系统的输入,处理和输出分开,把软件系统分为基本三个部分:

    1. 模型(model):模型对象拥有最多的处理任务,是应用程序的主题部分,它负责数据逻辑(业务规则)的处理和实现数据操作(即在数据库中存取数据)。对应组件:JavaBean
    2. 视图(view):负责格式化数据并把它们呈现给用户,包括数据展示,用户交互,数据验证,界面设计等功能。对应组件:JSP或者HTML文件
    3. 控制器(controller) :负责接收并转发请求,对请求进行处理指派视图并将响应结果发送到客户端。对应组件:servlet

    MVC的优缺点

    1. 优点
      1. 多视图共享一个模型,大大提高代码的可重用性
      2. MVC三个模块相互独立,松耦合架构
      3. 控制器提高了应用程序的灵活和可配置性
      4. 有利于软件工程化管理
    2. 缺点
      1. 原理复杂
      2. 增加了系统结构和实现的复杂性
      3. 视图对模型数据的低效率访问

      对于MVC来说,它并不适合小型甚至中型规模的项目,花费大量时间将MVC应用到规模并不是很大的应用程序通常得不偿失,所以要根据应用场景来决定

    总之,MVC的设计模式最终可以打造出一个松耦合+高重用性+高可适用性的完美架构,当然这也是架构设计的目标之一。

    spring MVC框架介绍

       spring MVC是spring中用于web应用开发的一个模块,是spring提供额一个基于mvc设计模式的优秀web开发框架,它本质上相当于servlet。在MVC设计模式中

    spring MVC作为控制器来建立模型与视图的数据交互,可称为一个典型的MVC框架,如下图

       在spring mvc 框架中,controller替换servlet来负责控制器的职责,controller接受请求,调用相应的model进行处理,处理器完成业务处理后返回处理结果。

    controller调用相应的view并对处理进行视图渲染,最终客户端得到响应消息。由于spring mvc的结构较为复杂,上述只是对其框架结构的一个简单介绍。下面

    我们将搭建spring mvc环境,并实现简单的例子来体验spring mvc是如何使用的。

    spring MVC环境搭建

    在新建web Project后,搭建步骤如下:

    1. 引入jar文件
    2. spring MVC配置:
      1. 在web.xml中配置servlet,定义DispatcherServlet
      2. 创建Spring MVC的配置文件
    3. 创建controller(处理请求的控制器)
    4. 创建view
    5. 部署运行

    所需的jar文件如图(log4J可以无视):

    web.xml中配置servlet

      Spring MVC是基于servlet的,dispatcherServlet是整个spring mvc框架的核心,它负责截获请求并将其分派给相应的处理器处理,那么必须配置时,

    首先就要进行dispatcherServlet的配置,web.xml中配置关键代码如下:

     <!-- 配置spring mvc的核心控制器DispatcherServlet  -->
      <servlet>
          <servlet-name>srpingmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <!-- 初始化参数通过 DipatcherServlet 获取到初始化参数  -->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:spring-servlet.xml</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
          <servlet-name>srpingmvc</servlet-name>
          <!-- 注意这里我这里是懒得改了,此拦截路径最好不要使用 / 因为它会把所有请求拦截 最好是 *.啥  比如:*.do 就会拦截以 .do结尾的请求 -->
          <url-pattern>/</url-pattern>
      </servlet-mapping>

    注意最好避免使用 / 如果使用那么很有可能你在引用外部文件的时候会出问题 如下

    这个请求会被拦截导致404从而使用不了js,但是路径又没问题。所以注意了 最好避免使用  /

    创建sprig MVC配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:tx="http://www.springframework.org/schema/tx"  
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
        <!-- 配置映射 自动扫描 cn包下面所有控制器(包括子包) -->
        <context:component-scan base-package="cn.controller"></context:component-scan>
        <!-- 与返回出的值添加 前后缀 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    </beans>

    创建控制器

    package cn.controller;
    
    import java.util.Map;
    
    import org.apache.log4j.Logger;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    @RequestMapping("/user")     //要求路径前必须加上 user 比如要求路径是 index就需要写成 user/index
    public class IndexController {
        private Logger logger = Logger.getLogger(IndexController.class);   
        //表示方法与那个请求URL对应(此处:”/index“)
        @RequestMapping("/index")
        public String index() {
            logger.info("hello,springMVC!");
            return "index";
        }
    
    }

    测试运行

     在web-INF下面建立一个index.jsp页面(直接运行会404),在浏览器中输入 http://localhost:8080/SpringMVC/user/index.html 即可

    参数传递

    那么如果要传入参数又该如何呢?只需添加上参数即可如下

    @RequestMapping("/index")
        public String index(String name) {
            logger.info("hello,springMVC!:"+name);
            return "index";
        }

    传入的名称需要与参数名称相同如下

    如果直接使用get方法进行访问那么获取 index()方法获取的中文将会是乱码。也可以指定访问方式如下

    @RequestMapping(value= {"/index"},method=RequestMethod.POST)
        public String index(String name) {
            logger.info("hello,springMVC!:"+name);
            return "index";
        }

    访问结果如下说不能使用get方式进行访问

    参数的类型有很多,如果你想使用某个sqlsession,或者request都可以添加进去,当然这些参数不需要手动的传入。

    那么接受的参数又如何传递给页面呢?如下添加Model

      @RequestMapping(value= {"/index"})
        public String index(String name,Model model) {
            logger.info("hello,springMVC!:"+name);
            name="张三";
            //保存 数据
            model.addAttribute("name", name);
            return "index";
        }

    jsp页面代码如下

    <body>
        <h1>hell springMVC</h1>
        <h1>userName-->${name}</h1>
    </body>

    如果需要传递的参数对象呢?如下

    @RequestMapping(value= {"/index"})
        public String index(String name,Map<String, User> uList,Model model) {
            logger.info("hello,springMVC!:"+name);
            name="张三";
            User u = new User();
            u.setName("二狗子");
            //保存 数据
            model.addAttribute("name", name);
            model.addAttribute("username", u);
            model.addAttribute(u);  //如果不给名称 默认访问名称为 user
            uList.put("u", u);
            return "index";
        }

    页面代码

    <body>
        <h1>hell springMVC</h1>
        <h1>usernameName-->${username.name}</h1>
        <h1>mapU-->${u.name}</h1>
        <h1>User-->${user.name}</h1>
    </body>

    如果还是不会可以去网盘下载我演示的项目:

    链接:https://pan.baidu.com/s/1oYjZW0fpqXKcI3WXfIezxA
    提取码:fdle

    不会导入项目的可以去这里:https://www.cnblogs.com/hfx123/p/9745826.html

  • 相关阅读:
    Hadoop 0.23.1 Release Notes
    maven编译参数
    Hadoop快速入门
    HTML Parser HTML Parser
    EasyHadoop v1.0
    Hudson+Maven+SVN 快速搭建持续集成环境
    对技术要有足够的尊重和敬畏
    hudson设置
    python之强大的日志模块 竹叶青 的专栏 博客频道 CSDN.NET
    PHP学习之七:错误控制运算符
  • 原文地址:https://www.cnblogs.com/hfx123/p/9718227.html
Copyright © 2011-2022 走看看