SpringMvc入门

目录

1.什么是SpringMvc

2.SpringMVC工作流程

3.SpringMVC核心组件

4.SpringMvc入门

添加依赖

编写spring-mvc.xml

编写IndexController类

编写jsp

编写web.xml

测试结果

5.静态资源处理

编写Spring-mvc.xml

测试结果

​编辑


1.什么是SpringMvc

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

此外,Spring MVC 的注解驱动和对 REST 风格的支持,也是它最具特色的功能。无论是在框架设计,还是扩展性、灵活性等方面都全面超越了 Struts2 等 MVC 框架。并且由于 Spring MVC 本身就是 Spring 框架的一部分,所以可以说与 Spring 框架是无缝集成,性能方面具有先天的优越性,对于开发者来说,开发效率也高于其它的 Web 框架,在企业中的应用越来越广泛,成为主流的 MVC 框架。

2.SpringMVC工作流程

  1. 用户发来一个请求,首先进入的是前端控制器DispatcherServlet

  2. 前端控制器(DispacherServlet)将用户发来的请求发送给处理器映射器(HandlerMapping)

  3. 处理器映射器根据前端控制器发来的用户的请求找到对应符合的控制器(Handler),并且将其封装成处理器执行链,返回给前端控制器。

  4. 处理器适配器接收到来自前端控制器的执行链后,找到对应执行此执行链的处理器适配器(HandlerAdapter)来调用的具体的控制器(就是说其对应的方法或者逻辑)

  5. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller(处理业务逻辑)

  6. 控制器执行完成后,会返回一个ModelAndView对象给处理器适配器

  7. 处理器适配器将返回来的ModelAndView对象返回给前端控制器(到这里所有的业务处理过程就要完了,接下就是将结果以页面的的形式响应给用户)

  8. 前端控制器将返回回来的ModelAndView对象交给视图解析器(ViewResolver),视图解析器根据传过来的View对象解析成对应的页面对象

  9. ViewResolver 将封装好的将页面对象和Model对象返回给 DIspatcherServlet

  10. 前端控制器再将返回回来的对象交给视图(View)

  11. 视图根据传过来的Model对象再一次的对页面进行渲染(将模型数据填充至视图中),然后在返回给前端控制器。

  12. 前端控制器将完成的结果响应给浏览器,然后浏览器在展现给用户。

3.SpringMVC核心组件

SpringMVC是一个基于Java的Web框架,它使用了一些核心组件来处理Http请求和响应。以下是SpringMVC的一些核心组件:

  1. DispatcherServlet:作为前端控制器,它是SpringMVC处理请求的入口点。它接收所有的请求,并将它们分发给相应的控制器来处理。

  2. HandlerMapping:根据请求的URL地址和相关的配置信息,将请求映射到对应的处理器(Controller)。

  3. HandlerAdapter:负责调用处理器(Controller)来处理请求,并返回结果。

  4. ViewResolver:根据处理器返回的逻辑视图名解析出实际的视图对象。

  5. View:负责渲染数据,并生成最终的响应。

  6. Model:用于存储和传递数据,在处理器和视图之间进行交互。

  7. Interceptor:用于在请求处理的各个阶段添加拦截逻辑,例如日志记录、权限校验等。

4.SpringMvc入门

添加依赖

编写spring-mvc.xml

java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.zking.zf及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <context:component-scan base-package="com.zking"/>

    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven />

    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>



    <!--4) 单独处理图片、样式、js等资源 -->
    <!-- <mvc:resources location="/css/" mapping="/css/**"/>
     <mvc:resources location="/js/" mapping="/js/**"/>
     <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>-->
</beans>

编写IndexController类

java 复制代码
package com.zking.web;

import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author bing人
 * @site
 * @company xy集团
 * @create 2023-09-04 16:31
 * @Controller替换了自定义mvc中的
 * extends ActionSupport
 */

@Controller
public class IndexController {
    //首页
    @RequestMapping("/hello")
    public String hello(){
        System.out.println("hello soringmvc");
        return  "hello";
    }
}

编写jsp

java 复制代码
<%--
  Created by IntelliJ IDEA.
  User: 30340
  Date: 2023/9/4
  Time: 16:36
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
hello word!
</body>
</html>

编写web.xml

java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <!-- Spring和web项目集成start -->
  <!-- spring上下文配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-context.xml</param-value>
  </context-param>
  <!-- 读取Spring上下文的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- Spring和web项目集成end -->

  <!-- 中文乱码处理 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- Spring MVC servlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--web.xml 3.0的新特性,是否支持异步-->
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

测试结果

5.静态资源处理

编写Spring-mvc.xml

测试结果

相关推荐
brrdg_sefg2 小时前
Rust 在前端基建中的使用
前端·rust·状态模式
m0_748235242 天前
前端实现获取后端返回的文件流并下载
前端·状态模式
委婉待续2 天前
java抽奖系统(八)
java·开发语言·状态模式
m0_748241123 天前
前端监控之sourcemap精准定位和还原错误源码
前端·状态模式
m0_748245173 天前
前端下载文件的几种方式使用Blob下载文件
前端·状态模式
m0_748236583 天前
前端如何将pdf等文件传入后端
前端·pdf·状态模式
MatthewMao4 天前
设计模式12:状态模式
设计模式·状态模式
小白64024 天前
浅谈目前我开发的前端项目用到的设计模式
前端·设计模式·状态模式
xyz20116 天前
Flink State面试题和参考答案-(下)
flink·状态模式
方圆想当图灵6 天前
问题解决:发现Excel中的部分内容有问题。是否让我们尽量尝试恢复? 如果您信任此工作簿的源,请单击“是”。
excel·状态模式