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

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

相关推荐
贺函不是涵2 小时前
【沉浸式求职学习day36】【初识Maven】
java·学习·maven
芯片SIPI设计2 小时前
MIPI C-PHY 标准学习----一种通用多信号传输方案
c语言·开发语言·学习
Huazzi.2 小时前
Ubuntu 22虚拟机【网络故障】快速解决指南
linux·网络·学习·ubuntu·bash·编程
【0931】2 小时前
英语六级---2024.12 卷二 仔细阅读2
学习·英语
虾球xz3 小时前
游戏引擎学习第271天:生成可行走的点
c++·学习·游戏引擎
海尔辛4 小时前
学习黑客5 分钟读懂Linux Filesystem Interaction Continued
linux·服务器·学习
wangbaowo4 小时前
MySQL数据库下篇
数据库·经验分享·笔记·学习·mysql·安全
chennalC#c.h.JA Ptho4 小时前
生成了一个AI算法
经验分享·笔记·aigc
麻雀无能为力4 小时前
C++自学笔记 makefile
笔记
ps酷教程5 小时前
springboot3学习
学习