Spring MVC原理及配置

2023-05-16

Spring MVC原理及配置

1. Spring MVC概述

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

2. SpringMVC运行原理

1652870-20190926232517984-757361521.png

3.SpringMVC接口解释

3.1 DispatcherServlet接口

Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。

3.2 HandlerMapping接口

能够完成客户请求到Controller映射。

3.3 Controller接口

需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。
Controller将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。
从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。

3.4 ViewResolver接口

Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。

4. DispatcherServlet

是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:

  1. 截获符合特定格式的URL请求。
  2. 初始化DispatcherServlet上下文对应WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
  3. 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

5. 实例

5.1 配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--中文过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

5.2 配置springmvc.xml文件

<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" 
       xsi:schemaLocation="
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!--扫描所有的包-->
    <context:component-scan base-package="mrzhangxd.xyz"/>
    <!-- 视图解析器 -->
    <mvc:annotation-driven></mvc:annotation-driven>
    <!--<task:annotation-driven></task:annotation-driven>-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀prefix -->
        <property name="prefix" value="/WEB-INF/view/"></property>
        <!-- 后缀suffix -->
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

如上两个主要配置文件配置成功,下面进行代码的编写

5.3 主要代码编写

  1. reg.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>用户注册</title>
    </head>
    <body>
    <form action="save" method="post">
        <fieldset>
            <legend>创建用户</legend>
            <p>
                <label>姓名:</label> <input type="text" id="name" name="name" tabindex="1">
            </p>
            <p>
                <label>年龄:</label> <input type="text" id="age" name="age" tabindex="2">
            </p>
            <p>
                <label>密码:</label> <input type="text" id="pwd" name="pwd" tabindex="3">
            </p>
            <p id="buttons">
                <input id="reset" type="reset" tabindex="4" value="取消">
                <input id="submit" type="submit" tabindex="5" value="注册">
            </p>
        </fieldset>
    </form>
    </body>
    </html>
  2. success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <div id="gloobal">
        <h4>注册成功</h4>
        <p>
        <h5>用户信息如下:</h5>
        姓名:${user.name}<br /> 年龄:${user.age}<br /> 密码:${user.pwd}<br />
        </p>
    </div>
    </body>
    </html>
  3. UserController.java

    package mrzhangxd.xyz.controller;
    
    import mrzhangxd.xyz.pojo.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class UserController {
        @RequestMapping("")
        public String Create(Model model) {
            return "reg/reg";
        }
        @RequestMapping("/save")
        public String Save(@ModelAttribute("form") User user, Model model) {
            model.addAttribute("user", user);
            return "reg/success";
        }
    }
  4. User.java

    package mrzhangxd.xyz.pojo;
    
    import java.io.Serializable;
    import java.util.Date;
    
    public class User implements Serializable {
    
        private static final long serialVersionUID = 1L;
        private Integer id; //用户ID
        private String name; // 用户名
        private String pwd; // 密码
        private Integer age; // 年龄
        private Date creatTime; // 创建时间
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPwd() {
            return pwd;
        }
    
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Date getCreatTime() {
            return creatTime;
        }
    
        public void setCreatTime(Date creatTime) {
            this.creatTime = creatTime;
        }
    }
    

5.4 运行结果

  1. 注册页面
    1652870-20190926232552828-807418643.png

  2. 成功页面
    1652870-20190926232601338-2081519979.png

--- END ---

转载于:https://www.cnblogs.com/MrZhangxd/p/11595142.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC原理及配置 的相关文章

  • ValueError: too many values to unpack (expected 2)

    循环一个字典时报错 xff1a 数据 xff1a 39 O DATA 39 39 ACCOUNT 39 39 A20001002 39 39 ZACTOSP 39 Decimal 39 21792635 96 39 39 ZBUDGET 3
  • 数据可视化的历史

    数据可视化是什么 xff1f The main goal of data visualization is its ability tovisualize data communicating information clearly and
  • 《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析

    编译原理 构造与正规式 0 1 01 等价的 DFA 例题解析 解题步骤 xff1a NFA 状态转换图子集法DFA 的状态转换矩阵DFA 的状态转图 解 xff1a 已给正规式 xff1a 0 1 01 画出 NFA 状态转换图如下 xf
  • 根号及运算法则

    1 根号及运算法则 成立条件 xff1a a 0 xff0c n 2且n N 成立条件 xff1a a 0 n 2且n N 成立条件 xff1a a 0 xff0c b gt 0 xff0c n 2且n N 成立条件 xff1a a 0 x
  • 第14章 Linux开机详细流程

    计算机启动分为内核加载前 加载时和加载后3个大阶段 xff0c 这3个大阶段又可以分为很多小阶段 xff0c 本文将非常细化分析每一个重要的小阶段 内核加载前的阶段和操作系统无关 xff0c Linux或Windows在这部分的顺序是一样的
  • 个人日常训练计划

    日期 名称 2019 09 26 2018 2019 ACM ICPC Southeastern European Regional Programming Contest SEERC 2018 2019 09 27 浅学模拟退火 2019
  • RIA迷你书序言

    RIA Minibook Prologue RIA迷你书序言 Rich Internet Applications or RIAs have truly revolutionized user experiences online When
  • 异步请求CloseableHttpAsyncClient的使用

    1 前言 项目有个需求 xff0c 需要把一些没用影响业务逻辑的http请求改成异步请求 xff0c httpclient在4 0后提供新的api CloseableHttpAsyncClient可以使用 xff0c 记录下使用过程 2 网
  • Ubuntu 安装 uWSGI

    uWSGI官方网址 xff1a https pypi org project uWSGI 使用如下命令安装 xff1a pip install uWSGI 报如下错 xff1a Collecting uWSGI Using cached h
  • Adb分析及获取root权限

    Adb的全称为Android Debug Bridge xff0c 起到通过PC对Android系统的调试桥的作用 xff0c 是一个多用途的工具 xff0c 它能够执行多种命令 xff0c 还能提供一个shell 这儿简单介绍一下Adb的
  • Intel MPI 配置与基本使用

    安装 Document 系统配置 含NFS 编译环境 设置 加载 mpivars c sh 脚本 创建文本文件 mpd hosts xff0c 其中保存有集群的节点列表 xff0c 每行一个名字 只针对开发者 确保环境变量 PATH 中包含
  • win10+VS2019+NVIDIA CUDA10.1 安装失败解决方案

    win10 43 VS2019 43 NVIDIA CUDA10 1安装时 xff0c 提示 NVIDIA 安装程序失败 xff0c 几乎所有组件的状态都显示 未安装 百度了一下 xff0c 原因可能是我的电脑有VS xff0c 影响了cu
  • 【转载】阿里云域名解析将一个域名指向另一个域名

    在域名解析的环节 xff0c 有时候我们会遇到将一个域名解析到另一个域名的情况 xff0c 在阿里云的云解析DNS中可以通过添加解析记录来实现 xff0c 设置CNAME项的值设置为另一个域名 xff0c 即可实现该功能 下面以阿里云服务器
  • 机器学习算法-logistic回归算法

    Logistic回归算法调试 一 算法原理 Logistic回归算法是一种优化算法 xff0c 主要用用于只有两种标签的分类问题 其原理为对一些数据点用一条直线去拟合 xff0c 对数据集进行划分 从广义上来讲这也是一种多元线性回归方法 x
  • 词频统计项目的总结

    刚开始在做词频统计时只能在代码中更改统计的段落 xff0c 这样使代码看起来非常的乱而且容易出错 xff0c 随着老师的要求有变更 xff0c 我的代码也开始进行更新 xff0c 词频统计实现可以从控制台进行输入要统计文档的名字进行统计 x
  • taishan服务器修改为u盘启动,bios改成u盘启动

    怎么在BIOS界面设置U盘启动呢 这个对于很多想要U盘重装系统的朋友来说非常头疼的事情 xff0c 相对小白用户来说 xff0c BIOS界面的专业性比较强 xff0c 而且是英文状态 xff0c 很多朋友直接懵了 xff0c 那么如何设置
  • Flex的危局,还是HTML5的盛宴?

    为InfoQ的RIA迷你书写序 xff0c 似乎是我的宿命 由于工作原因把这个任务推迟了一段时间之后 xff0c 后果居然是不仅写了序 xff0c 还成为了另一篇序的译者 互联网10年 xff0c 始于2000年 对于互联网来说 xff0c
  • c语言错误c1021,C语言命语法错误大全

    C语言 语法错误大全 fatal error C1004 unexpected end of file found 未找到文件末尾 可能是括号匹配问题 fatal error C1021 invalid preprocessor comma
  • SQL Server 2012企业版和标准版的区别

    关于使用Microsoft SQL Server 数据库的公司一般会有疑问 xff0c 企业版数据库和标准版数据库的区别在哪 xff1f 如果采购企业版的价格和标准版的价格相差很大 xff0c 从多方资料查询发现 xff0c 我认为最主要的
  • 查询SQL SERVER 数据库版本号脚本语句

    数据库直接执行此语句即可 select 64 64 version 示例 xff1a Microsoft SQL Server 2014 12 0 2000 8 X64 Feb 20 2014 20 04 26 Copyright c Mi

随机推荐