重定向参数,作为处理器方法参数使用(SpringMVC会自动将该接口实现类注入),使用addFlashAttribute(Key,Value)方法将数据存储至flash(闪存)中
在进行重定向操作时,DispatcherServlet将flash(闪存)的数据保存在request中(一份完整数据和该数据K/V键值对的子集,Key值以方法中Key命名),
该数据仅限于一次请求,二次失效
方法级别
跳过View层响应,将返回结果以Json格式显示在浏览器页面,当数据类型不是String类型时,需要使用Convert转换器来进行转换(建议使用JACKSON)
方法参数级别
将传入Json数据转换为对应的对象,只能指定一个参数作为存储,当方法返回含有中文时,需要让@RequestMapping(produces=“text/html;charset=utf-8”)提前设置响应字符编码集
前提条件(请求方式method=“post”,enctype=“multipart/form-data”,表单文件选项需要有name属性)
配置:
1.容器启动时,设置文件上传参数(重写customizeRegistration()方法),注册MultipartConfigElement对象,有参构造参数(“F:/test/temp”, 102410242, 102410244, 2)
参数:1.目录(必须存在,可以用监听器加载)
2.文件大小
3.获取表单请求的最大大小
4.文件写入磁盘的大小)
//容器启动时,设置文件上传参数
@Override
protected void customizeRegistration(Dynamic registration) {
//目录必须存在,可以使用监听器进行加载
MultipartConfigElement config = new MultipartConfigElement("F:/test/temp", 1024*1024*2, 1024*1024*4, 2);
registration.setMultipartConfig(config);
}
2.创建Multipart解析器Bean(Bean的名称固定,必须为multipartResolver),Bean为MultipartResolver的实现类(CommonsMultipartResolver,StandardServletMultipartResolver(推荐))
//创建Multipart解析器Bean
//Bean的名称固定 必须为:multipartResolver
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
文件上传:
使用MultipartFile对象获取文件对象(上传文件被Multpart解析器处理为Multipart文件对象),使用transferTo()方法将文件保存在目录下。
public void UploadFile(String title,String desc,@RequestPart MultipartFile myfile) {
//普通表单类型直接注入即可
System.out.println("title = " + title);
System.out.println("desc = " + desc);
//上传文件被Multipart解析器处理成MultipartFile文件对象,并注入
System.out.println("表单元素名称: "+ myfile.getName());
System.out.println("上传文件内容类型: " + myfile.getContentType());
System.out.println("文件原始名称: " + myfile.getOriginalFilename());
System.out.println("文件原始大小: " + myfile.getSize());
try {
myfile.transferTo(new File("F:/test/upload/"+myfile.getOriginalFilename()));
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
文件下载:
使用ResponseEntity类响应下载的文件(其中需要文件的流,响应头(HttpHeaders对象),HttpStatus(状态码))
方法参数作为文件名时,当传入参数不存在时,默认下载的文件是该路径,可以使用@RequestParam注解起别名使该参数必填
public ResponseEntity<byte[]> downloadFile(@RequestParam(name = "name") String filename){
String path = "F:/test/upload/"+filename;
File file = new File(path);
byte[] buff = null;
try (InputStream in = new FileInputStream(file)) {
buff = new byte[in.available()];
in.read(buff);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HttpHeaders hander = new HttpHeaders();
hander.setContentDispositionFormData("attachment", filename);
hander.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(buff, hander, HttpStatus.OK);
}
首先,更新,插入,删除都会清除缓存
一级缓存:
存在于同一个SqlSession中,不同Session之间的缓存是隔离的
Mybatis会将执行的方法和参数通过算法生成缓存的键,将该键和对应的值存储在Map中,当下次查询时,若该键存在,则会取出该键对应的值并返回,不会访问数据库(提升查询速度)
二级缓存:
存在于一个namespace中(也可以说是存在于同一个SqlSessionFactory中),二级缓存清除策略(LRU:最近最少使用,FIFO:先进先出)
6.MyBatis的优势有哪些?
Mybatis是一个半自动化持久层框架,相比较传统的JDBC而言,它简化了JDBC的操作,可以减少代码冗余(不必配置大量的Sql代码),可以自动映射结果集,含有缓存机制(一级缓存和二级缓存),提高查询速度。
用法:
1.实现HandlerInterceptor接口,作为拦截器,拦截每一个Handler,重写preHandle(),postHandle(),afterCompletion()方法,对每一次请求的状态进行拦截
preHandle():在每一个Handler之前拦截,返回true(放行),false(拦截)
postHandle():在Handler执行后,响应视图前拦截
afterCompletion():响应视图后拦截
2…重写addInterceptors()方法并设置匹配规则
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new DeHandler())
.addPathPatterns("")//设置匹配规则 (包含)
.excludePathPatterns(""); // (不包含)
// registry.addInterceptor(new DeHandlerT());
}
以上就是今日分享的全部内容,如有疑问,欢迎讨论!