当前位置: 首页 > news >正文

1.springmvc基础入门(一)

1.Spring MVC概念

Spring MVC 是 Spring Framework 提供的 Web 组件,全称是 Spring Web MVC,是⽬前主流的实现

MVC 设计模式的框架,提供前端路由映射、视图解析等功能。

Java Web 开发者必须要掌握的技术框架。

2.Spring MVC 功能

MVC:Controller(控制层)、Model(模型层)、View(视图层)

流程:Controller 接收客户端请求,调⽤相关业务层组件产出 Model,或业务数据并返回给

Controller,Controller 再结合 View 完成业务数据的视图层渲染,并将结果响应给客户端,如下图所

示。

Spring MVC 对这套 MVC 流程进⾏封装,帮助开发者屏蔽底层代码,并且开放出相关接⼝供开发者调

⽤,让 MVC 开发变得更加简单⽅便。

3.Spring MVC 实现原理

核⼼组件

  • DispatcherServlet:前置控制器,负责调度其他组件的执⾏,可以降低不同组件之间的耦合性, 是整个 Spring MVC 的核⼼模块。
  • Handler:处理器,完成具体的业务逻辑,相当于 Servlet。
  • HandlerMapping:DispatcherServlet 是通过 HandlerMapping 将请求映射到不同的 Handler。
  • HandlerInterceptor:处理器拦截器,是⼀个接⼝,如果我们需要进⾏⼀些拦截处理,可以通过实现该接⼝完成。
  • HandlerExecutionChain:处理器执⾏链,包括两部分内容:Handler 和
  • HandlerInterceptor(系统会有⼀个默认的 HandlerInterceptor,如果需要额外拦截处理,可以添加拦截器进⾏设置)。
  • HandlerAdapter:处理器适配器,Handler 执⾏业务⽅法之前,需要进⾏⼀系列的操作包括表单的数据验证、数据类型的转换、将表单数据封装到 POJO 等,这⼀些列操作都是由
  • HandlerAdapter 完成,DispatcherServlet 通过 HandlerAdapter 执⾏不同的 Handler。
  • ModelAndView:封装了模型数据和视图信息,作为 Handler 的处理结果,返DispatcherServlet。
  • ViewResolver:视图解析器,DispatcherServlet 通过它将逻辑视图解析为物理视图,最终将渲染的结果响应给客户端。

⼯作流程

1、客户端请求被 DispatcherServlet 接收。

2、根据 HandlerMapping 映射到 Handler。

3、⽣成 Handler 和 HandlerInterceptor。

4、Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式⼀并返回给

DispatcherServlet。

5、DispatcherServlet 通过 HandlerAdpater 调⽤ Handler 的⽅法完成业务逻辑处理。

6、返回⼀个 ModelAndView 对象给 DispatcherServlet。

7、DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver 视图解析器,将逻辑视图解析

成物理视图。

8、ViewResolver 返回⼀个 View 给 DispatcherServlet。

9、DispatcherServlet 根据 View 进⾏视图渲染(将模型数据填充到视图中)。

10、DispatcherServlet 将渲染之后的视图响应给客户端。

4.Spring MVC 具体使用

1、创建 Maven ⼯程,pom.xml。

<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.3.RELEASE</version>
</dependency>

2、在 web.xml 中配置 Spring MVC 的 DispatcherServlet。

<web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servletclass><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>/</url-pattern></servlet-mapping>
</web-app>

3、springmvc.xml

<?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.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"><!-- 配置⾃动扫描 --><context:component-scan base-package="com.southwind"></context:component-scan><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/"></property><!-- 后缀 --><property name="suffix" value=".jsp"></property></bean>
</beans>

4、创建 Handler

package com.southwind.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloHandler {@RequestMapping("/index")public String index(){System.out.println("接收到了请求");//返回逻辑视图return "index";}
}

流程梳理

1、DispatcherServlet 接收到 URL 请求 index,结合 @RequestMapping("/index") 注解将该请求交给

index 业务⽅法进⾏处理。

2、执⾏ index 业务⽅法,控制台打印⽇志,并且返回 "index" 字符串(逻辑视图)。

3、结合 springmvc.xml 中的视图解析器配置,找到⽬标资源:/index.jsp,即根⽬录下的 index.jsp ⽂

件,将该 JSP 资源返回给客户端完成响应。

Spring MVC 环境搭建成功。

5.Spring MVC 常⽤注解

@RequestMapping

Spring MVC 通过 @RequestMapping 注解将 URL 请求与业务⽅法进⾏映射,在控制器的类定义处以及

⽅法定义处都可以添加 @RequestMapping ,在类定义处添加相当于多了⼀层访问路径。

package com.southwind.controller
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello")
public class HelloHandler {@RequestMapping("/index")public String index(){System.out.println("接收到了请求");//返回逻辑视图return "index";}
}

@RequestMapping 常⽤参数

1.value:指定 URL 请求的实际地址,是 @RequestMapping 的默认值

@RequestMapping(value="/index")
public String index(){System.out.println("接收到了请求");//返回逻辑视图return "index";
}

2.method:指定请求的 method 类型,包括 GET、POST、PUT、DELETE 等。

@RequestMapping(value = "/index",method = RequestMethod.POST)
public String index(){System.out.println("接收到了请求");//返回逻辑视图return "index";
}

3.params:指定 request 请求中必须包含的参数值,若不包含,⽆法调⽤该⽅法。

@RequestMapping(value = "/index",method = RequestMethod.POST,params ={"id=1","name=tom"})
public String index(){System.out.println("接收到了请求");//返回逻辑视图return "index";
}

上述代码表示 request 请求中必须包含 name 和 id 两个参数,并且 id 的值必须为 1,name 的值必须

为 tom,才可调⽤,否则抛出 400 异常。

5.1参数绑定

params 是对 URL 请求参数进⾏限制,不满⾜条件的 URL ⽆法访问该⽅法,需要在业务⽅法中获取

URL 的参数值。

1、在业务⽅法定义时声明参数列表。

2、给参数列表添加 @RequestParam 注解进⾏绑定

@RequestMapping(value = "/index",method = RequestMethod.POST)
public String index(@RequestParam("num") Integer id,@RequestParam("str") String name){System.out.println("接收到了请求,参数是:id="+id+",name="+name);//返回逻辑视图return "index";
}

Spring MVC 可以⾃动完成数据类型转换,该⼯作是由 HandlerAdapter 来完成的。

5.2 Spring MVC 也⽀持 RESTful ⻛格的 URL 参数获取

传统的 URL:localhost:8080/hello/index?id=1&name=tom

RESTful URL:localhost:8080/hello/index/1/tom

@RequestMapping("/restful/{id}/{name}")
public String restful(@PathVariable("id") Integer id,@PathVariable("name") String name){System.out.println(id+"-"+name);return "index";
}

将参数列表的注解改为 @PathVariable("id") 即可。

5.3 映射 Cookie
@RequestMapping("/cookie")
public String getCookie(@CookieValue("JSESSIONID") String sessionId){System.out.println(sessionId);return "index";
}
5.4 使⽤ POJO 绑定参数

Spring MVC 会根据请求参数名和 POJO 属性名进⾏匹配,⾃动为该对象填充属性值,并且⽀持属性级

联。

如果出现中⽂乱码,可以通过配置过滤器来解决,在 web.xml 中添加配置即可。

<filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><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>

相关文章:

  • 电镀机的阳极是什么材质?
  • ann算法的种类有哪些,之间的区别,各自的适用场景
  • H_Prj04 8088单板机的IO(LED)
  • AI工程师的武器库:核心技术与实战案例
  • RAG系统中的Re-ranking引擎选择指南
  • 华为云Flexus+DeepSeek征文|基于华为云MaaS平台的DeepSeek大模型与云服务单机+CCE高可用部署实践
  • vue3+elementplus表格表头加图标及文字提示
  • 鸿蒙任务项设置案例实战
  • JMeter函数整理
  • 互斥锁与消息队列的架构哲学
  • 解决SQL Server SQL语句性能问题(9)——SQL语句改写(1)
  • 网络爬虫一课一得
  • [5-02-04].第01节:Jmeter环境搭建:
  • C++--vector的使用及其模拟实现
  • 线夹金具测温在线监测装置:电力设备安全运行的“隐形卫士”
  • 通过paramiko 远程在windows机器上启动conda环境并执行python脚本
  • 定制化5G专网服务,助力企业数字化转型
  • 谷歌浏览器油猴插件安装方法
  • 从npm库 Vue 组件到独立SDK:打包与 CDN 引入的最佳实践
  • 2025年Splunk的替代方案:更智能的安全选择
  • 用psd做的买书网站/竞价代运营公司
  • 济南润滑油网站制作/网站建设公司好
  • 广州网站建设 易点/虚拟主机搭建网站
  • 网站建设职能/手机seo快速排名
  • 安陆做网站公司/中山疫情最新消息
  • 建筑类企业网站模板下载/sem是什么意思