SpringMVC基础篇(一)

news2024/11/16 1:38:29

文章目录

    • 1.基本介绍
        • 1.特点
        • 2.SpringMVC跟SpringBoot的关系
    • 2.快速入门
        • 1.需求分析
        • 2.图解
        • 3.环境搭建
          • 1.创建普通java工程
          • 2.添加web框架支持
          • 3.配置lib文件夹
            • 1.导入jar包
            • 2.Add as Library
            • 3.以后自动添加
          • 4.配置tomcat
            • 1.配置上下文路径
            • 2.配置热加载
          • 5.src下创建Spring配置文件applicationContext-mvc.xml
          • 6.配置中央控制器web.xml读取Spring配置文件
        • 4.具体实现
          • 文件目录
          • 1.编写首页面login.jsp
          • 2.编写控制器UserServlet.java
          • 3.编写视图解析器要跳转的页面login_ok.jsp
          • 4.配置视图解析器和容器扫描applicationContext-mvc.xml
          • 5.配置login.jsp的action
        • 5.结果展示
          • 1.login.jsp
          • 2.点击登录
        • 6.注意事项和细节说明
          • 1.控制器UserServlet指定url的时候可以省略value
          • 2.关于web.xml文件中配置读取Spring的配置文件
    • 3.SpringMVC执行流程
    • 4.RequestMapping注解使用方式(不要背!)
        • 1.@RequestMapping可修饰方法和类
          • 文件目录
          • 1.编写控制器UserHandler.java
          • 2.编写success.jsp
          • 3.编写request.jsp
          • 4.结果展示
            • 1.首页
            • 2.点击提交
          • 5.注意事项
            • 1.如果指定了post请求,使用其他请求方式则会报错
            • 2.如果没有指定请求方式则get或post都可以
        • 2.@RequestMapping可指定params支持简单表达式
          • 文件目录
          • 1.基本介绍
          • 2.请求必须包含某个参数
            • 1.UserHandler.java添加方法
            • 2.编写request.jsp
            • 3.结果展示
          • 3.请求必须包含参数并且指定参数值
            • 1.修改UserHandler.java
            • 2.结果展示
          • 4.需要有参数并且值不等于什么
            • 1.修改UserHandler.java
            • 2.结果展示
        • 3.@RequestMapping支持Ant风格资源地址
          • 1.基本介绍
          • 2.匹配多层路径
            • 1.修改UserHandler.java
            • 2.结果展示
        • 4.@RequestMapping可配合@PathVariable映射URL绑定的占位符
          • 1.基本介绍
          • 2.通过路径变量获取参数
            • 1.修改UserHandler.java
            • 2.结果展示
        • 5.@RequestMapping注意事项和细节
          • 1.映射的URL不能重复
            • 1.修改UserHandler.java
            • 2.结果展示
          • 2.请求方式简写
            • 1.基本介绍
            • image-20240224145148794
            • 2.修改UserHandler.java
            • 3.结果展示
          • 3.提交数据简写
            • 1.基本介绍
            • 2.修改UserHandler.java
            • 3.结果展示
    • 5.课后练习
        • 1.题目
        • 2.第一题
        • 3.第三题
          • 1.修改UserHandler.java
          • 2.homework01.jsp
          • 3.结果展示

1.基本介绍

1.特点

image-20240223192448774

2.SpringMVC跟SpringBoot的关系

image-20240223192736386

2.快速入门

1.需求分析

image-20240223192930065

2.图解

image-20240223193451223

3.环境搭建
1.创建普通java工程

image-20240223194100727

2.添加web框架支持

image-20240223194147591

3.配置lib文件夹
1.导入jar包

image-20240223194449878

2.Add as Library

image-20240223195934690

3.以后自动添加

image-20240223200030178

4.配置tomcat
1.配置上下文路径

image-20240224103832982

2.配置热加载

image-20240224103924512

5.src下创建Spring配置文件applicationContext-mvc.xml

image-20240223200341022

image-20240223200417284

6.配置中央控制器web.xml读取Spring配置文件
  • 服务器启动则自动装载这个servlet,实例化servlet,调用init方法,读取spring配置文件
<?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就调用init方法读取spring的配置文件,并且接收所有请求-->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--init方法可以通过ServletConfig来读取这个初始化参数-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--读取spring配置文件-->
            <param-value>classpath:applicationContext-mvc.xml</param-value>
        </init-param>
        <!--服务器启动就装载这个servlet,直接创建servlet实例,调用init方法-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <!--所有的请求都交给这servlet处理-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
4.具体实现
文件目录

image-20240224105354224

1.编写首页面login.jsp
<%--
  Date: 2024/2/23
  Time: 20:44
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="">
    username:<input name="username" type="text">
    password:<input name="password" type="password">
    <input type="submit" value="登录">
</form>
</body>
</html>

2.编写控制器UserServlet.java
package com.sun.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示这是一个控制器
@Controller
public class UserServlet {
    //这个方法的网址是上下文路径 + login
    @RequestMapping(value = "/login")
    public String login() {
        System.out.println("login ok...");
        //视图解析器配置的前缀是/WEB-INF/pages/ 后缀是.jsp所以这个资源的路径就是/WEB-INF/pages/login_ok.jsp
        return "login_ok"; //返回的这个值会交给视图解析器,指定要跳转的页面
    }
}

3.编写视图解析器要跳转的页面login_ok.jsp
<%--
  Date: 2024/2/23
  Time: 20:54
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>ok!</h1>
</body>
</html>

4.配置视图解析器和容器扫描applicationContext-mvc.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--容器扫描-->
    <context:component-scan base-package="com.sun.web"/>

    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--配置前缀和后缀-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
5.配置login.jsp的action

image-20240224104147538

5.结果展示
1.login.jsp

image-20240224105434692

2.点击登录

image-20240224105458408

image-20240224105448068

6.注意事项和细节说明
1.控制器UserServlet指定url的时候可以省略value

image-20240224110906407

2.关于web.xml文件中配置读取Spring的配置文件

image-20240224111017861

image-20240224111135354

image-20240224111147986

3.SpringMVC执行流程

image-20240224121542328

4.RequestMapping注解使用方式(不要背!)

1.@RequestMapping可修饰方法和类
文件目录

image-20240224130136558

1.编写控制器UserHandler.java
package com.sun.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Controller
@RequestMapping(value = "/user")
public class UserHandler {
    /**
     * 1.requestMethod支持四个常用选项,get,post,delete,put
     * 2.如果不写method参数则默认支持get和post
     * 3.目前这个buy方法的访问路径是上下文路径 + user/buy
     */
    @RequestMapping(value = "/buy", method = RequestMethod.POST)
    public String buy() {
        System.out.println("buy方法被调用");
        return "success";
    }

}

2.编写success.jsp
<%--
  Date: 2024/2/24
  Time: 12:40
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>success</h1>
</body>
</html>

3.编写request.jsp
<%--
  Date: 2024/2/24
  Time: 12:43
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="user/buy" method="post">
    <input type="submit" value="提交">
</form>
</body>
</html>

4.结果展示
1.首页

image-20240224133830110

2.点击提交

image-20240224133855776

image-20240224133848615

5.注意事项
1.如果指定了post请求,使用其他请求方式则会报错

image-20240224134246207

image-20240224134310894

2.如果没有指定请求方式则get或post都可以
2.@RequestMapping可指定params支持简单表达式
文件目录

image-20240224140401963

1.基本介绍

image-20240224135027610

2.请求必须包含某个参数
1.UserHandler.java添加方法
    /**
     * 会将参数bookid自动填充到方法中
     * @param bookid
     * @return
     */
    @RequestMapping(value = "/find", method = RequestMethod.POST, params = "bookid")
    public String search(String bookid) {
        System.out.println("bookid=" + bookid);
        return "success";
    }
2.编写request.jsp
<%--
  Date: 2024/2/24
  Time: 12:43
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="user/find" method="post">
    输入bookid:<input name="bookid" type="text">
    <input type="submit" value="提交">
</form>

</body>
</html>

3.结果展示

image-20240224140620866

image-20240224140632295

image-20240224140638300

3.请求必须包含参数并且指定参数值
1.修改UserHandler.java

image-20240224141101245

2.结果展示

image-20240224141201463

4.需要有参数并且值不等于什么
1.修改UserHandler.java

image-20240224141327544

2.结果展示

image-20240224141544349

3.@RequestMapping支持Ant风格资源地址
1.基本介绍

image-20240224141721097

2.匹配多层路径
1.修改UserHandler.java
    /**
     * 要求可以匹配 /user/message/aa, /user/message/aa/bb/cc
     * @return
     */
    @RequestMapping(value = "/message/aa/**")
    public String im() {
        System.out.println("匹配成功");
        return "success";
    }
2.结果展示

image-20240224142418810

image-20240224142439596

4.@RequestMapping可配合@PathVariable映射URL绑定的占位符
1.基本介绍

image-20240224142811521

2.通过路径变量获取参数
1.修改UserHandler.java
    /**
     * 可以编写路径变量,直接在路径中接受变量,结合@PathVariable来进行参数传递
     *
     * @return
     */
    @RequestMapping(value = "/reg/{username}/{password}")
    public String register(@PathVariable("username") String name, @PathVariable("password") String password) {
        System.out.println("username = " + name + " password = " + password);
        return "success"; //请求转发
    }
2.结果展示

image-20240224143702209

image-20240224143711263

5.@RequestMapping注意事项和细节
1.映射的URL不能重复
1.修改UserHandler.java
    /**
     * 两个重复的url
     */
    @RequestMapping("/l1")
    public String h1() {
        return "success";
    }
    @RequestMapping("/l1")
    public String h2() {
        return "success";
    }
2.结果展示

image-20240224145020830

2.请求方式简写
1.基本介绍
image-20240224145148794
2.修改UserHandler.java
    /**
     * 这样表示的就是get类型的请求,请求地址为“/buy1”
     */
    @GetMapping("/buy1")
    public String buy_() {
        return "success";
    }

3.结果展示

image-20240224145559819

3.提交数据简写
1.基本介绍

image-20240224145849259

2.修改UserHandler.java
    //提交的信息如果包含这个参数则会自动填充,否则会传入一个空值
    @GetMapping("/hello")
    public String hello(String email) {
        System.out.println(email);
        return "success";
    }
3.结果展示

image-20240224150305065

image-20240224150311409

image-20240224150325939

image-20240224150331787

5.课后练习

1.题目

image-20240224151703113

2.第一题

image-20240224151653390

3.第三题
1.修改UserHandler.java
    //课后练习
    @PostMapping("/computer")
    public String computer(String brand, String price, String num) {
        System.out.println("brand=" + brand + " price=" + price + " num=" + num);
        return "success";
    }
2.homework01.jsp
<%--
  Date: 2024/2/24
  Time: 15:21
  User: 孙显圣
  Version:1.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="user/computer" method="post">
    品牌:<input name="brand" type="text"><br>
    价格:<input name="price" type="text"><br>
    数量:<input name="num" type="text"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

3.结果展示

image-20240224153140501

image-20240224153147054

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

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

相关文章

BUUCTF-MISC-09文件中的秘密1

9.文件中的秘密1 题目&#xff1a;flag包含在图片的属性中

三款数据可视化工具深度解析:Tableau、ECharts与山海鲸可视化

在数字化时代&#xff0c;数据可视化工具成为了企业和个人进行数据分析和决策的重要助手。市面上众多数据可视化工具各具特色&#xff0c;本文将为您介绍三款热门的数据可视化工具&#xff0c;帮助您更好地理解和利用数据。 首先&#xff0c;让我们来认识Tableau。Tableau是一款…

基于python+django+mysql农业生产可视化系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

网络安全攻击溯源的重要性及挑战

网络安全攻击溯源是一个复杂且至关重要的过程&#xff0c;它涉及对网络攻击事件的来源进行追踪和分析&#xff0c;以便确定攻击者的身份、动机和攻击路径。在IP技术背景下&#xff0c;网络安全攻击溯源更是显得尤为重要&#xff0c;因为IP地址作为网络设备的唯一标识&#xff0…

STM32玩转物联网实战篇:5.ESP8266 WIFI模块MQTT通信示例详解

1、准备开发板 开发板功能区分布图 开发板俯视图 2、实验讲解 在之前的章节中&#xff0c;已经讲解过了MQTT的通讯原理和组包过程&#xff0c;现在开始手把手的教大家用代码来实现连接MQTT平台以及数据的交互&#xff0c;实际上这篇文章已经拖更接近两年了&#xff0c;非常…

python学习:pyqt5

1、安装所需库 pip install pyqt5 pip install pyqt5 -tools 2、导入所需库 # 导入所需库 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget from PyQt5.QtCore import QThread, pyqtSignal 3、多线程举例 # 定义一个继承…

coreldraw2024精简版绿色版安装包免费下载

CorelDRAW 2024是一款矢量图形设计软件&#xff0c;于2024年3月5日正式在全球范围内发布。这款软件在多个方面进行了更新和改进&#xff0c;为用户提供了更多高效、灵活和便捷的设计工具。 首先&#xff0c;CorelDRAW 2024新增了绘画笔刷功能&#xff0c;这些笔刷不仅模拟了传…

Python爬虫入门指南--爬虫技术的由来、发展与未来--实战课程大赠送

爬虫&#xff0c;也称为网络爬虫或网络蜘蛛&#xff0c;是一种自动化程序&#xff0c;专门用于遍历互联网并收集数据。这种技术的起源、发展和未来都与互联网紧密相连&#xff0c;并在信息检索、数据挖掘等多个领域发挥着不可或缺的作用。 "免费IP池大放送&#xff01;助…

dial tcp 192.168.0.190:443: connect: connection refused

1、场景 用nerdctl登录镜像仓库192.168.0.190&#xff08;Harbor&#xff09;&#xff0c;报错 ERRO[0006] failed to call tryLoginWithRegHost error"failed to call rh.Client.Do: Get \"https://192.168.0.190/v2/\": dial tcp 192.168.0.190:…

JavaScript系列------2

1. JS 数据类型&#xff1a; 基本数据类型&#xff1a;number数字型,string字符串型,boolean布尔型,undefined未定义型,null空类型 引用数据类型&#xff1a;object对象 js 是弱数据类型的语言&#xff0c;只有当我们赋值了才知道是什么数据类型。 声明一个变量未赋值就是 un…

【FFmpeg】音视频录制 ② ( 使用 Screen Capturer Recorder 软件生成 ffmpeg 可录制的音视频设备 )

文章目录 一、使用 Screen Capturer Recorder 软件生成音视频设备1、设备查找问题 - 引入 Screen Capturer Recorder 软件2、下载安装 Screen Capturer Recorder 软件3、验证 Screen Capturer Recorder 生成的设备 一、使用 Screen Capturer Recorder 软件生成音视频设备 1、设…

对浅拷贝的理解

问题背景 我之前一直以为浅拷贝出来的新对象和旧对象的引用地址是相同的&#xff0c;但是通过Object和发现浅拷贝的新对象和旧对象的引用地址不同&#xff01;&#xff01; const obj1 { name: "Alice", test: { age: 12 } };const obj4 Object.assign({}, obj1);…

Kafka源码分析(四) - Server端-请求处理框架

系列文章目录 Kafka源码分析-目录 一. 总体结构 先给一张概览图&#xff1a; 服务端请求处理过程涉及到两个模块&#xff1a;kafka.network和kafka.server。 1.1 kafka.network 该包是kafka底层模块&#xff0c;提供了服务端NIO通信能力基础。 有4个核心类&#xff1a;…

spring的bean创建流程源码解析

文章目录 IOC 和 DIBeanFactoryApplicationContext实现的接口1、BeanFactory接口2、MessageSource 国际化接口3、ResourcePatternResolver&#xff0c;资源解析接口4、EnvironmentCapable接口&#xff0c;用于获取环境变量&#xff0c;配置信息5、ApplicationEventPublisher 事…

GAN详解,公式推导解读,详细到每一步的理论推导

在看这一篇文章之前&#xff0c;希望熟悉掌握熵的知识&#xff0c;可看我写的跟熵相关的一篇博客https://blog.csdn.net/m0_59156726/article/details/138128622 1. GAN 原始论文&#xff1a;https://arxiv.org/pdf/1406.2661.pdf 放一张GAN的结构&#xff0c;如下&#xff1…

索引超详细解析

目录 索引概述 无索引时&#xff1a; 索引&#xff1a; 索引结构 介绍&#xff1a; 二叉树&#xff1a; B-Tree(多路平衡查找树)&#xff1a; 经典BTree MySQL中B树 Hash索引 hash索引的特点&#xff1a; 存储引擎支持&#xff1a; 为什么InnoDB存储选择使用BTree…

升级 jQuery:努力打造健康的 Web 生态

jQuery 对 Web 的影响始终是显而易见的。当 jQuery 在 2006 年首次推出时&#xff0c;几乎立即成为 Web 开发人员的基本工具。它简化了 JavaScript 编程&#xff0c;使操作 HTML 文档、处理事件、执行动画等变得更加容易。从那时起&#xff0c;它在 Web 标准和浏览器功能的演变…

深度学习基础:循环神经网络中的Dropout

深度学习基础&#xff1a;循环神经网络中的Dropout 在深度学习中&#xff0c;过拟合是一个常见的问题&#xff0c;特别是在循环神经网络&#xff08;RNN&#xff09;等复杂模型中。为了应对过拟合问题&#xff0c;研究者们提出了许多方法&#xff0c;其中一种被广泛应用的方法…

CSS渐变色理论与分类、文字渐变色方案、炸裂渐变色方案以及主流专业渐变色工具网站推荐

渐变色彩可以增加视觉层次感和动态效果&#xff0c;使网页界面更加生动有趣&#xff0c;吸引用户注意力。另外&#xff0c;相较于静态背景图片&#xff0c;CSS渐变无需额外的HTTP请求&#xff0c;减轻服务器负载&#xff0c;加快页面加载速度&#xff1b;同时CSS渐变能够根据容…

应用软件运维服务方案(word原件)

信息化项目运维服务方案&#xff08;投标&#xff0c;实施运维&#xff0c;交付&#xff09; 1.项目整体介绍 2.服务简述 3.资源提供 软件全过程性&#xff0c;标准型&#xff0c;规范性文档&#xff08;全套资料包&#xff09;获取&#xff1a;本文末个人名片直接获取&…