1. 注解式开发之annotation-driven解释

(1) mvc注解驱动在哪个文件中配置?

Springmvc.xml

(2) 配置mvc注解驱动使用哪个标签?

2. 注解式开发之视图解析器

(1) 视图解析器起到什么作用?

视图解析器可以根据服务方法的返回值,自动的拼接最终的viewName数据.

(2) 视图解析器如何使用?

3. 处理器方法常用参数

(1) 处理器方法的常用参数有哪些?

HttpServletRequest

HttpServletResponse

HttpSession

用于承载数据的Model、Map、ModelMap

请求中所携带的请求参数

(2) SpringMVC控制层常用的承载数据的对象有哪些?

Model、Map、ModelMap

4. 参数接收之逐个接收

(1) 在后端控制器中如何接收前台参数?

注意:逐个接收时,JSP页面中的name值和后台控制器中方法的形参名称必须一致才可以。如果两者不一致可以在形参前加注解@RequestPara(“请求参数名”)来指定该参数对应的是哪个请求参数。

将jsp页面中数据post提交给目标方法的相对路径

用户名:

年龄:

在后端控制器目标方法中将网页提交的数据作为参数传入,并通过ModelAndView对象添加对象,然后通过setViewName方法跳转到其他页面。

@RequestMapping("/hello")

public ModelAndView hello(String username,int age) {

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("username", username);

modelAndView.addObject("age", age);

modelAndView.setViewName("welcome");

return modelAndView;

}

(2) 在后端控制器中接收前台“age”参数,是否需要手动转换成int类型,为什么?

不需要,后端控制器自动帮我们做了类型转换。

5. 参数接收之对象整体接收

(1) 简述以对象形式整体接收参数的步骤?

1-创建实体类

2-在后台控制器的方法中传入实体类对象作为参数。JSP页面的请求数据都封存在了实体类对象中,根据对象的属性来操作请求数据。

(2) 以对象形式整体接收参数有什么要求?

实体类的属性名一定要和请求页面中标签的name属性值保持一致。

6. 参数接收之数组或集合接收参数

(1) 请简述用数组或集合接收参数的步骤?

在数据提交页面,多条数据输入的name属性值要保持一致:

Sing

Dance

Rap

Basketball

在后台控制器中,方法参数中以数组或者集合的方式接收请求数据:

@RequestMapping("/hello")

public void hello(String[] interest) {

for (String string : interest) {

System.out.println(string);

}

}

//集合接收参数

@RequestMapping("/hello")

public void hello1(@RequestParam List interest) {

for (String string : interest) {

System.out.println(string);

}

}

(2) 请描述数组和集合接收参数的区别?

使用结合接收请求参数需要借助@RequestParam来调整参数的格式,否则浏览器不能识别会报500错误。而集合方式则不用。

7. 参数接收之域属性参数接收及restful风格传参

(1) 域属性参数的接收需要注意什么?

域属性参数接收页面name的值命名规范是 属性对象名.属性对象的属性名

例如:伙伴名称:

(2) 什么是restful风格传参?

将参数以路径的方式传入,这种方式就叫做restful传参。

比如:

后端控制器:

//后端控制器

@Controller //该注解代表当前类交给spring容器管理

@Scope("prototype") //设置bean的作用域,默认是singleton单态模式。

@RequestMapping("/springmvc") //该注解起到限定范围的作用

public class MyController {

//restful风格传参

@RequestMapping("/{name}/{age}/hello")

public void hello1(@PathVariable String name,@PathVariable int age) {

System.out.println(name+age);

}

}

访问时路径:

http://localhost:8080/springmvc-09-receiveParameter-restful/springmvc/Lucas/12/hello

获取参数。控制台输出Lucas12

8. 参数接收之接收json

(1) 如何在后端控制器中接收前台传过来的Json字符串?

在后端控制器的方法参数前使用@RequestBody来获取请求体中的参数

例如:

//接收前台JSON字符串

@RequestMapping("/hello")

public void hello1(@RequestBody User user) {

System.out.println(user);

}

(2) 如何将页面中的Json对象转换成Json字符串?

JSON.stringify(data1)

9. 获取请求头中信息@RequestHeader

(1) 请求头中有哪些常用信息?

Host:主机信息

Cookie:cookie的jsessionid

(2) @RequestHeader该注解放到什么位置?

放在后台控制器方法的参数之前。

10. 处理器方法返回值类型String

(1) 处理器方法何时使用String作为返回值类型?

只跳转到视图资源,不附带数据的情况下,可以使用String作为返回值类型。

(2) 如果处理器方法返回值类型为String,默认情况访问该方法会如何跳转?

根据返回的字符串再结合springmvc.xml文件中配置的视图解析器完成跳转页面的路径解析,然后跳转到指定路径的页面。

如果返回的数据乱码,可以在方法注解@RequestMapping中添加produces属性来解决。

例如:@RequestMapping(value="/hello",produces="text/html;charset=utf-8")

11. 处理器方法无返回值void

(1) 如果处理器方法无返回值,那么能否进行资源跳转及传递数据,如何实现?

可以。通过ajax来实现。同时可以借助HttpServletResponse对象来存储数据。

(2) 何时处理器方法无返回值较合适?

页面局部刷新的时候无返回值比较合适。因为返回字符串相当于页面跳转,整个页面刷新,而局部刷新会节省资源,效率更高,用户体验也更高。

12. 处理器方法返回值类型Object

(1) 如何将处理器方法返回值返回到前台?

@ResponseBody //将当前方法的返回值放到响应体中,并且转换成json格式,调用的是jackson包里面的方法。

13. 请求转发与重定向

(1) 请描述请求转发与重定向区别?

请求转发:服务器内部的资源跳转,浏览器地址栏不变,是一次请求。

重定向:服务器在第一次请求进行重定向后会返回给浏览器访问另一个资源的响应,浏览器重新发送请求。地址栏会改变。是两次不同的请求。如果要进行数据的传递需要依赖session对象。

(2) 在javaEE中请求转发和重定向是如何实现的?

modelAndView.setViewName("welcome");和返回字符串路径的方式都是默认请求转发。

modelAndView.setViewName("redirect:/jsp/welcome.jsp");这种方式是重定向。重定向的视图页面需要借助param对象来获取地址栏的请求参数。

14. 文件上传

(1) 文件上传时,表单中添加了什么属性,具体值是什么?

enctype="multipart/form-data"

(2) 使用springMVC进行文件上传时,接收文件的参数类型是什么?

MultipartFile

15. 文件下载

(1) 该视频中后端控制器方法的返回值类型是什么?

ResponseEntity

(2) 文件下载时后端控制器中涉及哪些步骤?

@RequestMapping("/fileDownload")

public ResponseEntity download() throws IOException{

//下载指定文件

File file = new File("d:/忘了他.jpg");

FileInputStream fis = new FileInputStream(file);

//创建字节数组,并且设置数组大小为预估的文件字节数

byte[] body = new byte[fis.available()];

//将输入流中字符存储到缓存数组中

fis.read(body);

//获取下载显示的文件名,并解决中文乱码问题

String name = file.getName();

String downloadFileName = new String(name.getBytes("utf-8"),"ISO-8859-1");

//设置http响应头信息,并且通知浏览器以附件的形式进行下载。

HttpHeaders httpHeaders = new HttpHeaders();

httpHeaders.add("Content-Disposition", "attachment;filename="+downloadFileName);

//设置Http响应状态信息

HttpStatus status = HttpStatus.OK;

ResponseEntity responseEntity = new ResponseEntity<>(body, httpHeaders, status);

return responseEntity;

}

16. 自定义拦截器

(1) 如何自定义拦截器?

//自定义拦截器

public class FirstInterceptor implements HandlerInterceptor{

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception exception)

throws Exception {

//该方法执行时机,所有工作处理完成之后,响应给浏览器客户端之前执行

}

@Override

public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)

throws Exception {

//该方法执行时机,处理器方法执行之后执行

}

@Override

public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {

//该方法执行时机,处理器方法执行之前执行

System.out.println("拦截器preHandle方法执行");

return false;

}

}

(2) 如何注册拦截器?

17. 自定义拦截器-添加拦截器后执行流程(对应31-32视频)

(1) 自定义拦截器实现HandlerInterceptor接口需要实现哪些方法,这些方法分别是何时执行?

preHandle:该方法执行时机,处理器方法执行之前执行;

postHandle:该方法执行时机,处理器方法执行之后执行;

afterCompletion:该方法执行时机,所有工作处理完成之后,响应给浏览器客户端之前执行

(2) 程序中有多个拦截器,那么程序的执行流程是怎样的?

按照springmvc.xml中的配置先后顺序依次执行各个拦截器的preHandle方法。然后再逆序执行各个拦截器的postHandle方法。等所有工作处理完成之后,响应给浏览器客户端之前再逆序执行各个拦截器的afterCompletion方法。

18. Spring与SpringMVC父子容器关系解释

(1) 简述Spring与SpringMVC的关系?

在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。

java中注解动态传参_SpringMVC之注解、传参、返回值及拦截器相关推荐

  1. 吃透Java中的动态代理

    动态代理在Java中是很重要的一部分,在很多框架中都会用到,如Spring中的AOP.Hadoop中的RPC等.为此在这把我对Java中的动态代理的理解分享给大家,同时写了一个模拟AOP编程的实例.( ...

  2. 使用动态代理解决网站字符集编码问题:(之前通过拦截器)

    使用动态代理解决网站字符集编码问题:(之前通过拦截器) 设计模式: 在软件开发的过程中,遇到相识的问题,将问题的解决方式抽象为模型(套路) 单例模式(静态代码只会执行一次),工厂模式,动态代理,装饰者 ...

  3. python process返回值_如何恢复传递给multiprocessing.Process的函数的返回值?

    如何恢复传递给multiprocessing.Process的函数的返回值? 在下面的示例代码中,我想恢复函数的返回值worker.我该怎么做呢?这个值存储在哪里? 示例代码: import mult ...

  4. MATLAB中如何忽略函数中前几个不需要的返回值而只取需要的返回值,例如:只取函数第二个返回值,而忽略第一个返回值

    1 致谢 感谢网友honglei.chen的回答, 原文链接如下: https://www.ilovematlab.cn/thread-203269-1-1.html 2 前言 今天在学习神经网络算法 ...

  5. Java中的动态代理详解

    前言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...

  6. 使用 JAVA 中的动态代理实现数据库连接池

    数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的连接数据库对服务性能来讲是一个瓶颈,使用缓冲池技术可以来消除这个瓶颈.我们可以在互联网上找到很多关于数据库连接池的源程序,但是都发现这样一个共 ...

  7. 使用 var 关键字在 Java 中使用动态类型

    在本文中,我们将讨论 Java 10 的一项很酷的特性--在 Java 中引入 var 关键字 . 扫码关注<Java学研大本营>,加入读者群,分享更多精彩 Java 获得了 var 关键 ...

  8. Java中int、double、char等基础数据类型的取值范围

    目录 1.java工具 2.代码简单框架 3.int 4.long 5.double 6.float 7.char 8.byte 9.short 10.boolean 11.总结 1.java工具 1 ...

  9. java中如何遍历实体类的属性和数据类型以及属性值

    package com.walkerjava.test;import java.lang.reflect.Field;import java.lang.reflect.InvocationTarget ...

最新文章

  1. Nature:拟南芥微生物组功能研究0概述
  2. Hybrid App 跨平台热更新方案实践 附带源码
  3. 图解在emu8086中学习汇编语言数字比较程序
  4. 零基础学Java需知:Java小白入门解疑大全
  5. (自己测试没有问题)解决git clone时报错:The requested URL returned error: 401 Unauthorized while accessing
  6. CQ:clearquest
  7. CCScene切换的所有特效(28种)以及设置屏幕横竖屏!
  8. js获取日期实例之昨天今天和明天、后天
  9. 溢价28倍!罗永浩的直播公司要卖了:“真还传”提前上演!
  10. XXXfragment that is not a fragment错误,fragment认不出来
  11. 负债均衡(三)下载安装Nginx
  12. DirectX版本问题
  13. Java面试宝典4.0版
  14. 并行学习框架下基于GAN的城市道路网短时路段交通预测方法
  15. 解决Sublime提示 Sublime Text Error while loading PyV8 binary:exit code 1 Try to manually install Pyv8 fo
  16. win10计算机本地组策略编辑器,如何打开Win10本地组策略编辑器?
  17. 第五套人民币是大众收藏的机会
  18. html和css仿照京东网页页面(文本和链接的跳转)
  19. Spring Data ElasticSearch增删改查
  20. java控制台打印输出 中文乱码 解决办法

热门文章

  1. 2017年10月18日普及组 面积最大
  2. 涂格子游戏html,网页版方格贪吃蛇游戏html源码分享
  3. python 下载文件 限速-Python网络爬虫---scrapy通用爬虫及反爬技巧
  4. 《安全测试指南》——配置管理测试【学习笔记】
  5. jeecms内容管理系统使用了哪些技术
  6. java中List Array相互转换
  7. 反手发力动作--乒在民间
  8. 依赖注入容器Autofac的详解[转]
  9. String 转 const char*
  10. PHP06 PHP操作MySQL