SpringMVC获得请求数据

本文详细介绍了SpringMVC如何接收不同类型的参数,包括基本数据类型、POJO对象、数组和集合。通过代码实例展示了控制器中如何处理这些参数,以及在不同情况下SpringMVC的自动注入机制。同时,还讨论了使用Ajax提交时如何直接接收集合数据,避免使用POJO包装。最后,文章提及了静态资源的访问配置,确保jQuery等库的正常加载。

SpringMVC可以接收如下类型的参数:

1基本数据类型

2 POJO类型参数(就是普通的JavaBean对象)

3 数组类型的参数

4 集合类型参数

服务器端获得请求参数,有时还要进行数据的封装。

一下是代码实例讲解和解析:

获得基本数据类型的参数:

Controller中的业务方法的参数名称要求与请求参数的name一致,参数值会自动映射。

例:我要获得下面的参数username,和age

在Controller中业务方法的参数就为:

首先@RequestMapping()注解肯定是要的,因为你要有地址才能访问啊。然后@ResponseBody也要,这个注解的作用就是表示不是跳转页面。然后方法的返回值为void也就代表无回写数据。然后里面的形参的名字要与请求参数的名字一样。

运行效果:

 

访问成功,在页面上没有报错,并且控制台也打印了。

如果直接访问页面不带参数就会报错。

 我们肯定会想,为什么上次的那个数据回写方法里面的形参都可以被SpringMVC自动注入。在访问的时候不带参数也可以访问。这是因为SpringMVC能进行大部分类的自动注入。但是对于基本数据类型,SpringMVC是无法自动注入的。对于大多数的类,它都可以自行注入。这时候我们怎么区分它到底是回写数据还是,请求参数呢?首先我们可以直观的知道,数据回写方法参数的是有返回值的,而请求参数是没有返回值的。

2获得POJO参数。

在Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。(意思就是一个类的属性名和请求参数一致,个数一样多,名字也是一样的)

User类:

请求参数:

运行效果:

控制台:

3 获得数组类型的参数:

在Controller中的业务方法中的形参数组名称要与请求参数的name一致。参数值会自动映射匹配

请求参数:

运行效果:

控制台:

4 获得集合类型参数

集合的话比较特殊,原始方法我们需要用将集合参数包装到一个POJO(就是封装一个类)中去 

这样的话跟前面那个获取POJO有一点相似。

首先我们先把集合包装到POJO中去

 

这个集合里面存的是user对象,user对象里面还有username,age属性。

业务方法:

 这里就有点像获取POJO参数,请求参数要和类中的属性名相同。

在这里,因为集合数据不好从get方法中获取,我们就写一个表单来进行提交

 请求参数:

运行效果:

控制台:

获取集合请求参数:

当使用ajax提交时,可以指定contextType为json形式,那么在方法参数位置使用注解@RequestBody可以直接接收集合数据而无需POJO进行包装。

所以我们这要利用ajax来提交,那么我们首先就在webapp里面创一个ajax页面,再创建一个js文件夹,导入jquery

 

先创建一个集合,然后在集合里面加入请求参数,然后再通过ajax去提交。

然后在Controller层书写代码,直接接收集合里面的东西,就不需要去写一个POJO对象了

记得要用注解@RequestBody注解把数据封装到集合到中去

启动tomcat服务器但是刚开始的时候会报错,无法加载jquery。然后我们就需要在spring-mvc的配置文件中写:

 

然后再运行。就没有错误了。(如果实在还有错,就手动刷新一下maven项目就可以了)

然后运行效果:

控制台:

 对上面的方法进行讲解:(静态资源的访问)

刚开始的时候我们找不到jquery文件的原因:

由于前端控制器会自动匹配虚拟路径把jQuery当成了像@RequestMapping那种,但是我们根本就没有jQuery的路径所以就找不到,这时候我们就要在spirngMVC文件中去创建这个资源的访问:

mapping代表映射地址,表示去哪里找。

location代表的时那个目录下的资源是对外开放的。

因为要去记路径所以感觉有点麻烦,然后我们可以写

这个是交由tomcat服务器来给你寻找静态资源。

 

 

 

 

 

 

 

 

 

 

 

 

SpringMVC请求流程是一个复杂且有序的过程,涉及多个组件的协同工作。以下是SpringMVC请求流程的详细介绍: 1. **用户发送请求**:用户向服务器发送请求,该请求首先到达前端控制器`DispatcherServlet`(中央控制器) [^2]。 2. **调用处理器映射器**:`DispatcherServlet`收到请求后,会调用`HandlerMapping`(处理映射器)。处理器映射器的作用是根据请求找到具体的处理器,可以根据XML配置、注解等方式进行查找。它会生成处理器对象及处理器拦截器(如果有则生成),并将它们一并返回给`DispatcherServlet` [^2]。 3. **调用处理器适配器**:`DispatcherServlet`接着调用`HandlerAdapter`处理器适配器,`HandlerAdapter`的任务是经过适配后调用具体的处理器(`Controller`,也叫后端控制器) [^2]。 4. **处理器执行并返回结果**:由`Controller`执行具体的业务逻辑,完成后返回`ModelAndView`对象,该对象包含了模型数据和视图信息。`HandlerAdapter`将`Controller`的执行结果`ModelAndView`返回给`DispatcherServlet` [^2]。 5. **请求视图解析**:`DispatcherServlet`将`ModelAndView`传递给`ViewReslover`视图解析器,请求视图解析。`ViewReslover`会根据`ModelAndView`中的视图信息解析出具体的`View` [^2]。 6. **视图渲染与响应**:`DispatcherServlet`根据解析得到的`View`进行视图渲染,即将模型数据填充至视图中。最后,`DispatcherServlet`响应用户,将渲染好的视图返回给用户 [^2]。 在请求处理过程中,还涉及到一些其他的细节: - **请求入口**:请求会经过一系列过滤器,当执行到最后一个过滤器链时,会执行`Servlet.service`方法。在SpringMVC中,`org.springframework.web.servlet.FrameworkServlet`的`service`方法会对请求进行处理,对于`PATCH`请求或未知请求,会调用`processRequest`方法;对于其他常规请求,最后还是会调用`processRequest`方法 [^3] [^4]。 以下是SpringMVC请求流程的代码示例,展示了`service`方法的部分逻辑: ```java protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpMethod httpMethod = HttpMethod.resolve(request.getMethod()); if (httpMethod == HttpMethod.PATCH || httpMethod == null) { // servlet规范并不支持PATCH请求spring mvc对此进行了实现 processRequest(request, response); } else { // 最后还是会调用processRequest() super.service(request, response); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值