SpringMVC 环境配置

news2024/10/2 10:28:08

文章目录

  • 引入
    • 1、MVC的概念
    • 2、Spring MVC基本原理
  • 一、导入坐标(导包)
    • 导入Spring MVC所需要的jar包
  • 二、新建springmvc-config.xml文件
  • 三、配置web.xml
  • 四、 创建Controller
  • 五、配置SpringMVC配置文件
  • 六、配置页面
  • 其他


引入

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。Spring MVC框架也是我们Spring框架中的一部分。

在我们之前的JavaWeb的学习中,我们已经使用原生的Servlet来进行网页与后端进行数据交互。在接下来的学习中,我们将采用Spring MVC框架来替代我们的原生的Servlet进行数据交互。

1、MVC的概念

在Spring的Web MVC框架提供了模型 - 视图 - 控制器架构以及可用于开发灵活,松散耦合的Web应用程序准备的组件。 MVC模式会导致分离的应用程序(输入逻辑,业务逻辑和UI逻辑)的不同方面,同时提供这些元素之间的松耦合。对于我们开发一个程序来说,我们尽可能的做到高内聚,低耦合的设计原则。

  • 高内聚:描述了模块内部的一系列功能的相关程度,对于功能之间相关度不高或者根本没有相关性的功能包含在模块中的做法是不可取的。

  • 低耦合:描述了模块直接的依赖、感知程度,耦合的衡量标准是从低到高,一般来说耦合度越低越好。

简而言之:就是模块与模块之间依赖程度尽可能的低(低耦合),模块内部功能关联尽可能紧密(高内聚)。

Tips:当然有些特殊情况下,可能这二个原则也有矛盾的地方,当然我们还是要根据项目的实际需要及情况进行抉择,当然这二个原则是为了设计提供更好的扩展性、可读性、可维护性、极高的可复用性,所以要求我们在设计时尽量去满足这二个基本原则。

Spring MVC框架中的模型M - 视图V - 控制器C:

  • 模型(Model):封装了应用程序的数据和一般他们会组成的POJO。

  • 视图(View):是负责呈现模型数据和一般它生成的HTML、JSP等输出,客户端的浏览器能够解释。

  • 控制器(Controller):负责处理用户的请求,并建立适当的模型,并把它传递给视图渲染。

2、Spring MVC基本原理

Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器(核心分发器)是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。


核心架构的具体流程步骤如下:

  • 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行 处理,作为统一访问点,进行全局的流程控制;
  • DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求映射为 HandlerExecutionChain 对象(包含一 个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新 的映射策略;
  • DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器, 即适配器设计模式的应用,从而很容易支持很多类型的处理器;
  • HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处 理方法,完成功能处理;并返回一个ModelAndView 对象(包含模型数据、逻辑视图名);
  • ModelAndView 的逻辑视图名——> ViewResolver,ViewResolver 将把逻辑视图名解析为具体的View,通过这种策 略模式,很容易更换其他视图技术;
  • View——>渲染,View 会根据传进来的Model 模型数据进行渲染,此处的Model 实际是一个Map 数据结构,因此 很容易支持其他视图技术;
  • 返回控制权给DispatcherServlet,由DispatcherServlet 返回响应给用户,到此一个流程结束。

在这里插入图片描述

一、导入坐标(导包)

 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

导入Spring MVC所需要的jar包

commons-logging-1.1.3.jar //日志的支撑jar包

spring-aop-5.0.0.RELEASE.jar //AOP的jar包

spring-beans-5.0.0.RELEASE.jar //Spring 所必须的jar包

spring-context-5.0.0.RELEASE.jar // Spring 所必须的jar包

spring-core-5.0.0.RELEASE.jar // Spring 所必须的jar包

spring-expression-5.0.0.RELEASE.jar // Spring 所必须的jar包

spring-web-5.0.0.RELEASE.jar // Spring MVC 所必须的jar包

spring-webmvc-5.0.0.RELEASE.jar // Spring MVC 所必须的jar包

如果是动态web项目,可以将jar包导入到WEB-INF/lib文件夹中,后期我们讲到Maven项目,可以通过Pom.xml文件进行依赖导入。

二、新建springmvc-config.xml文件

  • 开启注解扫描
	<context:component-scan base-package="com.wk"></context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>
  • 自动添加文件前后缀
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--        前缀-->
        <property name="prefix" value="/"></property>
        <!--        后缀-->
        <property name="suffix" value=".jsp"></property>

</bean>

三、配置web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>springMVC</display-name>

  <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-config.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>
</web-app>

四、 创建Controller

  • 1、在我们项目的src路径下创建Controller,遵循我们项目的命名规则,创建对应目录架构的包结构。
  • 第二步 在controller层里面创建我们Controller类
@Controller

public class UserController {

      @Autowired

      private   UserService userService;



      @ResponseBody

    @RequestMapping(value="/register",method=RequestMethod.POST)

      public   String register(User user){

          int   i=userService.insertUser(user);

          if(i==1)

              return   "success";

          return   "fail";  

      }

 

    @RequestMapping(value="/login",method=RequestMethod.GET)

      public   ModelAndView login(User user){

          User   user1=userService.login(user);

          ModelAndView   modelAndView=new ModelAndView();

          if(user1==null)

          {

              modelAndView.setViewName("../../Login");

              return   modelAndView;

          }

          modelAndView.addObject("user",   user1);

          modelAndView.setViewName("index");

          return   modelAndView;

         

      }

}

五、配置SpringMVC配置文件

  • 第一步:引入Spring的约束
<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/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

          http://www.springframework.org/schema/mvc

        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">   

 
  • 第二步: 配置Spring 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:context="http://www.springframework.org/schema/context"

         xmlns:mvc="http://www.springframework.org/schema/mvc"

         xsi:schemaLocation="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

          http://www.springframework.org/schema/mvc

          http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!--   1.注解扫描器 -->

    <context:component-scan   base-package="com.iflytek.*">

         <context:include-filter   type="annotation"   expression="org.springframework.stereotype.Controller"/>

    </context:component-scan>

六、配置页面


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

      pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML   4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type"   content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

         <h1>登录界面!!!</h1>

</body>

</html>

其他


开启静态资源访问
Location:资源文件所存放的物理路径
mapping:资源文件所访问的请求地址

	<mvc:resources mapping="/img/" location="/img/**"></mvc:resources>
    <mvc:resources mapping="/js/" location="/js/**"></mvc:resources>
    <mvc:resources mapping="/css/" location="/css/**"></mvc:resources>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cv算法工程师学习教程

前言一&#xff0c;计算机系统 1.1&#xff0c;计算机系统书籍1.2&#xff0c;设计模式教程 二&#xff0c;编程语言 2.1&#xff0c;C 学习资料2.2&#xff0c;Python 学习资料 三&#xff0c;数据结构与算法 3.1&#xff0c;数据结构与算法课程3.2&#xff0c;算法题解 四&am…

数字信号处理及python实现(三)

数字信号处理及python实现三抽样引起的混叠抽样的频域视图样本重建信号拟合正弦波线性与多项式内插理想低通滤波器这是参考知乎的数字信号处理及matlab实现的python实现版本&#xff0c;参考连接 上一期:数字信号处理及python实现(二) 项目文件结构 test为测试文件&#xff…

【Vue】Vue开发实战之我的笔记(ch18-ch27)--20221115

参考https://blog.csdn.net/yfm120750310/article/details/111353963 18 | 为什么需要Vuex 18.1 为什么需要Vuex provide和inject虽然能够实现层层传递的数据管理&#xff0c;但对于一个大的管理系统而言会显得有些繁琐&#xff0c;我们需要一个大型的状态管理系统。 Vuex不…

甘特图是什么?如何快速搭建?

甘特图是什么&#xff1f; 甘特图是一种条状图&#xff0c;直观展示项目进展随时间的走势及联系。其中&#xff0c;项目时间由横轴表示&#xff0c;项目活动由纵轴表示。整体线条表示整个项目期间内&#xff0c;计划和实际的活动完成情况。甘特图起初用于美国胡佛水坝和美国洲…

cpe(通用平台枚举)命名规范及python CPE库实战

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

一文看懂Linux 页表、大页与透明大页

一、 内存映射与页表 1. 内存映射 我们通常所说的内存容量&#xff0c;指的是物理内存&#xff0c;只有内核才可以直接访问物理内存&#xff0c;进程并不可以。 Linux 内核给每个进程都提供了一个独立的虚拟地址空间&#xff0c;并且这个地址空间是连续的。这样&#xff0c;…

如何用Python 快速搭建HTTP服务器

Python具有语法简单、语句清晰的特点,而且Python的兼容性比较好,可以将其他语言制作的模块联结起来,具有强大且丰富的库,封装后可以轻松调用,因此成为编程语言中的“网红“&#xff0c;甚至被称为非计算机从业者的第一语言。 Python在IT就业市场也是最受欢迎、最热门的技术技能…

SpringBoot整合Redis

SpringBoot整合Redis 文章目录SpringBoot整合Redis一 .简介1. redie是什么&#xff1f;2. redie的使用场景&#xff1f;二 . 使用1. 引入依赖2. 配置文件3. 启动redis4. 创建Redis工具类5. 创建测试类6. 查看效果一 .简介 1. redie是什么&#xff1f; Redis是现在最受欢迎的N…

图解计算机的存储器金字塔

本文已收录到 GitHub AndroidFamily&#xff0c;有 Android 进阶知识体系&#xff0c;欢迎 Star。技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好&#xff0c;我是小彭。 在计算机组成原理中的众多概念中&#xff0c;开发者接触得最…

LeetCode-剑指43-1-n整数中出现1的次数

1、逐位统计 我们统计每一位k上面可能出现1的次数&#xff1a;1、对于每一位k上面的出现的1&#xff0c;我们首先统计其出现(n/10k)10k−1(n/10^k)\times10^{k-1}(n/10k)10k−1次的1&#xff1b;2、考虑到存在余数的情况&#xff0c;我们还需要比较剩余余数中出现1的次数&…

浅谈HTTP缓存与CDN缓存的那点事

HTTP缓存与CDN缓存一直是提升web性能的两大利器&#xff0c;合理的缓存配置可以降低带宽成本、减轻服务器压力、提升用户的体验。而不合理的缓存配置会导致资源界面无法及时更新&#xff0c;从而引发一系列的衍生问题。本文将分别将从HTTP缓存与cdn缓存的规则、流程、配置入手&…

XSS挑战之旅1-10关

文章目录前言第1关第2关第3关第4关第5关第6关第7关第8关第9关第10关前言 漏洞介绍&#xff1a;XSS漏洞 参考文章&#xff1a;XSS挑战之旅 游戏规则&#xff1a;触发alert()弹窗&#xff0c;进入下一关 第1关 进入第一关 随便输入一下&#xff0c;观测输出&#xff0c;看源代…

还在为数据库事务一致性检测而苦恼?让Elle帮帮你,以TDSQL为例我们测测 | DB·洞见#7

数据库用户通常依赖隔离级别来确保数据一致性&#xff0c;但很多数据库却并未达到其所表明的级别。主要原因是&#xff1a;一方面&#xff0c;数据库开发者对各个级别的理解有细微差异&#xff1b;另一方面&#xff0c;实现层面没有达到理论上的要求。 用户在使用或开发者在交…

147. SAP UI5 SmartTable 控件的使用介绍

本文来自笔者 SAP 开发技术交流知识星球内一位朋友的提问: smartfilter bar 有个输入框Cost Element绑定了cds实现value help 请问其对应的suggestion功能是通过cds的注解实现的嘛? 要回答这个问题,我们必须首先掌握 SAP UI5 SmartTable 控件的使用方式,然后才能深入探究 …

【Tensorflow】使用Tensorflow自定义模型和训练

Tensorflow的核心与NumPy非常相似&#xff0c;但具有GPU支持&#xff1b;Tensorflow支持分布式计算&#xff08;跨多个设备和服务器&#xff09;。 像NumPy一样使用TensorFlow 运算符是在Python 3.5 中添加的&#xff0c;用于矩阵乘法&#xff0c;等效于 tf.matmul() 函数。…

C++数据结构迷宫哈希表二叉树

C数据结构迷宫哈希表二叉树 《数据结构》应用系统设计——迷宫问题 问题描述:设计算法求出并显示从入口点到出口点可沿八个方向前进的一条通路&#xff0c;或显示没有通路 难度:易 基本要求: (1)键盘(或文件)输入迷宫行数m和列数n&#xff0c;计算机随机生成迷宫(或从文件读入…

robots (攻防世界)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址 啥也没有 解题工具: 额...浏览器&#xff1f; (可能还需要百度) 问题解析: 科普时间到 robots协议也称爬虫协议、爬虫规则等, 是指网站建立一个robots.txt文件来告诉搜索引擎哪些…

安卓 手机硬改 工具下载 一键新机 改串 抹机 root隐藏 改串号MEID imei SN信息 工具教程分享

一键新机、模拟机型、一键备份、还原APP数据、ROOT隐藏、修改数据、保护隐私 一键新机 超过3000机型一键模拟、无束缚轻松做注册、激活、留存 安卓/IOS(进行中) 支持目前最流行的机型&#xff0c;安卓全机型兼容&#xff0c;我们坚持领先一步 操作简单 适合脚本作者 群控…

为了验证某些事,我实现了一个toy微前端框架【万字长文,请君一览】

众所周知微前端是企业中前端发展的必经之路。 我司搭建了自己的微前端脚手架工具&#xff0c;它将项目变成了“多页应用”&#xff0c;跳转方式由 location.href 这类api进行。所以笔者之前在想&#xff1a;这种方式跳转能不能有动画效果呢&#xff1f; 在“上层建筑”中进行“…

【文件同步和备份软件】上海道宁为您带来GoodSync软件,让您轻松备份和同步您的文件

GoodSync发布于2006年 是一种简单可靠的文件同步和 备份解决方案 使用GoodSync可以轻松备份和 同步您的文件 确保您的文件绝对不会丢失 GoodSync企业版是 为商用设计的 数据备份、同步和恢复软件 适用于所有平台、项目或业务环境 保护我们的商业数据 开发商介绍 Siber…