Spring-MVC入门

2023-05-16

文章目录

  • 前言
  • 一、Spring-MVC是什么?
    • MVC:
    • MVC的工作流程:
    • 优势:
  • 二、使用步骤
    • 1.创建Maven项目导入依赖。
    • 2.配置前端控制器
      • DispatcherServlet
    • 3.配置后端控制器
    • 4.核心配置文件的编写
    • 5.访问测试:
  • 三、使用controller接收参数
    • 1.接收基本数据类型和string
    • 2.直接接收实体对象
    • 3.接收一个Model对象
  • 四、页面跳转和重定向
    • 1.转发
    • 重定向
  • 五、静态资源的处理
  • 总结


前言

接着来学习spring-MVC开发。


一、Spring-MVC是什么?

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。是Spring提供的一种MVC开发模式的框架。

MVC:

在这里插入图片描述

MVC的工作流程:

MVC的工作流程: 用户通过视图层 发送请求到 服务器 ,在服务器中 请求被 Controller 接受,Controller 则调用响应的model层来处理请求,处理完之后的结果 返回给Controller,然后 controller 把结果响应给View 视图,渲染数据 最终展示在浏览器

优势:

  • MVC是现下软件开发中的最流行的代码结构形态;
  • 人们根据负责的不同逻辑,将项目中的代码分成 M V C 3个层次;
  • 层次内部职责单一,层次之间耦合度低;
  • 符合低耦合 高内聚的设计理念。也实际有利于项目的长期维护。

二、使用步骤

1.创建Maven项目导入依赖。

导入Spring-MVC的依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.6.RELEASE</version>
</dependency>

2.配置前端控制器

作为一个MVC框架,首先要解决的是:如何能够收到请求!
所以MVC框架大都会设计一款前端控制器,选型在 Servlet 或 Filter两者之一,在框架最前沿率先工作,接收所有请求。
此控制器在接收到请求后,还会负责springMVC的核心的调度管理,所以既是前端又是核心。

DispatcherServlet

DispatcherServlet 前端控制器 ,是框架提供的,作用 统一处理请求和响应,整个流程的控制中心,是由它来调用其他组件处理用户的请求。

我们需要在web.xml文件里添加如下配置

<servlet>
    <servlet-name>mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 局部参数:声明配置文件位置 -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:mvc.xml</param-value>
    </init-param>
    <!-- Servlet启动时刻:可选 -->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

3.配置后端控制器

后端控制器是在前端控制器接收到请求之后,下一步数据流转将要流向的地方。需要我们使用springmvc提供的注解

@Controller //声明这是一个控制器
@RequestMapping("/hello")  //访问路径 ,等价于url-pattern
public class HelloController {
	@RequestMapping("/test1")  //访问路径
	public String hello1(){
		System.out.println("hello world");
		return "index"; // 跳转:/index.jsp  
	}
	@RequestMapping("/test2") //访问路径
	public String hello2(){
		System.out.println("hello c9");
		return "views/users";//  跳转:/views/user.jsp
	}
}

4.核心配置文件的编写

注意: SpringMVC的配置文件和Spring的配置文件不是同一个文件。需要单独创建一个xml文件。可以叫做spring-mvc.xml,内容如下

<beans 	xmlns="http://www.springframework.org/schema/beans"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:mvc="http://www.springframework.org/schema/mvc" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		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.xsd
							http://www.springframework.org/schema/mvc
							http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!-- 告知springmvc  哪些包中 存在 被注解的类 此处springmvc本身就是管理controller层的 -->
	<context:component-scan base-package="com.qf.controller"></context:component-scan>
	<!-- 注册注解开发驱动 让springmvc的注解生效 -->
	<mvc:annotation-driven></mvc:annotation-driven>
	<!-- 视图解析器
	     作用:1.捕获后端控制器的返回值="index"
	          2.解析: 在返回值的前后 拼接 ==> "/index.jsp"
	 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 前缀 -->
		<property name="prefix" value="/"></property>
		<!-- 后缀 -->
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

5.访问测试:

启动项目,直接在地址栏输入如下:
http://localhost:8080/hello/test1
http://localhost:8080/hello/test2


三、使用controller接收参数

在没有使用SpringMVC之前,我们从JSP发过来的请求需要通过request域对象的getParameter方法通过键值对的方式一一取出。非常的麻烦。但是现在我们可以通过在controller的方法参数列表里边。直接写出我们需要接收的参数类型和形参名即可自动匹配。

1.接收基本数据类型和string


@Controller
@RequestMapping("/login")//配置当前controller全局的访问路径
public class LoginController {
    //自动注入业务层
    @Autowired
    private LoginService service;

    @RequestMapping(value = "loginVerify",method = RequestMethod.POST)//配置当前方法的访问路径
    @ResponseBody//当前方法的返回值自动转换为JSON
    public ResultLayUi<User> loginSuccess(String username,String password){
        return service.verifyLogin(username,password);
    }
}

2.直接接收实体对象

 @RequestMapping(value = "updateInfo",method = RequestMethod.POST)
    @ResponseBody
    public ResultLayUi<Employee> updateInfo(Employee employee){
        return service.updateEmployeeInfo(employee);
    }

3.接收一个Model对象

model对象是springMVC自己内置的一个模型对象,能够将request中的数据完全的复制过来

//model中的数据,会在V渲染之前,将数据复制一份给request
@RequestMapping("/test")
public String testData(Model model){
    model.addAttribute("name", "张三");
    return "index";
}

//jsp中用EL表达式 取值即可
${requestScope.name}

四、页面跳转和重定向

1.转发

@RequestMapping("/forw")
class ForwardController{
    @RequestMapping("/test1")
    public String testForward(){
        System.out.println("test forward1");
        // 转发跳转 /views/users.jsp
        // return "views/users";//和下一行等价
        return "forward:/views/users.jsp";
    }
    @RequestMapping("/test2")
    public String testForward2(){
        System.out.println("test forward2");
        //转发到  /forw/test1
        //return "forward:test1";//相对路径(转发到本类中的test1)
        //转发到  /forw/test1
        return "forward:/forw/test1"; //绝对路径
    }
}

重定向

@RequestMapping("/redir")
class RedirectController{
    @RequestMapping("/test1")
    public String testRedirect1(){
        System.out.println("test redirect1");
        //重定向到 /redir/test1
        //return "redirect:test1"; //相对路径(转发到本类中的test1)
        return "redirect:/redir/test1";//绝对路径
    }
    @RequestMapping("/test2")
    public String testRedirect2(){
        System.out.println("test redirect2");
        //重定向到 /views/users.jsp
        return "redirect:/view/user.jsp";
    }
}

五、静态资源的处理

静态文件没有url-pattern,所以默认是访问不到的,之所以可以访问,是因为,tomcat中有一个全局的servlet:org.apache.catalina.servlets.DefaultServlet,它的url-pattern是 “/”,是全局默认的Servlet. 所以每个项目中不能匹配的静态资源的请求,有这个Servlet来处理即可。

但,在SpringMVC中DispatcherServlet也采用了 “/” 作为url-pattern, 则项目中不会再使用全局的Serlvet,则静态资源不能完成访问。

解决办法:
添加如下配置

<mvc:resources mapping=“/html/**” location=“/hhh/”/>

  • mapping是访问路径,location是静态资源存放的路径
  • 将/html/** 中 /**匹配到的内容,拼接到 /hhh/后
    http://…/html/a.html 访问 /hhh/a.html

这里只提供一种,还有别的办法,此处不再一一赘述。

总结

使用SpringMVC在处理请求时有很大的优势。非常好用

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

Spring-MVC入门 的相关文章

随机推荐

  • PreparedStatement与Statement的区别及优势

    PreparedStatement是用来执行SQL查询语句的API之一 xff0c Java提供了 Statement PreparedStatement 和 CallableStatement三种方式来执行查询语句 xff0c 其中 St
  • Mac Idea卡顿、慢解决方案 限制jvm也没有用【超实用】

    前置 Mac使用idea卡顿 不流畅解决方案 xff0c 设置了jvm也没有用 快捷键提示超级慢的问题 导致原因 下载的软件版本问题 去下载标注的版本就变得非常的流畅 xff0c 超级快 版本说明 xff1a 第一个是英特尔芯片的软件 第二
  • HDFS 启动与关闭

    一 HDFS 启动与关闭 HDFS 和普通的硬盘上的文件系统不一样 xff0c 是通过Java 虚拟机运行在整个集群当中的 xff0c 所以当Hadoop 程序写好之后 xff0c 需要启动HDFS 文件系统 xff0c 才能运行 HDFS
  • Android快速入门之通过Fragment实现底部菜单栏

    早期Android应用通常使用TabHost实现页面之间的切换 xff0c 现在更多的选择ViewPager与Fragment结合的方式实现页面切换 Android提供了专门的适配器 FragmentPagerAdapter和Fragmen
  • Zemax操作35--双高斯镜头优化

    要求 xff1a 双高斯镜头是传统的单反相机镜头 相对孔径 xff1a 1 3 焦距 xff1a 75mm 可见光 视场由一个圆定义 xff0c 圆的直径是胶片的对角线 xff0c 像高21 6mm 畸变小于1 玻璃的边界条件最小边缘 中心
  • C/C++编程题之删除字符串中出现次数最少的字符

    在牛客上刷到删除字符串中出现次数最少的字符 xff0c 现在将通过的代码贴一下 xff0c 供大家参考 实现删除字符串中出现次数最少的字符 xff0c 若多个字符出现次数一样 xff0c 则都删除 输出删除这些单词后的字符串 xff0c 字
  • springboot解决servlet-api-2.5.jar和tomcat-embed-core-9.0.46.jar冲突

    2022 11 04 18 07 52 869 ERROR 86604 restartedMain o s b d LoggingFailureAnalysisReporter APPLICATION FAILED TO START Des
  • PS 修改图片大小

    平常的网络世界中 xff0c 会有一些高清晰的图片出现 xff0c 哦不 xff0c 现在的图片越来越超清了 xff1b 那么 xff0c 就需要对它们大小进行修改 xff0c 不然内存伤不起啊 xff01 以下是三种常用的方法 1 修改图
  • 将若依(RuoYI)项目打包(jar)部署到Linux服务器(详细步骤)

    第一步下载maven方便将RuoYi项目打包 1 下载网址 xff1a http maven apache org download cgi 2 3 下载3 6 3版本 解压完成后 将文件夹名称修改为maven 第二步配置maven环境变量
  • 最通俗易懂的乐观锁与悲观锁原理及实现

    一 乐观锁 总是认为不会产生并发问题 xff0c 每次去取数据的时候总认为不会有其他线程对数据进行修改 xff0c 因此不会上锁 xff0c 但是在更新时会判断其他线程在这之前有没有对数据进行修改 xff0c 一般会使用版本号机制或CAS操
  • 3.12生产者消费者模型(pthread_cond_t、sem_t)

    生产者消费者模型 生产者不能在容器满了继续生产 消费者不能在容器为空的时候消费 生产者消费者模型 粗略的版本 include lt stdio h gt include lt pthread h gt include lt stdlib h
  • ActiveMQ中Topic模式队列和Queue模式队列区别

    Topic和Queue是ActiveMQ两种消息模式 Topic用于消息订阅 xff0c 属于一对多 xff1b Queue用于消息处理 xff0c 属于一对一 分别从工作模式 有无状态 传递完整性 处理效率四个方面比较 工作模式 xff1
  • Java SpringBoot 公众号集成模板推送消息

    前言 上篇 付项目地址 xff1a https blog csdn net A yonga article details 129398716 spm 61 1001 2014 3001 5501 集成公众号请看之前的文章 本篇说明 基于已
  • Android中native进程内存泄露的调试技巧(一)

    基于Android5 0版本 Android为Java程序提供了方便的内存泄露信息和工具 xff08 如MAT xff09 xff0c 便于查找 但是 xff0c 对于纯粹C C 43 43 编写的natvie进程 xff0c 却不那么容易
  • onNewIntent 什么时候调用

    protected void onNewIntent Intent intent Since API Level 1 This is called for activities that set launchMode to 34 singl
  • [MySQL] MySQL日志系统

    概述 Mysql的日志系统是Mysql保证无论何时崩溃数据都不会丢失的关键 众所周知Mysql是持久化的数据库 所有的数据都是持久化到硬盘中的 保证数据不会丢失 Mysql保证数据不会丢失是从以下两个方面来体现的 能够恢复到任意时刻的数据状
  • IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能

    文章目录 使用IDEA搭建JavaWeb项目一 IDEA新建JavaWeb项目1 新建java项目2 修改项目配置3 项目部署到Tomcat 二 使用JDBC和Servlet JSP技术实现注册功能1 引入jar包2 搭建项目结构3 后端实
  • JS实现省市区三级联动

    目标 xff1a 用JS实现省市区的三级联动效果 学习内容 xff1a 掌握JS对DOM元素的获取掌握 JS对DOM元素的创建和删除掌握JSON数组的简单解析 实现思路 xff1a 省市区三级联动主要是三个下拉菜单之间的联动效果 xff0c
  • MVC三层架构详解

    文章目录 MVC三层架构详解一 MVC是什么 xff1f 1 什么是低耦合 xff1f 2 低耦合有什么好处 xff1f 3 增加代码复用率4 部署快 xff0c 且生命周期成本低5 可维护性高 二 MVC详解1 MVC经典模式2 MVC设
  • Spring-MVC入门

    文章目录 前言一 Spring MVC是什么 xff1f MVC xff1a MVC的工作流程 xff1a 优势 xff1a 二 使用步骤1 创建Maven项目导入依赖 2 配置前端控制器DispatcherServlet 3 配置后端控制