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;
    }
}

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

相关推荐
2201_754864781 分钟前
学习日记(2026年3月24日)
学习
sensen_kiss5 分钟前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.1软件危机
学习·软件工程
xw-busy-code1 小时前
sass学习笔记整理
笔记·学习·sass
nap-joker9 小时前
【多模态解耦】DecAlign:用于解耦多模态表示学习的分层跨模态对齐
学习·多模态融合·最优传输·多模态表征学习·特征解耦·音频+图像+文本·原型引导
551只玄猫9 小时前
【数据库原理 实验报告1】创建和管理数据库
数据库·sql·学习·mysql·课程设计·实验报告·数据库原理
IDZSY043010 小时前
AI社交平台进阶指南:如何用AI社交提升工作学习效率
人工智能·学习
happymaker062610 小时前
web前端学习日记——DAY05(定位、浮动、视频音频播放)
前端·学习·音视频
xuhaoyu_cpp_java10 小时前
过滤器与监听器学习
java·经验分享·笔记·学习
LegendNoTitle10 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
炽烈小老头10 小时前
【 每天学习一点算法 2026/03/23】数组中的第K个最大元素
学习·算法·排序算法