SpringMVC基础篇(一)

news/2024/5/15 12:12:26

文章目录

    • 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/23Time: 20:44User: 孙显圣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.jspreturn "login_ok"; //返回的这个值会交给视图解析器,指定要跳转的页面}
}
3.编写视图解析器要跳转的页面login_ok.jsp
<%--Date: 2024/2/23Time: 20:54User: 孙显圣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/24Time: 12:40User: 孙显圣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/24Time: 12:43User: 孙显圣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/24Time: 12:43User: 孙显圣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/24Time: 15:21User: 孙显圣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.mrgr.cn/p/18018333

相关文章

ZCMU-1111

与背包和动态规划有关(我认为)采用dp数组存放吃掉i千克食物要用掉的钱 dp最开始要尽量的大方便过程中判断和最后的输出判断 实时更新dp,保留最小的钱以前不知道的printf函数可以这样用 fill函数填充数组,(开始,结束,填充值); C和C++结构体里面可以放函数 学习#include<…

JDK源码分析-TreeSet

概述 TreeSet是Java集合框架中用于存储唯一元素的树形数据结构,它实现了NavigableSet接口,这意味着TreeSet中的元素不仅是有序的,还支持一系列的导航方法。 TreeSet的内部实现主要依赖于TreeMap,通过TreeMap的键来维护元素的排序。 类图从以上类图可以看到,TreeSet 实现了…

使用逆滤波算法deconvwnr恢复图像回复图像时,产生了很多横竖条纹。解决办法

使用逆滤波算法deconvwnr恢复图像时&#xff0c;产生了很多横竖条纹。解决办法 原来的代码 % 清除工作空间并关闭所有图形窗口 clear; clc; close all;% 读取原始图像 original_image imread(pic3.jpg);% 显示原始图像 subplot(131); imshow(original_image); title(Origina…

C语言关于多源文件的调用

图片A.c // // Created by clou on 2024/4/29. // #include <stdio.h> #include "A.h"void func() {printf("hello world\n"); }A.h // // Created by clou on 2024/4/29. //#ifndef MULTIPLE_SOURCE_FILES_A_H #define MULTIPLE_SOURCE_FILES_A_Hex…

bugku_ez_java_serializd

下载附件看到依赖CC3.1,没有waf,直接CC5打了。package com.eddiemurphy;import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; i…

CogAgent:开创性的VLM在GUI理解和自动化任务中的突破

尽管LLMs如ChatGPT在撰写电子邮件等任务上能够提供帮助&#xff0c;它们在理解和与GUIs交互方面存在挑战&#xff0c;这限制了它们在提高自动化水平方面的潜力。数字世界中的自主代理是许多现代人梦寐以求的理想助手。这些代理能够根据用户输入的任务描述自动完成如在线预订票务…

有趣的大模型之我见 | Llama AI Model

Llama 开源吗? 我在写《有趣的大模型之我见 | Mistral 7B 和 Mixtral 8x7B》时曾犹豫,在开源这个事儿上,到底哪个大模型算鼻祖?2023 年 7 月 18 日,Meta 推出了最受欢迎的大型语言模型(LLM)的第二个版本-Llama 2,并主张可免费用于研究和商业用途。Llama 2 模型附带许可…

C语言关于头文件的使用

截图:main.c // // Created by clou on 2024/4/29. //#include <stdio.h> #include "main.h" //包含自己实现的头文件//定义全局变量 int cnt; int sum;//定义函数 int func(int x, char y) {return 0; }//定义函数 int func2(int x, int y) {return x + y; }…

Mysql锁机制与优化实践以及MVCC底层原理剖析

学习来源-图灵课堂 https://vip.tulingxueyuan.cn 锁学习参考: https://juejin.cn/post/7307889500545253395 锁机制 为了保证数据的一致性,当访问共享变量的时候我们可以针对共享数据加锁,但是加锁要时要注意加锁的成本,还有加锁的粒度,还有就是是否会发生死锁,还有就是…

[2022DASCTF Apr X FATE 防疫挑战赛] warmup-java

没错,还是java。 我就跟java杠上了。 分析 先看依赖:没有啥特别的。 审一下源码: IndexController.java:warmup路由下传参data,下面把十六进制转为字节直接反序列化了。 看下动态代理MyInvocationHandler.java:看一下Utils的hexStringToBytes方法: 下面分析来自Java专题…

设计模式01 -----单例模式

单例模式是一种常见的设计模式,用于确保类只有一个实例,并提供一个全局访问点。这种模式通常用于管理共享资源,例如数据库连接、日志文件等。单例模式的主要特点包括: 单一实例: 该模式确保类只有一个实例存在,无论何时何地都可以访问到这个实例。 全局访问点: 单例模式提…

linux网络DNS域名解析服务

DNS概述 1.DNS系统 DNS(Domain Name System),使用应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 简单来说就是:把域名转换成网络可以识别的IP地址,在通过IP地址访问主机。这种由文字组成的名称,显而易…

智慧之眼:碎石厂工业园区可视化引领未来

碎石厂工业园区可视化,就是将园区的各项数据、运行状态以及管理信息通过图形化、数字化的方式呈现出来。这种创新的技术手段,不仅让园区的日常运营更加高效,也极大地提升了管理决策的准确性和时效性。在时代的浪潮中,工业发展日新月异,碎石厂工业园区作为建材行业的重要一…

【函数式接口使用✈️✈️】配合策略模式实现文件处理的案例

目录 &#x1f378;前言 &#x1f37b;一、功能描述 &#x1f37a;二、面向对象设计模式 &#x1f379;三、策略模式 &#x1f366;四、策略 VS 面向对象 &#x1f368;章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上周初步了解了下函数式接口&#xff0c;Consume…

生态环境监测系统:守护绿色地球,共筑美好家园

生态环境是人类赖以生存的基础,随着工业化和城市化的快速发展,生态环境问题日益凸显,如何有效监测和保护生态环境成为全球关注的焦点。生态环境监测系统的建立,旨在通过高科技手段,全面掌握生态环境质量,评估生态保护成效,为制定科学的环境保护政策提供依据。 项目背景 …

IDEA更换新版本启动没反应

目前安装了新的IDEA(压缩包方式)&#xff0c;由于老版本的IDEA还在用&#xff0c;所以并没有删除&#xff0c;但是安装完后发现点击idea64.exe后没有反应&#xff0c;于是网上找了好多方法最后解决了 下面是我的解决过程 新版本&#xff1a;IntelliJIdea2024.1 老版本: Intelli…

Markdown文件上传到博客图片处理

Markdown文件上传到博客图片处理 使用Dotnet-cnblog工具可以配合typora实现自动上传md文件里图片到博客园的图床,这样就不用自己一张张来上传 Dotnet-cnblog安装使用 1.配置NET环境 net环境下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/5.0 下载后安装NET环…

忘记不再是问题:MySQL关键知识点速查

文章目录 MySQL备忘录内容连接MYSQL创建和展示数据库创建表修改表查询聚合与分组插入数据更新数据删除数据类型强制转换 更多内容 MySQL备忘录 做项目时&#xff0c;可能需要快速获取MySQL的使用方法&#xff0c;比如语法规则和函数用法。这正是备忘单的用途。 这里总结了一份…

ZCMU-1129

数学公式题罢了 学长1.斯特灵公式: 2.对数公式(因为以10为底,得到的是10^x,所以最后向下取整加上1);#include<cstdio> #include<cmath> using namespace std; const double PI=acos(-1); const double e=exp(double(1)); int str(int n){return floor(log10(s…