当前位置: 首页 > news >正文

SpringMVC 学习(一)Servlet

本系列文章为【狂神说 Java 】视频的课堂笔记,若有需要可配套视频学习。

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.lryc.cn/news/178973.html

相关文章:

  • 26943-2011 升降式高杆照明装置 课堂随笔
  • 洛谷题解 | AT_abc321_c Primes on Interval
  • Quartus医院病房呼叫系统病床呼叫Verilog,源代码下载
  • ip的标准分类---分类的Ip
  • 理解并掌握C#的Channel:从使用案例到源码解读(一)
  • 如何让git命令仅针对当前目录
  • 【0223】源码剖析smgr底层设计机制(3)
  • Visual Studio 2019 C# winform CefSharp 中播放视频及全屏播放
  • 天选之子Linux是如何发展起来的?为何对全球IT行业的影响如此之大?
  • MDK报错:Undefined symbol assert_failed报错解决策略
  • LLM - Make Causal Mask 构造因果关系掩码
  • Python函数式编程(一)概念和itertools
  • Guava限流器原理浅析
  • 第四十二章 持久对象和SQL - 用于创建持久类和表的选项
  • 集合-ArrayList源码分析(面试)
  • 跨类型文本文件,反序列化与类型转换的思考
  • ubuntu20安装nvidia驱动
  • gma 2 成书计划
  • 从零手搓一个【消息队列】项目设计、需求分析、模块划分、目录结构
  • 【Spring Cloud】深入探索 Nacos 注册中心的原理,服务的注册与发现,服务分层模型,负载均衡策略,微服务的权重设置,环境隔离
  • No156.精选前端面试题,享受每天的挑战和学习
  • 如何在PIL图像和PyTorch Tensor之间进行相互转换,使用pytorch进行PIL和tensor之间的数据转换
  • STM32F4X UCOSIII任务消息队列
  • 8个居家兼职,帮助自己在家搞副业
  • 管理与系统思维
  • 电死人的是电流还是电压?
  • mac 编译问题记录
  • centos 7.9同时安装JDK1.8和openjdk11两个版本
  • 【JavaEE】HTML
  • 【数据结构--八大排序】之堆排序