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 {
    
        @Override
        protected 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);
        }
    
        @Override
        protected 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 。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值