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

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

相关推荐
渣渣灰飞4 分钟前
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第二章:RBAC 权限系统设计
android·学习·mysql
六bring个六15 分钟前
open Harmony中分布式软总线的学习任务清单
分布式·学习·c/c++·open harmony
精神底层1 小时前
AI 学习笔记:研究方法的演变
人工智能·笔记·学习
依然范特东1 小时前
RAG学习总结3--检索技术
笔记·学习
白帽小阳2 小时前
[特殊字符]【2026最新】零基础入门学网络安全(详细路线图),看这篇就够了!
学习·安全·web安全·网络安全·安全运营·学习路线·web渗透
代码游侠2 小时前
PCBA板基础知识
学习·pcb工艺
QQ骞2 小时前
【ECU-HIL 嵌入式车载软件测试学习路线和面试描述方式(1)】
学习·面试·职场和发展
鸽子一号2 小时前
c#之信号量Semaphore
笔记
kdxiaojie2 小时前
Linux 驱动研究 —— I2C (5)
linux·运维·笔记·学习
会周易的程序员3 小时前
从零构建多核CPU负载自适应控制系统
linux·c++·笔记·物联网·测试工具