您的位置:首页 > 新闻 > 资讯 > SpringMVC

SpringMVC

2024/10/16 17:50:25 来源:https://blog.csdn.net/m0_68844946/article/details/141742142  浏览:    关键词:SpringMVC

SpringMvc概述

Spring MVC就是一个MVC框架。

Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。从这样一个角度来说,Spring MVC和Struts、Struts2非常类似。Spring MVC的设计是围绕DispatcherServlet展开的,DispatcherServlet负责将请求派发到特定的handler。通过可配置的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图。

pring3.x中定义一个控制器类,必须以@Controller注解标记。当控制器类接收到一个请求时,它会在自己内部寻找一个合适的处理方法来处理请求。使用@RequestMapping注解将方法映射到一些请求上,以便让该方法处理那些请求。这种方法就像一般的类中的方法,方法名参数列表和返回值并不像Struts2之类的框架有很强的限制。方法参数列表具体以及返回值具体都有哪些,这里先不细说。这篇博客的目的在于简单介绍如何快速上手使用Spring MVC框架。

控制器在选择好适合处理请求的方法时,传入收到的请求(根据方法参数类型,可能以不同的类型传入),并且调用该方法中的逻辑来进行处理(也可以是调用Service来真正处理)。方法逻辑可能也会在参数中添加或者删除数据。处理方法处理完之后,会委派给一个视图,由该视图来处理方法的返回值。处理程序的返回值并不代表视图的具体实现,可以只是String类型,代表视图名,甚至是void(这时候Spring MVC可以根据方法名或者控制器名找默认视图)。也不需要担心返回值只是视图名称的话,视图拿不到要显示的数据。因为方法参数对于视图来说也是可以拿到的。比如说,如果处理方法以Map为参数,那么这个Map对于视图也是可以拿到的。

返回的视图名称会返回给DispatcherServlet,它会根据一个视图解析器将视图名称解析为一个具体的视图实现。这里说到的视图解析器是一个实现了ViewResolver借口的Bean,它的任务就是返回一个视图的具体实现(HTML、JSP、PDF等等).

‌Spring MVC的常用注解包括以下几类‌:

‌控制器注解‌

@Controller‌:用于标识一个类为SpringMVC的控制器,处理HTTP请求并返回响应结果。‌

@RestController‌:标识一个类为Rest风格的控制器,所有方法默认返回JSON或XML格式的响应结果。‌

‌请求映射注解‌

@RequestMapping‌:用于映射Web请求,包括访问路径和参数。‌

@GetMapping‌、‌@PostMapping‌、‌@PutMapping‌、‌@DeleteMapping‌‌:根据请求类型使用不同的注解处理GET、POST、PUT、DELETE等请求。

‌依赖注入注解‌

@Resource‌:用于bean的注入,可以写在字段和setter方法上,支持ByName和ByType自动注入。‌

@Autowired‌:用于自动注入依赖,可以写在字段和setter方法上,支持byType和byName注入。‌

@Qualifier‌:与@Autowired一起使用,用于指定具体的Bean名称进行注入,解决多个匹配Bean的歧义问题。‌

‌其他常用注解‌

@PathVariable‌:用于将请求URL中的模板变量映射到功能处理方法的参数上。‌

@ResponseBody‌:支持将返回值放在response内,通常用于返回JSON数据。

@RequestBody‌:允许request的参数在request体中,而不是直接连接在地址后面。

访问自定义方式

方式一(注解方式):

@RequestMapping(“/映射路径”)

开启扫描注解

在配置文件中配置视图解析器

方式二(XML方式【不常用】):

去掉之前控制器实现的 Controller 接口,改为继承 多方法控制器(需要注意SpringMVC的

版本不能太高)

在配置文件中配置方法解析器

将方法解析器依赖注入到bean标签

RequestMapping详解

package com.hwq.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;@Controller
public class MappingController {/*一个路径映射一个方法*/@RequestMapping("/test1")public String test1() {System.out.println("方法访问");return "index";}/*多个路径映射一个方法*/@RequestMapping(value = {"/test2","/test21","/test22"})public String test2() {System.out.println("方法访问2");return "index";}/*多个路径映射一个方法     通配符方法*  0个或者多个?  有且只有一个*/@RequestMapping(value = {"/test3*"})public String test3() {System.out.println("方法访问3");return "index";}@RequestMapping(value = {"/test13?"})public String test31() {System.out.println("方法访问31");return "index";}@RequestMapping(value = {"/test3/*"})public String test32() {System.out.println("方法访问32");return "index";}@RequestMapping(value = {"/test13/?"})public String test33() {System.out.println("方法访问33");return "index";}/*限定方法的请求方式*/@RequestMapping(value = "/test4",method = RequestMethod.GET)public String test4() {System.out.println("方法访问4");return "index";}/*限定方法的请求方式*/@RequestMapping(value = "/test5",params = "username")public String test5(String username) {System.out.println("方法访问5"+username);return "index";}/*限定方法的请求方式*/@RequestMapping( value = "/test6")public String test6(@RequestParam(required = true,  defaultValue = "郝伟强", value = "名字")String username) {System.out.println("方法访问6"+username);return "index";}@RequestMapping( value = "/test7")public String test7(@RequestHeader("Cookie") String username) {System.out.println("方法访问7"+username);return "index";}
}

一个路径映射一个方法

多个路径映射一个方法

限定方法的请求方式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com