SpirngMVC框架学习笔记(一):SpringMVC基本介绍

1 SpringMVC 特点&概述

  • SpringMVC 从易用性,效率上 比曾经流行的 Struts2 更好 
  • SpringMVC WEB 层框架,接管了 Web 层组件, 比如控制器, , 视图解析, 返回给用户的数据格式, 同时支持 MVC 的开发模式/开发架构
  • SpringMVC 通过注解,让 POJO 成为控制器,不需要继承类或者实现接口
  • SpringMVC 采用低耦合的组件设计方式,具有更好扩展和灵活性.
  • 支持 REST 格式的 URL 请求.
  • SpringMVC 是基于 Spring , 也就是 SpringMVC 是在 Spring 基础上的。SpringMVC 的核心包 spring-webmvc-xx.jar spring-web-xx.jar

2 Spring、SpringMVC和SpringBoot 的关系

  • Spring MVC 只是 Spring 处理 WEB 层请求的一个模块/组件, Spring MVC 的基石是Servlet[Java WEB]
  • Spring Boot 是为了简化开发者的使用, 推出的封神框架(约定优于配置,简化了 Spring 的配置流程), SpringBoot 包含很多组件/框架,Spring就是最核心的内容之一,也包含 SpringMVC
  • 他们的关系大概是: Spring Boot > Spring > Spring MVC

SpringMVC-快速入门(构建项目)

(1)新建一个java项目

 (2)添加web框架

 点击确定后,可以看到项目目录下自动生成了一个web目录

 

(3)在WEB-INF目录下新建一个lib目录,存放jar包

 

(4)将需要使用的jar包复到lib目录下(所需jar包可在文章顶部获取)

 全选复制

粘贴到lib目录

(5)将所有jar包添加为库

 

(6)在src目录下创建spring容器文件

 

 (7)配置 web/WEB-INF/web.xml 文件

<?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"><!--配置前端控制器/中央控制器/分发控制器--><!--1.用户的请求都会经过它的处理--><servlet><!--servlet-name可以自己定义--><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--配置属性contextConfigLocation,指定 DispatcherServlet 去操作的spring配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-mvc.xml</param-value></init-param><!--在web项目启动时,就自动加载DispatcherServlet--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><!--需要和上面的servlet-name保持一致--><servlet-name>springDispatcherServlet</servlet-name><!--1.这里配置的 url-pattern 是 / ,表示用户的请求都经过DispatcherServlet2.这样配置也支持 rest 风格的 url 请求--><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

(8)在web目录下创建 login.jsp 作为登录页面

<%--Created by IntelliJ IDEA.User: xxxDate: 2024-05-25Time: 20:50To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录</title>
</head>
<body>
<h3>登录页面</h3>
<%--
action="login" 表示的url 是 http://localhost:8080/springmvc/login
--%>
<form action="login">u:<input name="username" type="text">p:<input name="password" type="password"><input type="submit" value="登录">
</form>
</body>
</html>

(9)在src目录下创建包com.web,在该包下创建 UserServlet.java 作为控制器

package com.web;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** 如果使用了SpringMVC框架,在一个类上标识@Controller* 表示将该类视为一个控制器,注入到容器中*/
@Controller
public class UserServlet {//编写方法,响应用户的请求/*** 1.login方法是用于响应用户的登录请求* 2.@RequestMapping(value = "/login") 表示给控制器的这个方法配了一个url映射* 当用户在浏览器输入 http://localhost:8080/web工程路径/login 就能访问到login()* 3.return "login_ok"; 表示返回结果给视图解析器(InternalResourceViewResolver)* ,视图解析器会根据配置,来决定跳转哪个页面*/@RequestMapping(value = "/login")public String login(){System.out.println("login ok....");return "login_ok";}
}

(10)在前面已经创建好spring容器文件中进行配置

<?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.web"/><!--下面配置springMVC的视图解析器,比如我们的controller return 的是 login_ok那么要跳转的页面页面就是 /WEB-INF/pages/login_ok--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--配置属性suffix(后缀) 和 prefix(前缀)--><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean>
</beans>

(11)在web/WEB-INF目录下新建目录 pages,在pages目录新建一个jsp文件,login_ok.jsp

<%--Created by IntelliJ IDEA.User: 王伟俊Date: 2024-05-25Time: 21:11To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>登录成功</title>
</head>
<body>
<h1>恭喜 登录成功</h1>
</body>
</html>

(12)配置 tomcat 服务器

 

 

tomcat配置成功!

 (13)启动服务器

在浏览器输入网址http://localhost:8080/springmvc/login.jsp 

点击登录,显示如下页面,跳转成功!

4 细节说明

  •  重点学习如何搭建一个 springmvc 项目,初步理解 springmvc 工作流程
  • 这里的 UserServlet 需要注解成@Controller ,我们称为一个 Handler 处理器
  • UserServlet 指定 url 时,value可以省略
@RequestMapping("/login")
  • 关 于 SpringMVC DispatcherServlet 的 配 置 文 件 , 如 果 不 在 web.xml 指 定 applicationContext-mvc.xml, 默认在 /WEB-INF/springDispatcherServlet-servlet.xml 找这 个配置文件

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

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

相关文章

MATLAB:插值函数之interp与griddata

MATLAB 提供了多种插值函数来处理不同维度的数据。其中&#xff0c;interp1、interp2 和 griddata 是常用的插值函数&#xff0c;分别用于一维、二维和多维&#xff08;不规则&#xff09;数据的插值。 之前有对interp1进行过详细介绍&#xff0c;如需详细了解&#xff0c;请查…

会声会影调速怎么用 会声会影如何调整音频速度

会声会影是一款功能强大的视频编辑软件&#xff0c;可以帮助我们轻松的实现剪辑。 会声会影的操作简单易懂&#xff0c;界面简洁明快。适合家庭使用&#xff0c; 我们使用会声会影可以在家就能将视频剪辑成好莱坞大片。但是在使用的过程中&#xff0c;仍然会遇到一些操作上的问…

2024年上半年软件系统架构师论文【回忆版】

文章目录 考试时间考试地点案例分析1、微服务架构的优点和缺点2、质量属性的6个元素3、分布式锁 Redis的缺点4、MongoDB 存储矢量图的优势 论文回忆版论文一、论单元测试的设计与应用论文二、论大数据模型的设计与应用论文三、论模型驱动的架构设计及应用论文四、论云原生运维的…

探索LangGraph:如何创建一个既智能又可控的航空客服AI

这种设计既保持了用户控制权&#xff0c;又确保了对话流程的顺畅。但随着工具数量的增加&#xff0c;单一的图结构可能会变得过于复杂。我们将在下一节中解决这个问题。 第三部分的图将类似于下面的示意图&#xff1a; 状态定义 首先&#xff0c;定义图的状态。我们的状态和L…

C++:List的使用和模拟实现

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers …

网络空间安全数学基础·整除与同余

主要内容&#xff1a; 整除的基本概念&#xff08;掌握&#xff09; 素数&#xff08;掌握&#xff09; 同余的概念&#xff08;掌握&#xff09; 1.1整除 定义&#xff1a;设a&#xff0c;b是任意两个整数&#xff0c;其中b≠0&#xff0c;如果存在一个整数q&#xff0c;使 …

12306技术内幕

公司内部做的一次技术分享 文章目录 12306的成就12306系统特点12306系统难点解决思路产品角度技术角度余票库存的表如何设计&#xff1f; 抢票软件推荐巨人的肩膀 对于未公开的技术部分&#xff0c;只能结合已公开的信息&#xff0c;去做大胆的猜想。 本文提到的一些解决方案&…

测试基础05:软件测试的分类

课程大纲 1、两种架构&#xff08;Architecture&#xff09; 1.1、B/S&#xff08;Browser/Server&#xff09; 浏览器服务器架构&#xff08;大体3步&#xff09;&#xff1a;用户通过浏览器向服务器发出请求&#xff0c;服务器处理请求&#xff0c;将结果通过网络返回到用户…

使用Webcam实现摄像头的开启和关闭,并保存和复制图片

实现思路 0&#xff0c;将webcam的jar文件传入项目中 1&#xff0c;显示摄像头的地方&#xff1a;创建一个画板&#xff0c;在画板上添加开启和关闭按钮 2&#xff0c;设置开启和关闭功能&#xff1a;创建一个类实现动作监听器&#xff0c;进而实现监听动作按钮 3&#xff…

【数据结构与算法篇】二叉树链式结构及实现

【数据结构与算法篇】二叉树链式结构及实现 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 4. 二叉树链式结构的实现 4.1 前置说明 4.2 二叉树的遍历 4.2.1 前序、中序以及…

OceanBase的存储架构与传统LSM-Tree架构的异同|OceanBase数据转储合并技术解读(二)

前篇博文将OceanBase的存储架构巧妙地与自然界中的“水生态”进行了类比&#xff0c;今日我们转变视角&#xff0c;聚焦在与拥有相同LSM-Tree架构的其他产品的比较&#xff0c;深入探讨OceanBase相较于它们所展现出的独特性能。 众所周知&#xff0c;OceanBase数据库的存储引擎…

element-ui 前端ui框架用法开发指南(2024-05-22)

Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库 1、npm安装 // npm安装&#xff1a;npm install element-ui --save 能更好地和 webpack 打包工具配合使用 2、cdn在线引入 访问最新版本的资源地址 - element-uiThe CDN for element-u…

RedHat9 | DNS剖析-配置主DNS服务器实例

一、实验环境 1、BIND软件包介绍 BIND软件是一款开放源码的DNS服务器软件&#xff0c;由美国加州大学Berkeley分校开发和维护&#xff0c;全称为Berkeley Internet Name Domain。该软件在DNS&#xff08;域名系统&#xff09;领域具有重要地位&#xff0c;是目前世界上使用最…

使用OpenCV dnn c++加载YOLOv8生成的onnx文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

Python怎样定位并删除Sql语句中不确定的查询条件

1.问题场景描述: 在sql语句中经常会有查询条件是:查找多个订单签订日期范围的数据,但具体的日期范围是不确定,我们如何来查找定位 例如:查询条件语句的部分如下图: 目标是: 1)定位字符串:t_contract_order.sign_date 2)最终得到结果: 解决问题思路: 1)定位要找的字符串起始位置…

【学习心得】PyTorch的知识要点复习(持续更新)

PyTorch知识要点复习&#xff0c;目的是为了巩固PyTorch基础、快速回顾、深化理解PyTorch框架。这篇文章会持续更新。 一、本文的一些说明 知识点梳理&#xff1a;我将PyTorch的核心概念和高级技巧进行了系统化的整理&#xff0c;从基础的张量操作到复杂的模型构建与训练。这样…

【Linux】进程终止与进程等待

目录 进程终止 errno exit和_exit 进程等待 wait和waitpid 宏&#xff1a;WIFEXITED 非阻塞等待 进程终止 下面要谈的一个话题就是进程终止&#xff0c;就是说一个进程退出了&#xff0c;可能有三种情况 1.进程代码执行完&#xff0c;结果是正确的 2.进程代码执行完&…

【活动】开源与闭源大模型:探索未来趋势的双轨道路

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 开源与闭源大模型&#xff1a;探索未来趋势的双轨道路引言一、开源大模型&#…

翻译《The Old New Thing》- The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag

The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071128-00/?p24353 Raymond Chen 2007年11月28日 FORMAT_MESSAGE_IGNORE_INSERTS 标志的重要性 简要 文章讨论了使用FormatMes…

评估企业的业务是否存在高风险的六个步骤

风险的幽灵使得组织别无选择&#xff0c;只能改善各种网络风险的总体管理。以下是一个基于信息安全论坛的IRAM2方法论的分步过程&#xff0c;网络安全和风险从业者可以利用它来评估和管理信息风险。 第1步&#xff1a;范围界定练习 范围界定练习的目标是提供一个以业务为中心…