网站建设方向课程苏州网站建设选苏州梦易行
news/
2025/9/24 8:46:43/
文章来源:
网站建设方向课程,苏州网站建设选苏州梦易行,罗湖高端网站建设费用,wordpress 扒站教程文章目录 前言一、SpringMvc1、简介2、核心组件和调用流程2.1 涉及组件的理解 3、小案例快速体验3.1场景需求3.1.1 导入依赖3.1.2 controller声明3.1.3 核心配置类3.1.4 环境搭建3.1.6 配置tomcat3.1.7 测试 二、SpringMvc 接收参数1.路径设置注解2、param接收参数四种类型2.1 … 文章目录 前言一、SpringMvc1、简介2、核心组件和调用流程2.1 涉及组件的理解 3、小案例快速体验3.1场景需求3.1.1 导入依赖3.1.2 controller声明3.1.3 核心配置类3.1.4 环境搭建3.1.6 配置tomcat3.1.7 测试 二、SpringMvc 接收参数1.路径设置注解2、param接收参数四种类型2.1 直接接收值2.2 RequetParam2.3 一名多值2.4 实体类型 3、路径参数接收4、json格式接收参数5、EnableWebMvc 注解6、接收请求头和cookie6.1 接收请求头6.2 接收Cookie 7、原生API的获取8、共享域对象操作8.1 属性共享域回顾 接收参数总结 前言
再此之前我已经学习也发过了关系mavenSpringFramework以及Mybatis的文章了 现在我们开始来学习关于SpringMvc这个控制层框架。
一、SpringMvc
1、简介
Spring Web MVC是基于Servlet API构建的原始Web框架从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称 spring-webmvc 但它通常被称为“Spring MVC”。 在没有SpringMvc该框架之前我们都是使用servlet以及过滤器等来接收前端信息或者返回给用户信息Springmvc可以帮助我们 1. 简化前端参数接收( 形参列表 )2. 简化后端数据响应(返回值)这也是Springmvc最主要的两个功能。
2、核心组件和调用流程
Spring MVC与许多其他Web框架一样是围绕前端控制器模式设计的其中中央 Servlet DispatcherServlet 做整体请求处理调度
除了DispatcherServletSpringMVC还会提供其他特殊的组件协作完成请求处理和响应呈现。
2.1 涉及组件的理解
DispatcherServlet : SpringMVC提供我们需要使用web.xml配置使其生效它是整个流程处理的核心所有请求都经过它的处理和分发[ CEO ]HandlerMapping : SpringMVC提供我们需要进行IoC配置使其加入IoC容器方可生效它内部缓存handler(controller方法)和handler访问路径数据被DispatcherServlet调用用于查找路径对应的handler[秘书]HandlerAdapter : SpringMVC提供我们需要进行IoC配置使其加入IoC容器方可生效它可以处理请求参数和处理响应数据数据每次DispatcherServlet都是通过handlerAdapter间接调用handler他是handler和DispatcherServlet之间的适配器[经理]Handler : handler又称处理器他是Controller类内部的方法简称是由我们自己定义用来接收参数向后调用业务最终返回响应结果[打工人]ViewResovler : SpringMVC提供我们需要进行IoC配置使其加入IoC容器方可生效视图解析器主要作用简化模版视图页面查找的但是需要注意前后端分离项目后端只返回JSON数据不返回页面那就不需要视图解析器所以视图解析器相对其他的组件不是必须的[财务]
自己的理解 在我们前端访问页面时需要访问一个地址该访问页面会调用我们java中的一个方法HandlerHandlerMapping 相当于将我们的访问地址与该Handler 映射访问所有地址都会先经过DispatcherservletCEO去查HandlerMapping秘书有没有该地址对应的方法如果有接着HandlerAdapter经理服务它是handler与dispatchersevlet的一个适配器用来将我们的request内容变为我们handler可以直接接收的字符同时也可以将handler返回的json等变回浏览器支持的格式ViewResovler财务可以简化模板视图页面的查找可以添加一个统一的前缀与后缀比如前缀为 cky/ 后缀为.html 如果我们直接返回 login 就会自动拼接成cky/login.html 会自动去返回该模板页面。ViewResovler并不是必须的如果后端不返回页面就不需要视图解析器。
3、小案例快速体验
3.1场景需求
编写handler方法请求响应一个输出。
3.1.1 导入依赖
propertiesspring.version6.0.6/spring.versionservlet.api9.1.0/servlet.apimaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding
/propertiesdependencies!-- springioc相关依赖 --dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependency!-- web相关依赖 --!-- 在 pom.xml 中引入 Jakarta EE Web API 的依赖 --!--在 Spring Web MVC 6 中Servlet API 迁移到了 Jakarta EE API因此在配置 DispatcherServlet 时需要使用Jakarta EE 提供的相应类库和命名空间。错误信息 “‘org.springframework.web.servlet.DispatcherServlet’is not assignable to ‘javax.servlet.Servlet,jakarta.servlet.Servlet’” 表明你使用了旧版本的Servlet API没有更新到 Jakarta EE 规范。--dependencygroupIdjakarta.platform/groupIdartifactIdjakarta.jakartaee-web-api/artifactIdversion${servlet.api}/versionscopeprovided/scope/dependency!-- springwebmvc相关依赖 --dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion${spring.version}/version/dependency/dependencies3.1.2 controller声明
Controller
public class HelloController {//handlers/*** handler就是controller内部的具体方法* RequestMapping(/springmvc/hello) 就是用来向handlerMapping中注册的方法注解!* ResponseBody 代表向浏览器直接返回数据!*/RequestMapping(/springmvc/hello)ResponseBodypublic String hello(){System.out.println(HelloController.hello);return hello springmvc!!;}
}
3.1.3 核心配置类
声明springmvc涉及组件信息的配置类
//TODO: SpringMVC对应组件的配置类 [声明SpringMVC需要的组件信息]//TODO: 导入handlerMapping和handlerAdapter的三种方式//1.自动导入handlerMapping和handlerAdapter [推荐]//2.可以不添加,springmvc会检查是否配置handlerMapping和handlerAdapter,没有配置默认加载//3.使用Bean方式配置handlerMapper和handlerAdapter
EnableWebMvc
Configuration
ComponentScan(basePackages com.atguigu.controller) //TODO: 进行controller扫
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {Beanpublic HandlerMapping handlerMapping(){return new RequestMappingHandlerMapping();}Beanpublic HandlerAdapter handlerAdapter(){return new RequestMappingHandlerAdapter();}}
3.1.4 环境搭建
对于使用基于 Java 的 Spring 配置的应用程序建议这样做如以下示例所示
//TODO: SpringMVC提供的接口,是替代web.xml的方案,更方便实现完全注解方式ssm处理!
//TODO: Springmvc框架会自动检查当前类的实现类,会自动加载 getRootConfigClasses / getServletConfigClasses 提供的配置类
//TODO: getServletMappings 返回的地址 设置DispatherServlet对应处理的地址
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 指定service / mapper层的配置类*/Overrideprotected Class?[] getRootConfigClasses() {return null;}/*** 指定springmvc的配置类* return*/Overrideprotected Class?[] getServletConfigClasses() {return new Class?[] { SpringMvcConfig.class };}/*** 设置dispatcherServlet的处理路径!* 一般情况下为 / 代表处理所有请求!*/Overrideprotected String[] getServletMappings() {return new String[] { / };}
}3.1.6 配置tomcat 注意选择 Tomcat Server 之后又出现了Tomcat 8080 in use的问题 解决办法点击此处
3.1.7 测试 二、SpringMvc 接收参数
1.路径设置注解
package com.cky.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
Controller //组件
ResponseBody //直接返回给浏览器信息
RestController //ControllerResponseBody
RequestMapping(/user)
public class UserContorller {RequestMapping //什么都不加 表示直接使用类方法上的访问地址public String index(){return null;}GetMapping(/login)RequestMapping(value /login,method RequestMethod.GET)public String login(){return null;}RequestMapping(/register)public String register(){return null;}
}
注解
/*** RequestMapping 地址映射* RequestMapping 对/的要求不高 比如/user/login 也可以写成 user/login 或者/user/login/* WebSevrlet 开头就必须加/* 1、精准地址可以1个也可以多个 多个的时候 用{地址1地址2...}* 2、模糊地址 * * 表示一层模糊 **表示任意层模糊* 比如 user/* 》user/a user/b 等* user/** 》 user/a/b/... user 等* 3、类上和方法上添加ReqquestMapping 的区别* 类上 可以不加 加的话 表示一个通用的地址* 方法上必须加 表示精准的访问地址* 如果类上没有 则直接使用方法上的* 如果类上有 访问地址就是类上方法上的* 4、请求方式指定* get、post、put、delete* 客户端-http-ds-handler* 默认不加请求方式情况 是任何访问都可以* 请求方式指定 比如 RequestMapping(value /user/login,method RequestMethod.POST)* 可以多个 RequestMapping(value /user/login,method {RequestMethod.POST,RequestMethod.GET})* 如果请求方式不正确会返回405异常* 5、注解进阶 这种只能用在方法上* get GetMapping(/login)》 RequestMapping(value /login,method RequestMethod.GET)* post PostMapping(/login)* put PutMapping(/login)* delete DeleteMapping(/login)*/2、param接收参数四种类型
2.1 直接接收值
直接接值 可传可不传 不传不会报错 传值必须与形参名相同 对于这种不用返回视图函数的 记得加上 ResponseBody //表示我们直接向浏览器返回数据 否则浏览器会报错 RequestMapping(emp/login)public String login(String name,Integer age){System.out.println(name:name,age:age);return name:name,age:age ;}2.2 RequetParam
//RequestParamname/value“重置参数名”requiredtrue/false 【默认为true,当配置为false时我们可以配置默认值】defaultValue
// 注解 默认是必须传值 当设置为false时 可以设置默认值
RequestMapping(emp/register)public String register(RequestParam(value user,required false,defaultValue root) String username, int pwd){System.out.println(name:username,pwd:pwd);return name:username,pwd:pwd ;
}2.3 一名多值
参数上必须要加上RequestParam不然就会只将一个值 直接传给列表接收 //一key 多值RequestMapping(emp/test)public String test(RequestParam ListString hbs){System.out.println(hbs);return ok;}2.4 实体类型
首先要有实体类 有get和set方法
package com.cky.pojo;import lombok.Data;Data
public class Employee {private String name;private int age;
}
//实体类接收RequestMapping(emp)public String employee(Employee employee){System.out.println(employee);return employee.getName();}}性来传值实体类属性可以直接再实体类上设置默认值。3、路径参数接收
比如 user/root/123456 root 和123456 是我们要接收的参数 在这里 我们就要设置动态路径参数 {key}代表这里是路径参数 参数上 要加PathVariable 注解 证明接收的是路径参数 否则会按照Param参数来接值 该注解 也可以重置参数名 以及可以确定是否必须传参数 以及默认值 传入时必须按照实体类属 //路径参数接收RequestMapping(path/{name}/{pwd})public String path(PathVariable String name,PathVariable Integer pwd){System.out.println(name:name,pwd:pwd);return name:name,pwd:pwd;4、json格式接收参数
前端传递 JSON 数据时Spring MVC 框架可以使用 RequestBody 注解来将 JSON 数据转换为 Java 对象。RequestBody 注解表示当前方法参数的值应该从请求体中获取并且需要指定 value 属性来指示请求体应该映射到哪个参数上。 其使用方式和示例代码如下
1、前端发送 JSON 数据的示例使用postman测试
{
name: 张三,
age: 18,
gender: 男
}2、定义一个用于接收 JSON 数据的 Java 类例如
Data
public class Person {
private String name;
private int age;
private String gender;
// getter 和 setter 略
}3、创建一个handler 在控制器中使用 RequestBody 注解来接收 JSON 数据并将其转换为 Java 对象例如 package com.cky.controller;import com.cky.pojo.Person;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.ResponseBody;ControllerResponseBodypublic class PersonController {
PostMapping(/json/data)
//RequestBody 代表我们接收的是信息体
//java并不接收 json的数据格式 我们需要配置
public String test(RequestBody Person person){System.out.println(person);return person.getName()person.getGender();
}} 4、配置json转换器 java原生并不接收json数据我们需要进行配置 让Handleradapter 可以进行json转换 首先导入json依赖
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.15.0/version
/dependency接着要在配置类上加上**EnableWebMvc**注解。效果等同于在 XML 配置中可以使用 mvc:annotation-driven 元素我们来解析mvc:annotation-driven对应的解析工作 EnableWebMvc注解表示 让HandlerAdapter配置了json转化器
5、结果 5、EnableWebMvc 注解
在配置类上添加上 该注解效果等同于在 XML 配置中可以使用 mvc:annotation-driven 元素 使用该注解 就等同于同时添加上了 我们所谓的经理Handleradapter和秘书Handlermapping同时为经理添加上了json转换器写上该注解之后其实配置类中就不用导入第三方经理和秘书的类。 可省略 Beanpublic HandlerAdapter HandlerMapping(){return new RequestMappingHandlerAdapter();}Beanpublic HandlerMapping handlerMapping(){return new RequestMappingHandlerMapping();}6、接收请求头和cookie
6.1 接收请求头
接收请求头 要加上注解 RequestHeader(xxx) xxx代表我们要接收请求头的内容 Controller
ResponseBody
public class HeaderContorller {RequestMapping(header)public String cookie(RequestHeader(Host) String host){return host;}
}6.2 接收Cookie
可以使用 CookieValue 注释将 HTTP Cookie 的值绑定到控制器中的方法参数。 RequestMapping(save)public String save(HttpServletResponse httpServletResponse){Cookie cookienew Cookie(username,root);httpServletResponse.addCookie(cookie);//保存了一个cookie 名为username 值为rootreturn ok;}RequestMapping(cookie)//通过CookieValue 来获取相应cookie值的内容public String cookie(CookieValue(username) String name){return name;}7、原生API的获取
比如java的一些原生api我们可以在形参列表中自动获取 比如 Autowired //直接注入 ioc容器获取该类的组件对象 装配到ioc容器中private ServletContext servletContext;public String apiget(HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest, HttpSession httpSession){//接下来要进行什么操作 直接使用即可httpSession.getServletContext();httpServletRequest.getServletContext();return null;}/**对于servletContext 我们如何获取呢* 方案1: 使用request/session获取* httpSession.getServletContext();* httpServletRequest.getServletContext();* 方案2* 直接全局注入*/springmvc会在初始化容器的时候讲servletContext对象存储到ioc容器中
8、共享域对象操作
8.1 属性共享域回顾
在 JavaWeb 中共享域指的是在 Servlet 中存储数据以便在同一 Web 应用程序的多个组件中进行共享和访问。常见的共享域有四种ServletContext、HttpSession、HttpServletRequest、PageContext。
ServletContext 共享域ServletContext 对象可以在整个 Web 应用程序中共享数据是最大的共享域。一般可以用于保存整个 Web 应用程序的全局配置信息以及所有用户都共享的数据。在 ServletContext 中保存的数据是线程安全的。HttpSession 共享域HttpSession 对象可以在同一用户发出的多个请求之间共享数据但只能在同一个会话中使用。比如可以将用户登录状态保存在 HttpSession 中让用户在多个页面间保持登录状态。HttpServletRequest 共享域HttpServletRequest 对象可以在同一个请求的多个处理器方法之间共享数据。比如可以将请求的参数和属性存储在 HttpServletRequest 中让处理器方法之间可以访问这些数据。一次请求多次转发只有在服务器端跳转才有用PageContext 共享域PageContext 对象是在 JSP 页面Servlet 创建时自动创建的。它可以在 JSP 的各个作用域中共享数据包括pageScope、requestScope、sessionScope、applicationScope 等作用域。 共享域的作用是提供了方便实用的方式在同一 Web 应用程序的多个组件之间传递数据并且可以将数据保存在不同的共享域中根据需要进行选择和使用。 setAttribute getAttribute
接收参数总结
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915394.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!