• (续)SSM整合之springmvc笔记(SpringMVC简介)(P119-123)还没完


    目录

    复习黑马版本的请求过程

    入门案例

    一  .准备工作

    1 . 开发环境

    2 .创建模块  spring_mvc_helloworld    com.atguigu

    3 、创建maven工程

    ①添加web模块

    ②打包方式:war

    ​编辑 ③引入依赖

    二 . 配置web.xml

    ①默认配置方式

    ②扩展配置方式

    三 . 创建请求控制器

    四 . 创建SpringMVC的配置文件   

    五 . 测试HelloWorld

    1 .新建文件夹templates

    2 . 在文件夹templates里面创建首页

    3 .接下来 我们把工程配置到tomcat中   

    4 . 启动tomcat  结果如下 

    5 .实现对首页的访问

    6  通过超链接跳转到指定页面


    复习黑马版本的请求过程

    springmvc的底层也是servlet

    在后台能接请求的 只能servlet和过滤器

    原理

    解释:

    当我们的浏览器(客户端)发出请求时,不是到达Controller

    而是先达到DispatcherServlet中央处理器,前端控制器/核心处理器),DispatcherServlet负责接收请求,响应请求,DispatcherServlet收到请求之后,要调用Controlle,但是不知道要调用哪个Controller能够处理发过来的请求,这时就先让HandlerMapping(处理器映射器)去找Controller,看哪个Controller可以处理发过来的请求,等找到之后 在安排HandlerAdapter(处理器适配器)去调用Controller,HandlerAdapter就可以去调用Controller方法,调用Controller方法之后会返回一个视图名称,然后视图解析器在去咨询找页面,在经过渲染页面,在返回给我们的客户端

    解释:

    ViewResolver视图解析器

    调用之后,得到视图,在根据ViewResolver视图解析器

    寻找页面

     标签中使用//*的区别:

    入门案例

    一  .准备工作

    1 . 开发环境

    IDE idea 2020.1
    构建工具: maven3.6.1
    服务器: tomcat8.5
    Spring 版本: 5.3.1
    视图渲染技术:Thymeleaf

    2 .创建模块  spring_mvc_helloworld    com.atguigu

    3 、创建maven工程

    转war包的第一种方法

    ①添加web模块

    ②打包方式:war

    war

      spring_mvc_helloworld后面添加\src\main\webapp

    变成  D:\review_ssm\workspace\SSM\spring_mvc_helloworld\src\main\webapp\WEB-INF\web.xml

     

     转war的第二种办法

     ③引入依赖

    war
    
    
      
      
        org.springframework
        spring-webmvc
        5.3.1
      
    
      
      
        ch.qos.logback
        logback-classic
        1.2.3
      
    
      
      
        javax.servlet
        javax.servlet-api
        3.1.0
        provided
      
    
      
      
        org.thymeleaf
        thymeleaf-spring5
        3.0.12.RELEASE
      
    
    注:由于 Maven 的传递性,我们不必将所有需要的包全部配置依赖,而是配置最顶端的依赖,其他靠 传递性导入。

    二 . 配置web.xml

     注册SpringMVC的前端控制器DispatcherServlet

    ①默认配置方式

    此配置作用下, SpringMVC 的配置文件默认位于 WEB-INF 下,默认名称为 -
    servlet.xml ,例如,以下配置所对应 SpringMVC 的配置文件位于 WEB-INF 下,文件名为 springMVC-servlet.xml
    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <servlet>
    7. <servlet-name>springMVCservlet-name>
    8. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    9. servlet>
    10. <servlet-mapping>
    11. <servlet-name>springMVCservlet-name>
    12. <url-pattern>/url-pattern>
    13. servlet-mapping>
    14. web-app>

    ②扩展配置方式

    可通过 init-param 标签设置 SpringMVC 配置文件的位置和名称,通过 load-on-startup 标签设置
    SpringMVC 前端控制器 DispatcherServlet 的初始化时间
    springMVC-servlet.xml删除  然后在类路径下面在重新新建一个springmvc.xml  

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <servlet>
    7. <servlet-name>springMVCservlet-name>
    8. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    9. <init-param>
    10. <param-name>contextConfigLocationparam-name>
    11. <param-value>classpath:springmvc.xmlparam-value>
    12. init-param>
    13. servlet>
    14. <servlet-mapping>
    15. <servlet-name>springMVCservlet-name>
    16. <url-pattern>/url-pattern>
    17. servlet-mapping>
    18. web-app>

    重新测试

    如果报错 可以先clean 在打包

    DispatcherServlet是框架帮我们创建出来的  他的初始化里面会做很多操作  接下来我们来简单的看下DispatcherServlet的源码:

    单击DispatcherServlet   按住Ctrl+鼠标左健

    DispatcherServlet extends FrameworkServlet 

    单击FrameworkServlet  按住Ctrl+鼠标左健

    FrameworkServlet extends HttpServletBean

     单击HttpServletBean  按住Ctrl+鼠标左健

    HttpServletBean extends HttpServlet

     单击HttpServlet  按住Ctrl+鼠标左健

    HttpServlet extends GenericServlet

     单击GenericServlet  按住Ctrl+鼠标左健

    GenericServlet implements Servlet

     单击Servlet  按住Ctrl+鼠标左健

    总结:

    DispatcherServlet extends FrameworkServlet

    FrameworkServlet extends HttpServletBean

    HttpServletBean extends HttpServlet

    HttpServlet extends GenericServlet

    GenericServlet implements Servlet

     然后Alt+7 查看类的内容结构

     

     

    具体源码分析 这里面不讲 总结一句话在DispatcherServlet 在初始化的过程中执行了非常多的操作

    所以我们最好不要让DispatcherServlet第一次访问的时候进行初始化  因为初始化要花很多时间还要进行接收请求  很慢  所以我们这里面加上1  将当前Servlet初始化时间提前到服务器启动的时候  因为如果不设置 第一次防问的时候  不但要来处理请求  还要进行很长时间的一个初始化过程 

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <servlet>
    7. <servlet-name>springMVCservlet-name>
    8. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    9. <init-param>
    10. <param-name>contextConfigLocationparam-name>
    11. <param-value>classpath:springmvc.xmlparam-value>
    12. init-param>
    13. <load-on-startup>1load-on-startup>
    14. servlet>
    15. <servlet-mapping>
    16. <servlet-name>springMVCservlet-name>
    17. <url-pattern>/url-pattern>
    18. servlet-mapping>
    19. web-app>
     
       

     
       

     
       

    注:
    标签中使用 / /* 的区别:
    / 所匹配的请求可以是 /login .html .js .css 方式的请求路径,但是 / 不能匹配 .jsp 请求路径的请
    因此就可以避免在访问 jsp 页面时,该请求被 DispatcherServlet 处理,从而找不到相应的页面
    /* 则能够匹配所有请求,例如在使用过滤器时,若需要对所有请求进行过滤,就需要使用 /* 的写

    三 . 创建请求控制器

    由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器
    请求控制器中每一个处理请求的方法成为控制器方法
    因为 SpringMVC 的控制器由一个 POJO (普通的 Java 类)担任,因此需要通过 @Controller 注解将其标识 为一个控制层组件,交给Spring IoC 容器管理,此时 SpringMVC 才能够识别控制器的存在
    普通的 Java 类:不用任何的继承和实现
    springmvc封装的是 Servlet ,所以我们现在不用手动在去创建 Servlet ,我们当前所有的请求经过web.xml的配置  都被 前端控制器 DispatcherServlet 处理了,当然这里面不能让 前端控制器 DispatcherServlet 直接处理  因为 前端控制器 DispatcherServlet  能帮助我们处理的是共性的问题  
    比如:获取请求参数  往域对象中进行共享数据   页面跳转   转发和重定向
    当前的请求还是要具体写一方法进行处理,所以我们要创建控制层  当前控制层里面的方法就可以通过springmvc为我们提供的方式 将它设置成处理请求的方法  
    com.atguigu.controller.HelloController
    1. package com.atguigu.controller;
    2. import org.springframework.stereotype.Controller;
    3. @Controller
    4. public class HelloController {
    5. }

    四 . 创建SpringMVC的配置文件   

    springMVC-servlet.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. 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">
    6. <context:component-scan base-package="com.atguigu.controller">context:component-scan>
    7. <bean id="viewResolver"
    8. class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    9. <property name="order" value="1"/>
    10. <property name="characterEncoding" value="UTF-8"/>
    11. <property name="templateEngine">
    12. <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
    13. <property name="templateResolver">
    14. <bean
    15. class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
    16. <property name="prefix" value="/WEB-INF/templates/"/>
    17. <property name="suffix" value=".html"/>
    18. <property name="templateMode" value="HTML5"/>
    19. <property name="characterEncoding" value="UTF-8" />
    20. bean>
    21. property>
    22. bean>
    23. property>
    24. bean>
    25. beans>

    五 . 测试HelloWorld

      1 .新建文件夹templates

    2 . 在文件夹templates里面创建首页

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>首页title>
    6. head>
    7. <body>
    8. <h1>index.htmlh1>
    9. body>
    10. html>

     现在我们需要往/WEB-INF/templates/index.html里面跳转

    我们现在不用写这么长的路径

    我们把前缀/WEB-INF/templates去掉  把后缀.html去掉  变成index

    现在我们只需要通过index的逻辑视图一定要访问到他所对应的访问视图

    物理视图/WEB-INF/templates/index.html去掉前缀和后缀就变成逻辑视图

    3 .接下来 我们把工程配置到tomcat中   

     

    在想访问tomcat里面的工程 就是通过上下文路径来访问的  因为一个web服务器可以部暑多个工程  要想访问到具体的哪个工程 就是通过工程的上下文路径进行访问的   换句话说 通过他就可以访问服务器中的工程了 

    4 . 启动tomcat  结果如下 

    这里面报404是因为 还没首页  还没有处理首页的程序 

    这里面如果报的是500  可以去看我的另一个笔记  我这边的和视频里面的不同

    视频里面SpringMVC   我是springMVC才是正确的  才能报404

    SSM复习中的报错问题(还没完)_姜小白程序的博客-CSDN博客

    5 .实现对首页的访问

    现在我们要在我们的控制层里面 处理首页的请求

    在请求控制器中创建处理请求的方法
    1. // @RequestMapping注解:处理请求和控制器方法之间的映射关系
    2. // @RequestMapping注解的value属性可以通过请求地址匹配请求,/表示的当前工程的上下文路径
    3. // localhost:8080/SpringMVC/
    4. @Controller
    5. public class HelloController {
    6. @RequestMapping("/")
    7. public String protal(){ //控制器方法 //这个方法用来处理请求的
    8. //将逻辑视图返回
    9. return "index";
    10. }
    11. }

     解释:

    控制器方法处理的请求就是请求路径为上下文路径的请求   如果浏览器发生的是 @RequestMapping("/")  那么当前的控制器方法的方法就是处理请求的方法

    我们主要在方法中返回一个逻辑视图   然后我们返回的逻辑视图会被springMVC-servlet.xml解析

    然后 把逻辑视图加上前缀 加上后缀   就可匹配到一个完整的物理视图  然后通过Thymeleaf的渲染  然后跳转到页面 

    小细节

     第一个小细节

      以后主要点击刷新  就是重新部暑的功能

    第二个小细节

    把thymeleaf的约束加到模板中 

    现在重新部暑

     

    6  通过超链接跳转到指定页面

    绝对路径是由浏览器解析的  所以把路径解析成http://localhost:8080  没有上下文路径  

    如果我们用的是Thymeleaf来解析这个路径   他会自动帮助我们把上下文路径给加上的  

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>首页title>
    6. head>
    7. <body>
    8. <h1>index.htmlh1>
    9. <a th:href="@{/hello}">测试SpringMVCa>
    10. <a href="/hello">测试绝对路径a>
    11. body>
    12. html>

    写成功success页面

    1. html>
    2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>成功title>
    6. head>
    7. <body>
    8. <h1>success.htmlh1>
    9. body>
    10. html>

    现在要跳转到成功页面

    1. @RequestMapping("/hello")
    2. public String hello(){
    3. return "success";
    4. }

     

    重新部暑

    现在我们点击 测试SpringMVC

     

     注意:

    如果这里面报500  刚把上下文路径修改成如下所示

  • 相关阅读:
    java-net-php-python-jsp保险公司报销演示录像修改版2020计算机毕业设计程序
    计算机网络知识点笔记(1)概述
    字符串匹配算法(C/Java实现)
    单视觉L2市场「鲶鱼」来了,掀起数据反哺高阶新打法
    vue简单下载
    目前主流的负载均衡器
    数组相关面试题--5.合并两个有序数组
    手机照片免费数据恢复软件EasyRecovery2024免费版下载
    解决C# 连接MYSQL数据库查询数据时Unable to convert MySQL date/time value to System.DateTime
    使用Java对书籍照片进行字符分割
  • 原文地址:https://blog.csdn.net/m0_59281987/article/details/127779482