springmvc-国际化&中英文切换&文件上传&下载

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: springmvc-国际化&中英文切换&文件上传&下载

1. 国际化

1.1 介绍

国际化(internationalization), 简称国际化。一个产品支持国际化是指产品在无需做大的改变就能够适应不同的语言和地区的能力。i18n是指是一种让软件在开发阶段就支持多种语言的技术。

1.2 java.util.Locale

该类对象表示了特定的地理,政治和文化地区。重要成员:一个语言代号(ISO 639标准定义),一个国家或者区域的可选项(ISO 3169标准定义)。示例:zh_CN, zh为语言代号, CN为国家代号。在操作 Date, Calendar等表示日期/时间的对象时,经常会用到;因为不同的区域,时间表示方式都不同。

1.3 ResourceBundle

该类的作用是读取资源文件,解决国际化问题。在定义资源文件时请注意资源文件的命名规则:

xxx_语言代码_国家代码.properties,如:i18n_zh_CN.properties。

1)简单消息

首先在国际化资源文件中加入配置:

中文: name=露丝

英文: name=rose

在使用国际化配置文件时使用key来获取值,示例如下:

2)复合消息

中文: message=你好{0},我是{1}

英文: message=hello {0}, I am {1}

注意:{}是英文字符

使用示例:

1.4 spring项目中的国际化

1)提供中英两种资源文件

i18n_en_US.properties

i18n_zh_CN.properties

2)配置国际化资源文件(在spring配置文件中添加,例如spring-mvc.xml)

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list> 
             <value>i18n</value>
        </list>
    </property>
    <!-- 不要忘了加上字符编码方式 -->
    <property name="defaultEncoding" value="UTF-8"></property>
</bean>

注:

bean 的id必须为messageSource,属性名称必须为basenames

可在开发阶段使用ReloadableResourceBundleMessageSource它能自动重新加载资源文件

3)配置语言区域解析器

<!--指定语言区域解析器,由它来确定使用哪个语言--><bean id="localeResolver" 
class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>

注:解析器类型

  • AcceptHeaderLocaleResolver(基于操作系统)
    Spring采用的默认区域解析器AcceptHeaderLocaleResolver。它通过检验HTTP请求的accept-language头部来解析区域。这个头部是由用户的web浏览器根据底层操作系统的区域设置进行设定。请注意,这个区域解析器无法改变用户的区域,因为它无法修改用户操作系统的区域设置。
  • SessionLocaleResolver(基于会话)
    它通过检验用户会话中预置的属性来解析区域。如果该会话属性不存在,它会根据accept-language HTTP头部确定默认区域
  • CookieLocaleResolver(基于Cookie)
    defaultLocale:默认的语言区域
    cookieName:设置cookieName名称
    cookieMaxAge:设置cookieName有效时间,单位秒
    cookiePath:设置cookie可见的地址,默认是“/”即对网站所有地址都是可见的,如果设为其它地址,则只有该地址或其后的地址才可见

4)配置国际化操作拦截器

<mvc:interceptors>    
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>

5)页面通过标签输出内容

导入t标签

<%@ taglib prefix="t" uri="http://www.springframework.org/tags" %>
<!--使用t标签输出内容,title为国际化资源文件中定义的key-->
<t:message code="title"/>

1.5 示例一

将上一节中的index.jsp页面修改为使用国际化资源文件来显示信息(要先将spring配置文件中需要的配置完成)

1)在国际化资源文件定义key

中文:

stu.add=新增学员

stu.upate=修改学员

英文:

stu.add=add student

stu.upate=update student

2)在index.jsp文件中因为国际化支持标签

1.6 中英文切换

1)国际化资源文件

在中文资源文件中增加定义如下:

language=英语

如果当前显示的是中文,则点击切换到的应该是英文

在英文资源文件中增加配置如下:

language=chinese

如果当前显示的是英文,在点击切换到中文。

2)编写一个controller执行切换

3)修改页面,执行语言切换

index.jsp页面文件:

2. 文件上传

2.1 导入依赖的包

在pom.xml文件中导入依赖的包:

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.3</version>
</dependency>

2.2 配置文件上传解析器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 文件最大大小(字节) 1024*1024*50=50M-->
        <property name="maxUploadSize" value="52428800"></property>
        <!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常-->
        <property name="resolveLazily" value="true"/>
  </bean>

2.4 数据表

create table t_book_file
(
  file_id varchar(32) primary key comment '文件ID',
  real_name varchar(50) not null comment '文件名称',
  content_type varchar(50) not null comment '文件类型',
  url varchar(256) not null comment '文件路径'
);

在book表中加入一个字段来保存上传文件的ID,即:与file_id字段对应。

2.3 controller

编辑index.jsp

增加上传链接打开进入上传的页面

 

上传页面

该截图中的代码只是保存了图片,还需要将图片的信息保存到文件数据表中,请自行完善。

3. 下载

  1. 核心代码:
  @RequestMapping(value="/download")
public ResponseEntity<byte[]> download(@RequestParam String fileId){
   //先根据文件id查询对应图片信息,相关的后台代码省略,自行编写
   //下载关键代码
   File file=new File(bookFile.getUrl());
   HttpHeaders headers = new HttpHeaders();//http头信息
   String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
   headers.setContentDispositionFormData("attachment", downloadFileName);
   headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
   //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息
   return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
}

 

2.下载功能链接,示例代码

<!-- 判断是否 存在图片,如果有图片则提供下载 -->
<c:if test="${not empty b.bookImages}">    
    <a href="${ctx}/bookFile/download?fileId=${b.bookImages}">下载图片</a>
</c:if>


相关文章
|
11月前
|
XML 前端开发 Java
SpringMVC中资源国际化使用实践
SpringMVC中资源国际化使用实践
118 0
SpringMVC解决下载文件名乱码的问题
SpringMVC解决下载文件名乱码的问题
108 0
|
前端开发
SpringMVC 下载文件(直接在浏览器打开)
SpringMVC 下载文件(直接在浏览器打开)
170 0
|
前端开发 Java 应用服务中间件
SpringMVC之文件上传下载以及jrebel的使用
SpringMVC之文件上传下载以及jrebel的使用
76 0
|
前端开发 Java Spring
SpringMVC之文件上传下载
SpringMVC之文件上传下载
50 0
|
6月前
SpringMVC之文件上传和下载
【1月更文挑战第20天】SpringMVC之文件上传和下载
44 1
|
SQL 前端开发 Java
SpringMVC系列(四)之SpringMVC实现文件上传和下载
SpringMVC系列(四)之SpringMVC实现文件上传和下载
|
前端开发 Java 数据库连接
SpringMvc第四战-【SpringMvc文件上传,下载】
SpringMvc第四战-【SpringMvc文件上传,下载】
|
设计模式 前端开发 Java
SpringMvc文件上传下载一条龙服务教会你
SpringMvc文件上传下载一条龙服务教会你
88 0
|
前端开发 Java 数据库
SpringMVC之文件的上传下载(教你如何使用有关SpringMVC知识实现文件上传下载的超详细博客)
SpringMVC之文件的上传下载(教你如何使用有关SpringMVC知识实现文件上传下载的超详细博客)
102 0