SpringMVC 学习(一)Servlet

1. Hello Servlet

(1) 创建父工程

  • 删除src文件夹

  • 引入一些基本的依赖

    <!--依赖-->
    <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>
    </dependencies>
    

(2) 创建子工程

  • 建立一个Moudle:springmvc-01-servlet ,

在这里插入图片描述

  • 添加Web app的支持,将子工程变为一个web项目

    鼠标右键单击,左键单击 Add Framework Support…

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 导入servlet 和 jsp 的 jar 依赖

    <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency>
    </dependencies>
    
  • 编写HelloServlet 类,用来处理用户请求

    public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1.获取前端参数String method = req.getParameter("method");if (method.equals("add")) {req.getSession().setAttribute("msg", "执行了 add 方法");}if (method.equals("delete")) {req.getSession().setAttribute("msg", "执行了 delete 方法");}// 2.调用业务层// 3.视图转发或者重定向req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 调用 doGet 实现复用doGet(req, resp);}
    }
    
  • 编写hello.jsp,在WEB-INF目录下建一个jsp文件夹,新建test.jsp

    公共页面(用户可见)放在 web 目录下,用户不可见放在 WEB-INF 目录下。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head><title>Hello</title>
    </head>
    <body>${msg}</body>
    </html>
    
  • 在 web.xml 中注册 Servlet

    <?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><servlet-name>hello</servlet-name><servlet-class>com.why.servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><!--设置超时时间--><!--<session-config>--><!--    <session-timeout>15</session-timeout>--><!--</session-config>--><!--欢迎页--><!--<welcome-file-list>--><!--    <welcome-file>index.jsp</welcome-file>--><!--</welcome-file-list>--></web-app>
    

(4) idea配置tomcat

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(5) 启动Tomcat进行测试

  • localhost:8080/hello?method=add

    在这里插入图片描述

  • localhost:8080/user?method=delete

    在这里插入图片描述

2. 简介

SpringMVC 是 Spring Framework 的一部分,基于 java 实现的轻量级 web 框架

官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc

官方文档 5.2.0:https://docs.spring.io/spring-framework/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web

官方文档中文翻译:Spring MVC 4.2.4.RELEASE 中文文档_w3cschool

请求处理

(1) DispatcherServlet

  • Spring MVC框架,与其他很多web的MVC框架一样:请求驱动

  • Spring 的中央处理器,DispatcherServlet(继承自HttpServlet基类),负责把所有请求分发到控制器,同时提供其他web应用开发所需要的功能,而且与 Spring IoC 容器做到了无缝集成,这意味着,Spring提供的任何特性,在 Spring MVC 都可以使用。

    在这里插入图片描述

(2) 请求处理流程

  • 下图展示了 Spring Web MVC 的DispatcherServlet处理请求的工作流,Front Controller 相当于 DispatcherServletDispatcherServlet应用的是一个前端控制器的设计模式。

    在这里插入图片描述

  • 下图给出 Spring MVC 详细的的请求处理流程,并用红字注释了其具体操作。

    在这里插入图片描述

    • 实线为 Spring MVC 的操作,不需要编写,只需要配置相关内容即可。

    • 虚线为需要编写的操作,由程序员编写逻辑。

    • Handler:处理器,可理解为 Controller

    • HandlerMapping:处理器映射。它会根据某些规则将进入容器的请求映射到具体的处理器以及一系列前处理器和后处理器(即处理器拦截器)上。具体的规则视HandlerMapping类的实现不同而有所不同。其最常用的一个实现支持你在控制器上添加注解,配置请求路径。当然,也存在其他的实现。

    • HandlerExecution: Handler 实例,主要作用是根据 url 查找 Controller 实例,如 url 被查找控制器为:hello => HelloController。

      • 解释过程:http://localhost:8080/springmvc/hello

        http://localhost:8080 服务器域名

        springmvc 部署在服务器上的 web 站点(服务)

        hello 控制器

        解析结果:请求位于服务器 http://localhost:8080 上的 Spring MVC 站点的 hello 控制器

    • HandlerAdapter:处理器适配器。拿到请求所对应的处理器后,适配器将负责去调用该处理器,这使得DispatcherServlet无需关心具体的调用细节。比方说,要调用的是一个基于注解配置的控制器,那么调用前还需要从许多注解中解析出一些相应的信息。因此,HandlerAdapter的主要任务就是对DispatcherServlet屏蔽这些具体的细节。

    • ViewResolver:视图解析器。它负责将一个代表逻辑视图名的字符串(String)映射到实际的视图类型View上。

    • Spring的DispatcherServlet使用了以上特殊的 bean 来处理请求、渲染视图等,这些特定的 bean 是 Spring MVC 框架的一部分。这些特殊的 bean 可以在 web 应用上下文 WebApplicationContext 中配置。Spring MVC 维护了一个默认的bean列表,若没有进行特别的配置,框架将会使用默认的 bean 。

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

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

相关文章

【KMP算法】C++

KMP算法的原理是通过构建部分匹配表&#xff0c;来利用已经匹配过的信息&#xff0c;避免不必要的回溯。部分匹配表是一个长度与模式字符串相等的数组&#xff0c;用于记录在每个位置上的最长公共前后缀的长度。 这样图片完全表达了KMP算法的核心思想&#xff0c;出处来自添加链…

ruoyi-nbcio项目增加右上角的消息提醒

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 因为以后流程的通知需要提醒&#xff0c;所以右上角需要增加消息提醒。 1、增加右上角的按钮与信息 <div class"right-menu"><templat…

深入探讨Vue.js:从基础到高级(最佳实践)

文章目录 Vue.js 基础1. Vue.js 是什么&#xff1f;2. Vue 实例3. 双向数据绑定 Vue 组件1. 什么是 Vue 组件&#xff1f;2. 组件之间的通信 Vue 模板语法1. 插值和指令2. 条件和循环3. 事件绑定和表单输入绑定 Vue 路由1. Vue Router安装和配置&#xff1a;导航&#xff1a; 2…

常识判断 --- 党史

目录 中共1~3大 例题 国民党 例题 中共4~5大 例题 中共起义~会议 例题 中共六届六中全会&#xff08;1938年9月&#xff09; 中共七大&#xff08;1945年4月&#xff09; 例题 中共七届二中全会 例题 中共8~10大 中共11~12届全会 例题 中共13~14大 …

拼多多商品详情数据接口

拼多多商品详情接口的具体内容。获取拼多多商品详情&#xff0c;可以参考如下方式&#xff1a; item_get_app-根据ID取商品详情原数据接口包括&#xff1a;标题&#xff0c;价格&#xff0c;促销价&#xff0c;优惠券&#xff0c;库存&#xff0c;销量&#xff0c;详情图片&am…

前端自定义导出PPT

1、背景 前端导出PPT&#xff0c;刚接触这个需求&#xff0c;还是比较懵逼&#xff0c;然后就在网上查找资料&#xff0c;最终确认是可行的&#xff1b;这个需求也是合理的&#xff0c;我们做了一个可视化数据报表&#xff0c;报表导出成PPT&#xff0c;将在线报表转成文档类型…

【编码魔法师系列_构建型1.2 】工厂方法模式(Factory Method)

学会设计模式&#xff0c;你就可以像拥有魔法一样&#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们&#xff08;GoF&#xff09;凝聚出来的最佳实践&#xff0c;可以提高代码的可读性、可维护性和可重用性&#xff0c;从而让我们的开发效率更高。通…

设置github的默认分支

设置github的默认分支 更换默认分支默认分支的作用 更换默认分支 之前默认的分支想main, 现在想更换默认的分支 点击main, 可以看到有两个分支: main和gpuVersion, 可以看到这里默认main分支为default 如果想设置gpuVersion作为default,可以点击View all branches, 进入下一个…

测试域: 流量回放-工具篇jvm-sandbox,jvm-sandbox-repeater,gs-rest-service

JVM-Sandbox Jvm-Sandbox-Repeater架构_小小平不平凡的博客-CSDN博客 https://www.cnblogs.com/hong-fithing/p/16222644.html 流量回放框架jvm-sandbox-repeater的实践_做人&#xff0c;最重要的就是开心嘛的博客-CSDN博客 [jvm-sandbox-repeater 学习笔记][入门使用篇] 2…

数据结构 | 树和二叉树

树 树是n&#xff08;n>0&#xff09;个结点的有限集。当n 0时&#xff0c;称为空树。在任意一棵非空树中应满足&#xff1a; 有且仅有一个特定的称为根的结点。当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09;个互不相交的有限集T1,T2,…,Tm&#…

uni-app 之 去掉顶部导航

uni-app 之 去掉顶部导航 uniapp怎么样去掉顶部导航 uniapp去掉顶部导航的方法&#xff1a; 1、去掉所有导航栏&#xff1b; 2、单一页面去掉顶部导航栏。 image.png uniapp去掉顶部导航的方法&#xff1a; 1、去掉所有导航栏 "globalStyle": {"navigationBar…

Perceptual Compression与Semantic Compression的含义

这是我在读LDMS的学到的 Perceptual Compression 保留人类能够感知的重要信息&#xff0c;例如纹理&#xff0c;局部边缘等 Semantic Compression 保留数据的实际意义&#xff0c;例如图片包含了人物、建筑&#xff0c;人物之间的关系等

活动预告 | 中国数据库联盟(ACDU)中国行第三站定档成都,邀您探讨数据库前沿技术

数据库技术一直是信息时代中不可或缺的核心组成部分&#xff0c;随着信息量的爆炸式增长和数据的多样化&#xff0c;其重要性愈发凸显。作为中国数据库联盟&#xff08;ACDU&#xff09;的品牌活动之一&#xff0c;【ACDU 中国行】在线下汇集数据库领域的行业知名人士&#xff…

uniapp小程序点击按钮直接退出小程序效果demo(整理)

点击按钮直接退出小程序 <navigator target"miniProgram" open-type"exit">退出小程序</navigator>

支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答

很多投资者都知道&#xff0c;Renko图表和普通日本烛台都会采用相同的交易信号&#xff0c;即支撑位和阻力位。那么支撑位和阻力位在Renko和烛台图如何使用?FPmarkets澳福3秒回答。 这些信号在任何时间框架上都会出现&#xff0c;且在蜡烛图交易中颇受欢迎。对于Renko图表而言…

《DATASET CONDENSATION WITH GRADIENT MATCHING》

本文提出了一种用于数据效率学习的训练集合成技术&#xff0c;称为“数据集凝聚”(Dataset)&#xff0c;它学习将大数据集压缩成一个小的信息合成样本集&#xff0c;用于从头开始训练深度神经网络。我们将这个目标表述为在原始数据和合成数据上训练的深度神经网络权值的梯度之间…

[Linux] 2.Linux开发环境的搭建(Ubuntu)

虚拟机&#xff1a;VMare安装、Ubuntu、VitualBox 真机&#xff1a;公司的研发服务器 Linux虚拟机安装所需文件&#xff1a; 网盘资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WN-tizjHpOgNF0tjbvcZsA?pwd2itd 提取码&#xff1a;2itd 文件解压&#xff…

十四、流式编程(4)

本章概要 终端操作 数组循环集合组合匹配查找信息数字流信息 终端操作 以下操作将会获取流的最终结果。至此我们无法再继续往后传递流。可以说&#xff0c;终端操作&#xff08;Terminal Operations&#xff09;总是我们在流管道中所做的最后一件事。 数组 toArray()&…

火山引擎DataLeap推出两款大模型应用: 对话式检索与开发 打破代码语言屏障

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 自上世50年代&#xff0c;以“计算机”作为代表性象征的信息革命开始&#xff0c;社会对于先进生产力的认知便开始逐步更迭——从信息化&#xff08;通常认为是把企…

Coupang真的好做吗?韩国Coupang入驻流程——站斧浏览器

coupang真的好做吗&#xff1f; Coupang自开放全球注册以来&#xff0c;一直备受跨境电商各平台卖家的关注&#xff0c;那么作为一颗跨境电商的新星&#xff0c;真的值得做吗&#xff1f; 不到一年的关注度遭到如此众多的跨境卖家追捧的平台&#xff0c;火是有他的原因的&…