首页 > 其他分享 >SpringMVC

SpringMVC

时间:2023-07-25 09:47:16浏览次数:33  
标签:请求 SpringMVC request value 参数 视图 test

概述

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。

SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转。

执行流程

图示流程

详细流程

① 用户发送请求至前端控制器DispatcherServlet。

② DispatcherServlet收到请求调用HandlerMapping处理器映射器。

③ 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果

有则生成)一并返回给DispatcherServlet。

④ DispatcherServlet调用HandlerAdapter处理器适配器。

⑤ HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

⑥ Controller执行完成返回ModelAndView。

⑦ HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

⑧ DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

⑨ ViewReslover解析后返回具体View。

⑩ DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。

相关组件

DispatcherServlet

前端控制器。用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由

它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。

HandlerMapping

处理器映射器:HandlerMapping。HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

HandlerAdapter

处理器适配器:HandlerAdapter。通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

Handler

处理器:Handler。它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由

Handler 对具体的用户请求进行处理。

View Resolver

视图解析器:View Resolver。View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

View

视图:View。SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最

常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

基础知识

注解

@RequestMapping

作用 请求映射,将URL请求与JAVA方法绑定。
位置 使用在类上,请求URL的第一级访问目录。若未定义,则默认访问web的根目录
使用在方法上,请求URI的第二级访问目录。与定义在类上的@ReqquestMapping标注的一级目录一起组成访问虚拟路径
参数 作用
value 指定请求参数名
method 指定http请求方式
params 用于指定限制请求参数的条件

代码示例

//请求URL:http://localhost:8080/request/test1?username=caofalin
@RequestMapping(value="/request",method = RequestMethod.GET)
public class requestController {
    
    @RequestMapping(value="/test1")
    @ResponseBody
    public void test1(String username) throws IOException {
        System.out.println(username);
    }
}

@RequestParam

作用 参数绑定。当请求URL的参数名称与业务方法的形参名称不一致时,将请求URL中的参数名与业务方法的形参进行绑定
位置 使用在方法的形参上
参数 作用
value 指定请求URL中的请求参数名
required 此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错
defaultValue 当没有指定请求参数时,则使用指定的默认值赋值

@PathVariable

作用 RESTful风格请求参数绑定。将请求URL中的参数名与业务方法的形参进行绑定
位置 使用在方法的形参上
参数 作用
value 指定请求URL中的请求参数名
required 此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错
defaultValue 当没有指定请求参数时,则使用指定的默认值赋值

代码示例

//请求URL:http://localhost:8080/request/test/caofalin
@RequestMapping("/request")
public class requestController {

@RequestMapping(value="/test/{name}")
@ResponseBody
public void test(@PathVariable(value="name",required=false,defaultValue="caofalin") String username) throws IOException {
    System.out.println(username);
}
}

@RequestHeader

作用 获取HTTP请求数据包的HttpHeader信息
位置 使用在方法的形参上
参数 作用
value 设置需要获取的http请求头信息的key值
required 此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错

代码示例

//请求URL:http://localhost:8080/request/test
@RequestMapping("/request")
public class requestController {

@RequestMapping(value="/test")
@ResponseBody
public void test(@RequestHeader(value = "User-Agent",required = false) String user_agent) throws IOException {
    System.out.println(user_agent);
}
}

@CookieValue

作用 获得指定Cookie的值
位置 使用在方法的形参上
参数 作用
value 指定cookie的名称
required 此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错

代码示例

//请求URL:http://localhost:8080/request/test
@RequestMapping("/request")
public class requestController {

@RequestMapping(value="/test")
@ResponseBody
public void test(@CookieValue(value = "JSESSIONID") String jsessionId) throws IOException {
    System.out.println(jsessionId);
}

@ResponseBody

作用 指定数据响应的方式为非页面跳转,根据业务方法的返回值类型返回数据
位置 使用在方法上

代码示例

//请求URL:http://localhost:8080/request/test
@RequestMapping(value="/request",method = RequestMethod.GET)
public class requestController {
    
    @RequestMapping(value="/test")
    @ResponseBody
    public String test()  {
        return "return string";//直接返回字符串
    }
}

数据响应

数据响应方式

1) 页面跳转

直接返回字符串

通过ModelAndView对象返回

2) 回写数据

直接返回字符串

返回对象或集合

响应数据的处理

字符串转json格式

数据请求

接收参数类型

基本类型参数

POJO类型参数

数组类型参数

集合类型参数

RESTful风格

中文数据乱码

当post请求时,数据会出现乱码,需要在web.xml中设置一个过滤器来进行编码的过滤

<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

自定义数据类型转换

自定义类型转换器

SpringMVC 默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成int型进行参数设置。

• 但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自

定义转换器。

自定义类型转换器的开发步骤:

① 定义转换器类实现Converter接口

② 在配置文件中声明转换器

③ 在中引用转换器

获得Servlet相关API

SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入,常用的对象如下:

HttpServletRequest

HttpServletResponse

HttpSession

代码示例

//请求URL:http://localhost:8080/request/test
@RequestMapping("/request")
public class requestController {

@RequestMapping(value="/test")
@ResponseBody
public void test(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
    System.out.println(request);
    System.out.println(response);
    System.out.println(session);
}
}

文件上传

  1. 文件上传客户端三要素

表单项type=“file”

表单的提交方式是post

表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

单文件上传步骤

① 导入fileupload和io坐标

② 配置文件上传解析器

③ 编写文件上传代码

基于配置文件开发

实现思路(待完善)

① 导入SpringMVC相关坐标

② 配置SpringMVC核心控制器DispathcerServlet

③ 创建Controller类和视图页面

④ 使用注解配置Controller类中业务方法的映射地址

⑤ 配置SpringMVC核心文件 spring-mvc.xml

⑥ 客户端发起请求测试

基于注解开发

实现思路(待完善)

拦截器

异常处理

简单异常处理器

SimpleMappingExceptionResolver

自定义异常处理器

标签:请求,SpringMVC,request,value,参数,视图,test
From: https://www.cnblogs.com/pacemrc/p/17578188.html

相关文章

  • SpringMVC
    SpringMVC什么是MVC模型(dao,service)、视图(jsp)、控制器(servlet)假设:你的项目架构,是设计好的还是演进的?演进的回顾ServletMVVM:MVVMViewModel:双向绑定什么是SpringMVCSpringMVC是SpringFramework的一部分,是基于Java实现MVC的轻量级Web框架官方文档:https:......
  • SpringMvc介绍。
    目录1、SpringMvc概述1、基本介绍2、工作流程 3、bean加载控制 二、请求1、请求映射路径2、请求方式3、请求参数4、请求参数(传递json数据)5、日期类型参数传递三、响应四、REST风格1、REST简介2、RESTful入门案例3、RESTful快速开发五、拦截器1、拦截器概念2、拦截器开发3、拦截器......
  • SpringMVC之类型转换Converter
    1.1     目录1.1      目录1.2      前言1.3      Converter接口1.4      ConversionService接口1.5      ConverterFactory接口1.6      GenericConverter接口1.6.1     概述1.6.2     ConditionalGenericConverter 接口 1.......
  • 第六章 注解式控制器详解 SpringMVC强大的数据绑定(2)
    6.6.2、@RequestParam绑定单个请求参数值@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。1.publicStringrequestparam1(@RequestParam请求中包含username参数(如/requestparam1?username=zhang),则自动传入。 此处要特别注意:右击项目,选择“属性”,打开“属性对......
  • 《Spring6核心源码解析》已完结,涵盖IOC容器、AOP切面、AOT预编译、SpringMVC,面试杠杠
    作者:冰河星球:http://m6z.cn/6aeFbs博客:https://binghe.gitcode.host文章汇总:https://binghe.gitcode.host/md/all/all.html源码地址:https://github.com/binghe001/spring-annotation-book沉淀,成长,突破,帮助他人,成就自我。大家好,我是冰河~~提起Spring,可以这么说,Spring几乎......
  • JAVA面试之SpringMVC
    一、工作流程流程 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet调用Han......
  • Spring + SpringMVC + SpringBoot + MyBatis 相关注解
    创建对象的:@Controller:放在类的上面,创建控制器对象,注入到容器中@RestController:放在类的上面,创建控制器对象,注入到容器中。作用:复合注解是@Controller,@ResponseBody,使用这个注解类的,里面的控制器方法的返回值都是数据@Service:放......
  • springMvc——拦截器
    拦截器概念:拦截器是一种动态的拦截方法调用的机制,在springMvc中动态拦截控制器方法的执行作用:  1.在指定的方法调用前后执行预先设定的代码  2.阻止原始方法的执行拦截器于过滤器的区别:......
  • SSM - SpringMVC - Syntax
    1.环境搭建导入包:junit,servlet-api,jsp-api,jstl,spring-context(5.3.29)早期版本回顾@ https://docs.spring.io/spring-framework/docs/4.3.24.RELEASE/spring-framework-reference/ ,里面介绍了很多基本和基础概念所有版本下载@ https://repo.spring.io/release/......
  • SpringMVC文件上传
    相关依赖使用SpringMVC提供的文件上传需要在项目中加入两个jar包,对应的maven的依赖分别是:commons-io和commons-fileupload<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dep......