点击阅读上一章

其实SpringMVC中的页面国际化与上一章的验证国际化基本一致。

1.对页面进行国际化

1)首先我们对Spring配置文件中添加国际化bean配置

<!-- 注册国际化信息,必须有id,指定资源文件名称,资源文件在src目录下 -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>
<!-- 配置LocalResolver用来获取本地化语言 -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<!-- 配置LocaleChanceInterceptor拦截器 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>

2)然后添加我们的资源文件,这个资源文件的前缀要与我们上面配置的bean的value相同。

我们在资源文件写入我们需要国际化的内容

然后我们在跳转页面的时候需要加载国际化资源

@RequestMapping(value="login",method=RequestMethod.GET)
public String login(Locale locale,Map<String ,Object> map){
String name = messageSource.getMessage("name", null, locale);
String pass = messageSource.getMessage("pass", null, locale);
String title = messageSource.getMessage("title", null, locale);
String submit = messageSource.getMessage("submit", null, locale);
map.put("title", title);
map.put("pass", pass);
map.put("name", name);
map.put("submit", submit);
map.put("user", new User());
return "login";
}

我们在页面中可以使用jstl或者spring标签数据国际化信息,spring中的form标签是用来输入spring验证错误之后的提示信息(上章有提过)

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

然后我们页面中的国际化信息可以可这显示出来

<form:form action="login" method="post" commandName="user">
<fmt:message key="name"/>
<form:input path="username"/>
<form:errors path="username"/>
<br>
<fmt:message key="pass"/>
<form:input path="userpass"/>
<input type="submit" value="<spring:message code="submit"/>">
</form:form>

我们还可以完成一个语言切换功能,我们在页面上加入两个超链接,当接收到请求,SpringMVC会在上下文中查找一个本地解析器,找到后使用它获取请求所对应的本地化类型信息,SpringMVC还允许还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。

<a href="login?locale=zh_CN">中文</a>
<a href="login?locale=en_US">英文</a>

SpringMVC接到请求后首先会判断有没有这个参数,如果有这个参数就添加到session里面,如果没这个参数会到session里面去找,session里面没有找到会默认读取浏览器的语言。

2.文件上传

SpringMVC的文件上传非常的简单,它直接提供了直接的支持,这种支持是通过即插即用的MultipartResolver接口实现的。Spring用它的实现类CommonsMultipartResolver来实现。SpringMVC上下文中没有自动装配所以需要我们手动来配置。我们这里就直接实现一个多文件上传,多文件上传会了害怕单文件上传不会?

配置之前我们首先来导入文件上传的jar包,这些包在我们spring中是没有的。

然后我们手动配置下Bean

<!-- 配置文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 指定默认的编码格式 -->
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定允许上传的文件大小,单位Byte -->
<property name="maxUploadSize" value="512000" />
</bean>

这个bean里还可以设置类型啊什么什么的,有需要的可以阅读源码。

<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file"/><br>
<input type="file" name="file"/><br>
<input type="file" name="file"/><br>
<input type="submit" value="submit">
</form>

enctype="multipart/form-data" 注意文件上传必须加上这个,而且必须是post请求。
然后我们来看下我们服务器是怎么接收到文件的,多文件上传使用 MultipartFile[] 并且一定要在参数前加上注解 @RequestParam("file")否则会报错。单文件上传我们只需要使用一个MultipartFile对象,并且无需加注解。

/**
* 单文件上传 : MultipartFile file
* 多文件上传 : @RequestParam("file") MultipartFile[] file
* 多文件上传必须加上 @RequestParam("file")注解否则会报错
* @author:MiYa.
* @time:2018-9-28 11:50
*/
@RequestMapping(value="upload",method=RequestMethod.POST)
public String testFileUpload(HttpServletRequest request , @RequestParam("file") MultipartFile[] file){
for (int i = 0; i < file.length; i++) {
MultipartFile multipartFile = file[i];
System.out.println(" ContentType: " + multipartFile.getContentType());
System.out.println(" Name: " + multipartFile.getName());
System.out.println(" OriginalFilename: " + multipartFile.getOriginalFilename());
System.out.println(" Size: " + multipartFile.getSize());
//判断是否提交文件,如果没有那么跳过上传
if(multipartFile.isEmpty()){
continue;
}
// 获取文件的上传路径
String uploadpath = request.getServletContext().getRealPath("uploads");
//获取文件名称
String filename = multipartFile.getOriginalFilename();
//截取文件后缀
String fileext = filename.substring(filename.lastIndexOf("."));
//生成新的随机文件名称
String newfileName = UUID.randomUUID() + fileext;
//文件保存路径
File savepath = new File(uploadpath + "/" + newfileName);
//上传文件
try {
multipartFile.transferTo(savepath);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
return "welcome";
}

整理下MultipartFile经常使用的方法:

isEmpty():判断是否提交文件上来 

getContextType():获取文件类型

getName():获取表单元素名称

getOriginalFilename():获取文件名

getSize():获取文件大小

getBytes():获取字节数组

SpringMVC国际化与文件上传的更多相关文章

  1. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!—配置文件上传解释器 --> <mvc:annotation-driven>&l ...

  2. (转)SpringMVC学习(九)——SpringMVC中实现文件上传

    http://blog.csdn.net/yerenyuan_pku/article/details/72511975 这一篇博文主要来总结下SpringMVC中实现文件上传的步骤.但这里我只讲单个文 ...

  3. 深入springMVC源码------文件上传源码解析(下篇)

    在上篇<深入springMVC------文件上传源码解析(上篇) >中,介绍了springmvc文件上传相关.那么本篇呢,将进一步介绍springmvc 上传文件的效率问题. 相信大部分 ...

  4. springMVC实现多文件上传

    <h2>上传多个文件 实例</h2> <form action="/workreport/uploadMultiFile.html" method=& ...

  5. SpringMvc入门五----文件上传

      知识点: SpringMvc单文件上传 SpringMvc多文件上传   这里我直接演示多文件上传,单文件的上传就不说了,不过代码都是现成的. 效果预览:   DEMO图:     添加文件上传j ...

  6. SpringMvc MultipartFile 图片文件上传

    spring-servlet.xml <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipar ...

  7. SpringMVC+BUI实现文件上传(附详解,源码下载)

    中午有限时间写这博文,前言就不必多说了,直奔主题吧. BUI是一个前端框架,关于BUI的介绍请看博主的文章那些年用过的一些前端框架. 下面我们开始实例的讲解! 一.效果演示: 上传成功后,会发现本地相 ...

  8. 2017/2/12:springMVC的简单文件上传跟拦截器

    1.写文件上传的界面jsp代码如下重点为文件上传标签的类型 2.写登录成功跟失败的界面:成功自己写 3.写springMVC的文件上传的controller的方法 4.最后一步配置spring-ser ...

  9. SpringMVC框架06——文件上传与下载

    1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ...

随机推荐

  1. Django REST Framework API Guide 05

    本节大纲 1.Serializer fields 2.Serializer relations Serializer fields 1.serializer 字段定义在fields.py文件内 2.导 ...

  2. 🌵react小记 🌵

  3. Zookeeper学习笔记4

    开源客户端 ZkClient <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId ...

  4. Linux今日疑问

    问题一:who -r没有反应 ========== 首先我查询了运行等级的含义. 0: 关机 1: 单用户 2: 无网络的多用户 3: 命令行模式 4: 未用 5: GUI(图形桌面 模式) 6 : ...

  5. c++学习day3(字符串_指针)

    1.字符串 1)三种形式 用双引号括起来的字符串常量:结尾会有一个'\0'字符,但该字符只占据字节数,不会使字符串长度增加. 存放于字符数组中,以'\0'字符结尾:数组元素个数应至少为字符串长度+1 ...

  6. requests库入门04-http基本认证

    因为后续样例中GitHub都需要提供认证,所以先写关于基本认证的 http的请求中,有一些请求是需要通过授权认证之后才会响应,授权认证就是检查用户名和密码的过程.http有一个基本认证方式,在认证的过 ...

  7. 设计模式C++学习笔记之五(Factory Method工厂方法模式)

      工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的 ...

  8. 带你玩转Visual Studio——带你了解VC++各种类型的工程

    原文地址:http://blog.csdn.net/luoweifu/article/details/48816605 上一篇文章带你玩转Visual Studio——带你新建一个工程一文中提到新建一 ...

  9. Mac下更改JDK环境变量配置

    1.打开终端 2.如果你是第一次配置环境变量,可以使用“touch .bash_profile” 创建一个.bash_profile的隐藏配置文件(如果你是为编辑已存在的配置文件,则使用"o ...

  10. 微信小程序弹出层点击穿透问题

    问题描述:使用小程序的modal组件实现遮罩层效果时,会出现滚动穿透的问题,即遮罩层后面的页面依旧可以滚动. 解决方案: 给底层页面动态添加 position:fixed; 代码: wxml: < ...