SpringMVC学习笔记

SpringMVC搞定以后就可以开始整合了

文章目录

  • 一、随便讲点儿
    • [1.1 SpringMVC底层原理 [ 执行流程](#1.1 SpringMVC底层原理 [ 执行流程)
    • [1.2 SpringMVC组件](#1.2 SpringMVC组件)
  • [二、xml配置 开发](#二、xml配置 开发)
    • [2.1 web.xml配置前端控制器](#2.1 web.xml配置前端控制器)
    • [2.2 springmvc.xml配置其他](#2.2 springmvc.xml配置其他)
    • [2.3 开发处理器:就是写和上面不一样的东西](#2.3 开发处理器:就是写和上面不一样的东西)
    • [2.4 前端视图](#2.4 前端视图)
    • [2.5 配置Tomcat访问前端](#2.5 配置Tomcat访问前端)
  • [三、注解 开发](#三、注解 开发)
    • [3.2 springmvc.xml 配置其他](#3.2 springmvc.xml 配置其他)
    • [3.3 开发处理器:注解版](#3.3 开发处理器:注解版)

一、随便讲点儿

SpringMVC是Spring框架的一个模块儿,是一个基于Spring的Web框架

1.1 SpringMVC底层原理 [ 执行流程

  1. 发送请求到前端控制器DispatcherServlet
  2. 前端控制器请求处理器映射器HandlerMapping查找Handler(就是Controller
    可以根据web.xml进行查找、注解进行查找
  3. 处理器映射器向前端控制器返回Handler
  4. 前端控制器调用处理器适配器去执行Handler
  5. 处理器适配器执行Handler,向前端控制器返回ModelAndView
  6. 前端控制器请求进行视图解析
  7. 视图解析器解析完毕后返回View
  8. 前端控制器进行视图渲染
  9. 前端控制器向用户响应结果

1.2 SpringMVC组件

组件

  • 前端控制器:接收请求 响应结果 相当于一个转发器 中央处理器
  • 处理器映射器: 根据请求的url查找handler
  • 处理器适配器: 按照一定的规则执行Handler
  • Handler处理器:编写Handler的时候需要依照功能需求进行
  • 视图解析器:对视图进行解析,根据逻辑视图名得到真正的视图
  • 视图:View是一个接口,支持不同的视图

二、xml配置 开发

导入相关依赖就不说了嗷,还有头文件自己搜吧

2.1 web.xml配置前端控制器

xml 复制代码
<!--    配置前端控制器  -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

2.2 springmvc.xml配置其他

xml 复制代码
<!--配置处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--配置处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
    
<!--配置处理器:这玩意儿和上面的不一样-->
    <bean name="/test.action" class="com.test"/>

2.3 开发处理器:就是写和上面不一样的东西

java 复制代码
package com;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

//要实现org.springframework.web.servlet.mvc.Controller
public class test implements Controller {
	//处理器处理完返回的是ModelAndView 
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    	//测试数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("zhangsan",20));
        userList.add(new User("lisqi",21));
        userList.add(new User("wangwu",23));
		
		//创建ModelAndView 
        ModelAndView mav = new ModelAndView();
        //将数据给到前端视图
        mav.addObject("userList",userList);
        //设置视图
        mav.setViewName("test.jsp");

        return mav;
    }
}

2.4 前端视图

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  <c:forEach items="${userList}" var="users">
    ${users.name} &nbsp;  &nbsp; &nbsp; ${users.age}
    <hr/>
  </c:forEach>
</body>
</html>

2.5 配置Tomcat访问前端

http://localhost:8080/MySpringMVC_war_exploded/`test.action`

三、注解 开发

上面的开发的时候,处理器要实现接口,所以不是很方便。

我们利用注解可以在一个处理器里面实现多个方法。

3.2 springmvc.xml 配置其他

xml 复制代码
<!--注解日常扫描-->
    <context:component-scan base-package="com"/>
<!--配置处理器适配器、配置处理器映射器:一句话的事儿-->
    <mvc:annotation-driven/>
    
<!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--设置前缀:拼接到视图的前面-->
        <property name="prefix" value="/"/>
        <!--设置后缀:拼接到视图的后面-->
        <property name="suffix" value=".jsp"/>
    </bean>
<!--配置处理器:不配置啦!直接注解-->

3.3 开发处理器:注解版

java 复制代码
@Controller //注解:有四个
@RequestMapping("/")//窄化路径:访问时候的路径
public class Test {
    @RequestMapping("test")
    //还有其他的写法:主要是返回值和输入参数的区别。
    public ModelAndView list() {

        List<User> lists = new ArrayList<>();
        lists.add(new User("aaa",13));
        lists.add(new User("cccc",14));
        lists.add(new User("mmm",15));

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("userList",lists);
        modelAndView.setViewName("user/list");

        return modelAndView;
    }
}

唉......感觉自己效率好低,学海无涯啊

相关推荐
zhangrelay2 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
Jimmy3 小时前
深夜突袭:我们的午夜战场
笔记·产品·电子书
志尊宝5 小时前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native
lll23526917795 小时前
线下多人发言对比与录音操作
笔记·智能手机
叼烟扛炮6 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
深圳老胡9 小时前
STM32C5A3ZG 网络调试总结:从启动失败到连续 Ping 稳定
笔记·stm32·单片机·代码规范
辣知9 小时前
辣知·化智92 《山海经》里的史前密码
学习
职豚求职小程序刷题9 小时前
宁德时代社招高岗晋升测评笔试改版了
笔记
CarIise9 小时前
JDBC 与数据库事务核心
数据库·笔记