SpringMVC框架搭建

news2024/11/27 18:35:44

SpringMVC框架搭建

快速开启SpringMVC🚀🚀

步骤

1、新建模块

2、引入相关依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.1</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
</dependency>

3、配置web.xml

<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">
  <!--注册前端控制器DispatcherServlet-->
  <servlet>
    <servlet-name>dispatchServlet</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>dispatchServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

4、创建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"
       xsi:schemaLocation="
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--扫描组件-->
    <context:component-scan base-package="com.louis.controller"></context:component-scan>
    <!--配置视图解析器-->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                     </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>

5、创建templates文件夹

在这里插入图片描述

6、创建页面index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
    <title>首页</title>
</head>
<body>
<h2>首页</h2>
</body>
</html>

7、创建控制器

@Controller
public class TestController {
    @RequestMapping("/")
    public String toFirstPage(){
        return "index";
    }
}

在这里插入图片描述

8、测试

在这里插入图片描述

@RequestMapping注解

注解功能

将请求和处理请求的控制器方法关联起来,建立映射关系。

SpringMVC接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。如果有多个控制器,并且@RequsetMapping请求的路径是一样的情况,会报异常。所以在控制器中需要保证请求路径是唯一的。

使用位置

@RequestMapping注解定义时,它的作用范围如下:

@Target({ElementType.TYPE, ElementType.METHOD})
  • 标识一个类:设置映射请求路径的初始信息。
  • 标识一个方法:设置映射请求路径的具体信息

实例

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
    <title>首页</title>
</head>
<body>
<h2>首页</h2>
<a th:href="@{/test/testRequestMapping}">跳转</a>
</body>
</html>

跳转页面的控制器

@Controller
@RequestMapping("/test")
public class TestRequestMapping {

    @RequestMapping("/testRequestMapping")
    public String testTwoRequestMapping(){
        return "seccess";
    }
}

总结

当一个类中既包含了标识类的RequestMapping又包含了标识方法的RequestMapping,首先会匹配到类标识,然后再到类的方法上。所以需要在访问该页面路径下添加标识类的value值。经常用于不同模块的设置控制器。


@RequestMapping注解的属性

在这里插入图片描述

value属性

通过请求的请求地址来匹配,它是一个字符串数组,可以匹配多个请求多个请求地址,只需要符合其中的一个请求地址就表示匹配成功。必须设置。只设置value属性且只有一个值时,"value ="可以省略。

controller

@Controller
public class TestRequestMapping {
    @RequestMapping(value = {"/test", "/testRequestMapping"})
    public String testTwoRequestMapping(){
        return "seccess";
    }
}

index.html

<a th:href="@{/testRequestMapping}">跳转/testRequestMapping</a>
<a th:href="@{/testRequestMapping}">跳转/test</a>

method属性

通过请求方式来匹配请求,(get/post)匹配请求映射。

controller

@Controller
public class TestRequestMapping {
    @RequestMapping(value = {"/test", "/testRequestMapping"}, method = {RequestMethod.GET})
    public String testTwoRequestMapping(){
        return "seccess";
    }

index.html

<form th:action="@{/test}" method="post">
    <input type="submit" value="测试RequestMapping注解的method属性--->POST">
</form>

method属性是一个RequestMethod类型的数组,表示该请求映射能够匹配多种请求方式的请求,若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器报如下错:

405:Request method 'GET/POST'not supported

在这里插入图片描述

如果想要既满足POST请求方式又满足GET请求方式,可以修改为:

method = {RequestMethod.GET, RequestMethod.POST}

若不设置method,表示不以method请求方式为条件。任何的请求方式都能够匹配。

常用请求方式

常用的请求方式有GETPOSTPUTDELETE但是目前浏览器只支持get和post,若在form表单提交时,为method设置了其他请求方式的字符串(put或delete),则按照默认的请求方式get处理。

index.html

<form th:action="@{/testPut}" method="put">
    <input type="submit" value="测试form表单是否能够发送put或delete请求--->put">
</form>

controller

  @RequestMapping(value = "/testPut", method = {RequestMethod.PUT})
  public String testPut(){
      return "success";
  }

在这里插入图片描述

在选择form的action的时候,只会有两个选项,get/post,如果我们选择了其他的内容,form会按默认的请求方式(POST)来算。

@RequestMapping的派生注解

对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解。

处理get请求的映射:@GetMapping

index.html

<a th:href="@{/testGetMapping}">测试GetMapping注解</a>

controller

@GetMapping("/testGetMapping")
public String testGetMapping(){
    return "success";
}

在这里插入图片描述

在这里插入图片描述

此外,还有处理post请求的映射:@PostMapping、处理put请求的映射:@PutMapping、处理delete请求的映射:@DeleteMapping

param属性

通过请求参数匹配请求,可以设置多个,但是必须同时满足才能映射。(了解)
@RequestMapping的params属性通过请求的请求参数匹配请求映射,它是一个字符串类型的数组,可以通过四种表达方式请求参数和请求映射的匹配关系:

  • “param”:要求请求映射所匹配的请求必须携带param请求参数
  • “!param”:要求请求映射所匹配的亲求必须不携带param的请求参数
  • “param=value”:要求请求映射所匹配的请求必须携带param请求参数且param=value
  • “param!=value”:要求请求映射所匹配的请求必须携带param请求参数但是param!=value

controller

@RequestMapping(value = "/testParamsAndHeaders",
        //表示当前的请求映射匹配的请求必须携带username请求参数
        params = {"username='user'"})
public String testParams(){
    return "success";
}

index.html

<!--方式一:-->
<!--<a th:href="@{/testParamsAndHeaders(username='user'&pwd=1234)}">测试RequestMapping的Params属性</a>-->
<!--方式二:-->
<a th:href="@{/testParamsAndHeaders?username='user'&pwd=1234}">测试RequestMapping的Params属性</a>

在这里插入图片描述

如果不携带参数

<a th:href="@{/testParamsAndHeaders}">测试RequestMapping的Params属性</a>

在这里插入图片描述

hander属性

通过请求头信息匹配请求(了解)。
@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射,它是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系:

  • “header”:要求请求有映射所匹配的请求必须携带header请求头信息
  • “!header”:要求请求映射所匹配的请求必须不携带header请求头信息
  • “header=value”:要求请求映射所匹配的请求必须携带header请求头信息且header=value
  • “header!=value”:要求请求映射所匹配的请求必须携带header请求头信息且header!=value
    若当前@RequestMapping注解的value和method属性满足,但是不满足headers属性,此时页面会显示404错误。

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

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

相关文章

科大讯飞-旋转机械故障诊断挑战赛2023-测试【1】

引言 旋转机械故障诊断挑战赛是一项旨在提高旋转机械故障检测和识别能力的竞赛活动。旋转机械是工业生产中广泛应用的设备&#xff0c;其运行状态直接影响着生产效率和安全性。然而&#xff0c;由于各种原因&#xff0c;旋转机械可能会出现不同类型的故障&#xff0c;如轴承损坏…

玩转Python 秒懂python

解析器&#xff1a; 数据结构&#xff1a; 变量运算&#xff1a; 文件处理&#xff1a; 输入输出&#xff1a; 异常处理&#xff1a; 函数模块&#xff1a; 面向对象&#xff1a; 多线程&#xff1a; 三方库&#xff1a;

菜鸡shader:L13 渐隐渐显的UV动画

文章目录 SD部分Shader代码部分 呃呃&#xff0c;这是目前我学习庄懂AP01课程的最后一节了&#xff0c;我看了一下21集之后的内容是关于LightingMap&#xff0c;目前感觉还用不到&#xff0c;加上之前参与过一个项目里面也有用到LightingMap&#xff0c;也算了解过&#xff0c;…

多模态自监督学习 + 下游任务介绍

自监督学习 意义 经过海量无标签数据的学习后可以习得一个强大的特征提取器&#xff0c;在面对新的任务&#xff0c;尤其是医疗影像等小样本任务时,也能提取到较好的特征。 常见用途 相对位置预测:预测一张图像中随机选择的两个图像块之间的相对位置 图像修复:预测一张图像…

项目管理的最佳选择:最简单的项目管理系统

作为一名项目经理&#xff0c;你是否曾经或正面临过这些麻烦&#xff1a;你一上班就开始了解项目计划的完成情况和工作进展情况。在检查和填补工作空白的同时&#xff0c;你必须面对各种报告和清单。仅仅找到各种材料和文件就需要很多时间。不仅如此&#xff0c;我们还需要出身…

git拉取项目报错:fatal: remote error: Service not enabled

一般是git地址错误&#xff0c;如果是原本就有的项目&#xff0c;看看是不是代码库移动到其他地方了&#xff0c;这个库已经被删除了

辐射定标高精度积分球均匀光源

近一二十年&#xff0c;在环境科学、太阳物理、大气物理、气候学及气象学等研究的推动下&#xff0c;高精度太阳/大气定量光谱遥感技术发展十分迅速。空间定量光谱遥感数据的获取精度很大程度上取决于遥感仪器的定标精度。所谓遥感仪器定标&#xff0c;即指建立仪器输出电信号与…

ADS仿真低噪声放大器学习笔记

ADS仿真低噪声放大器 设计要求&#xff1a; 工作频率&#xff1a;2.4~2.5GHz ISM频段 噪声系数&#xff1a;NF < 0.7 增益&#xff1a;Gain > 15 输入驻波输出驻波&#xff1a;&#xff1c;1.5 这里重点是ADS操作流程 1. 安装晶体管的库文件 1、 下载ATF54143晶体管的…

mybatisPlus基础篇

文章目录 通用Mapper接口简单插入数据-insert简单删除数据-deleteById简单修改数据-updateById简单查询数据-selectById 通用service接口Service接口-插入数据Service接口-删除数据Service接口-修改数据Service接口-查询数据自定义接口方法自定义Mapper接口方法 通用Mapper接口…

milvus: 专为向量查询与检索设计的向量数据库

1. 什么是milvus&#xff1f; milvus docs milvus release Milvus的目标是&#xff1a;store, index, and manage massive embedding vectors generated by deep neural networks and other machine learning (ML) models. Milvus 向量数据库专为向量查询与检索设计&#xf…

vue项目开发环境和生产环境代理的配置问题

1.跨域 跨域解决方案&#xff1a; 1.JSONP 通过动态 script标签跨域 2.document.domain iframe跨域 3.location.hash iframe 4.window.name iframe跨域 5.postMessage 跨 window 通信 6.跨域资源共享&#xff08;CORS&#xff09; 7.nginx代理跨域 8.nodejs中间件代理跨域 9…

基于光子实验的指数级加速的量子同态加密理论

前言 量子计算机不仅有望在某些重要任务上超越经典计算机&#xff0c;而且还能保护计算的隐私。例如&#xff0c;盲量子计算协议支持安全委托量子计算&#xff0c;其中客户端可以保护其数据和算法的隐私&#xff0c;不受分配来运行计算的量子服务器的影响。然而&#xff0c;这…

NOI Linux 2.0 CSP奥赛复赛环境安装使用指南

新人旧人区别 以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。 移除了 GUIDE从 32bit 变为了 64bit 系统&#xff0c;需要注意指针现在占 8 字节而不是 4 字节更新了编译器版本默认情况下右键没了【新建文件】的选项桌面目录改为中文&#xff0c;可能…

【3519AV200】AI算法承载硬件平台_双目IMX334视频通道接入硬件方案开发

Hi3519AV200内置四核A55&#xff0c;提供高效且丰富和灵活的CPU资源&#xff0c;以满足客户计算和控制需求。集成单核MCU&#xff0c;以满足某些低延时要求较高场景。 Hi3519AV200集成了高效的神经网络推理单元&#xff0c;支持2.5Tops INT8 &#xff0c;并支持业界主流的神经网…

【监控系统】可视化工具Grafana简介及容器化部署实战

1.什么是Grafana 官网地址&#xff1a;https://grafana.com/ Grafana用Go语言开发的开源数据可视化工具&#xff0c;可以做数据监控和数据统计&#xff0c;带有告警功能。支持快速灵活的客户端图表&#xff0c;面板插件有许多不同方式的可视化指标和日志&#xff0c;官方库中…

【MySQL】索引与B+树

【MySQL】索引与B树 索引概念前导硬件软件方面 索引的理解单个page多个page引入B树B树的特征为什么B树做索引优于其他数据结构&#xff1f;聚簇索引与非聚簇索引辅助索引 索引的创建主键索引的创建和查看唯一键索引的创建和查看普通索引的创建和查看复合索引全文索引索引的其他…

2.java语法

文章目录 2.1. 字符型常量和字符串常量的区别?2.2. 关于注释&#xff1f;2.3. 标识符和关键字的区别是什么&#xff1f;2.4. Java 中有哪些常见的关键字&#xff1f; 2.5. 自增自减运算符2.6. continue、break、和 return 的区别是什么&#xff1f; 2.1. 字符型常量和字符串常…

Java编译器中的优化技术

一、JIT技术 Java中的热点代码主要有两类&#xff0c;包括&#xff1a;1、被多次调用的方法。 2、被多次执行的循环体。 前者很好理解&#xff0c;一个方法被调用得多了&#xff0c;方法体内代码执行的次数自然就多&#xff0c;它成为 “ 热点代 码 ” 是理所当然的。而后者则…

《零基础入门学习Python》第068讲:GUI的终极选择:Tkinter5

这节课的主要内容为 Listbox 组件、Scrollbar 组件 和 Scale 组件 在之前的学习中&#xff0c;我们已经知道了&#xff0c;如果说提供选项给客户选择&#xff0c;那么有两种情况&#xff0c;单选的话&#xff0c;我们用 Radiobutton&#xff0c;多选的话&#xff0c;用Checkb…

笔记本电源适配器使用时发烫会有安全隐患吗?

笔记本电源适配器&#xff08;充电器&#xff09; 笔记本充电器内部是一个很大的电感结构&#xff0c;因其工作原理会产生一部分热能&#xff0c;所以部分发热是正常的&#xff0c;即使发热也会一直保持一定的温度。同时&#xff0c;充电器外壳都是耐高温的不会烧坏&#xff…