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

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

相关推荐
我命由我123455 分钟前
SSL 协议(HTTPS 协议的关键)
网络·经验分享·笔记·学习·https·ssl·学习方法
丶Darling.44 分钟前
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树
开发语言·数据结构·c++·笔记·学习·算法
百里香酚兰1 小时前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
布丁不叮早起枣祈2 小时前
10.3学习
学习
结衣结衣.2 小时前
python中的函数介绍
java·c语言·开发语言·前端·笔记·python·学习
LN-ZMOI2 小时前
c++学习笔记1
c++·笔记·学习
五味香2 小时前
C++学习,信号处理
android·c语言·开发语言·c++·学习·算法·信号处理
qq_421833673 小时前
计算机网络——应用层
笔记·计算机网络
云端奇趣3 小时前
探索 3 个有趣的 GitHub 学习资源库
经验分享·git·学习·github
我感觉。3 小时前
【信号与系统第五章】13、希尔伯特变换
学习·dsp开发