SpringMVC之国际化上传下载

news2025/1/24 17:58:40

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)配置语言区域解析器

注:解析器类型

  • 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"/>

示例一

将上一节中的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.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字段对应。

controller

在这里插入图片描述

编辑index.jsp
增加上传链接打开进入上传的页面
在这里插入图片描述
上传页面
在这里插入图片描述
该截图中的代码只是保存了图片,还需要将图片的信息保存到文件数据表中,请自行完善。

  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);

}

下载功能链接,示例代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS小技巧之单标签loader

本文翻译自 How to create a CSS-only loader with one element&#xff0c;作者&#xff1a; Temani Afif&#xff0c; 略有删改。 loader组件是网站的重要组成部分。它可以用在许多地方&#xff0c;我们需要显示的内容正在加载中。这样的组件需要尽可能简单&#xff0c;在这篇…

Go语言入门心法(四): 异常体系

Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 一: go异常体系认知 后期补充完整,忙着去耍帅,泡妹子去.............

C++之继承<1>【详解】

C之继承【详解】 1. 继承的概念2. 继承定义的格式2.1 继承方式和访问限定符2.2 继承了基类成员后随着访问方式变化的变化 3. 基类和派生类对象的复制转换5. 隐藏 1. 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在…

日志分析题目

关卡描述&#xff1a;1、黑客在内网抓了两台肉鸡对服务器进行攻击&#xff0c;请给出两台肉鸡的IP&#xff08;使用空格分隔&#xff09; 直接查看日志 rh 然后ls&#xff0c;查看 这里我没有看到明显web容器的字样&#xff0c;例如apache&#xff0c;iis的等等。 就看容器…

《华为战略管理法:DSTE实战体系》作者谢宁老师受邀为某电力上市集团提供两天的《成功的产品管理及产品经理》内训。

​​ 近日&#xff0c;《华为战略管理法&#xff1a;DSTE实战体系》作者谢宁老师受邀为某电力上市集团提供两天的《成功的产品管理及产品经理》内训。 谢宁老师作为华为培训管理部特聘资深讲师和顾问&#xff0c;也是畅销书《华为战略管理法&#xff1a;DSTE实战体系》、《智慧…

贪心算法(一)

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : 算法小能手 &#x1f606;今日提问 : 国庆去哪里打卡了呢&#xff1f; &#x1f606;今日分享 : 武功山风景打卡–双云海 文章目录 &#x1f33b;贪心算法的思想&#x1f33b;贪心算法的基本思路&#x1f4d6;给大家讲一个小…

高可用eureka服务注册与发现代码例子

代码 Eureka server 1 pom.xml <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.clou…

Python开源项目周排行 2023年第36周

#2023年第36周2023年10月14日1书生・浦语灵笔图文混合创作大模型。基于书生・浦语大语言模型研发的视觉 - 语言大模型&#xff0c;提供出色的图文理解和创作能力&#xff0c;具有多项优势&#xff1a; 图文交错创作: 浦语・灵笔可以为用户打造图文并貌的专属文章。生成的文章文…

Go语言入门心法(五): 函数

一: go语言函数认知 Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 忙着去耍帅,后期补上..........

从不同的正态分布中抽取随机数randn()函数

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 从不同的正态分布中抽取随机数 randn()函数 [太阳]选择题 下列选项对代码最后运行结果描述错误的是&#xff1f; import numpy as np print("【执行】np.random.randn()") print(np.…

《UnityShader入门精要》学习5

Unity中的基础光照 从宏观上来说&#xff0c;渲染包含了两大部分&#xff1a;决定一个像素的可见性&#xff0c;决定这个像素上的光照计算 我们是如何看到这个世界的 通常来讲&#xff0c;我们要模拟真实的光照环境来生成一张图像&#xff0c;需要考虑3种物理现象。 首先&a…

13年测试老鸟总结,真实性能测试如何做?性能测试完整流程+细节...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试什么时候…

【HttpRunner】接口自动化测试框架

简介 2018年python开发者大会上&#xff0c;了解到HttpRuuner开源自动化测试框架&#xff0c;采用YAML/JSON格式管理用例&#xff0c;能录制和转换生成用例功能&#xff0c;充分做到用例与测试代码分离&#xff0c;相比excel维护测试场景数据更加简洁。在此&#xff0c;利用业…

傅里叶变换和其图像处理中的应用

以下部分文字资料整合于网络&#xff0c;本文仅供自己学习用&#xff01; 一、为什么要在频域进行图像处理&#xff1f; 一些在空间域表述困难的增强任务&#xff0c;在频率域中变得非常普通 滤波在频率域更为直观&#xff0c;你想想嘛&#xff0c;所谓滤波&#xff0c;就是…

第 115 场 LeetCode 双周赛题解

A 上一个遍历的整数 模拟 class Solution { public:vector<int> lastVisitedIntegers(vector<string> &words) {vector<int> res;vector<int> li;for (int i 0, n words.size(); i < n;) {if (words[i] ! "prev")li.push_back(stoi…

数据结构与算法——线性查找法

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

冲刺十五届蓝桥杯P0005单词分析

文章目录 题目分析代码 题目 单词分析 分析 统计字符串中字母出现的次数&#xff0c;可以采用哈希表&#xff0c;代码采用的是数组来存储字符&#xff0c;将字符-97&#xff0c;得到对应的数组下标&#xff0c;将对应下标的数组&#xff1b;找到数组元素最大的下标&#xff…

微店店铺所有商品数据接口,微店整店商品数据接口,微店店铺商品数据接口,微店API接口

微店店铺所有商品数据接口是一种允许开发者在其应用程序中调用微店店铺所有商品数据的API接口。利用这一接口&#xff0c;开发者可以获取微店店铺的所有商品信息&#xff0c;包括商品名称、价格、介绍、图片等。 其主要用途是帮助开发者进行各种业务场景的构建&#xff0c;例如…

如果不封车,坚持冬天骑行应该注意些什么?

亲爱的骑行爱好者们&#xff0c;你们好&#xff01;随着秋天的脚步渐行渐远&#xff0c;冬天也不远了。对于热爱骑行的你们来说&#xff0c;秋天的骑行是一种享受&#xff0c;而冬天的骑行则是一种挑战。那么&#xff0c;如果你打算在秋天骑行不封车&#xff0c;坚持过冬天&…

小解C语言文件编译过程【linux】

小解C语言文件编译过程【linux】 库动态库静态库 C语言文件 程序编译过程整体预处理编译汇编链接动态链接静态链接两种方法对比 库 看到标题是文件编译过程 但是开头却是库&#xff0c;这可不是挂羊头卖狗肉&#xff0c;而是因为库也是代码不可缺少的一部分&#xff0c;并且在…