jsp显示中文名图片

本文探讨了解决中文图片名称在Web应用中显示的问题。通过分析Tomcat默认使用ISO-8859-1编码传递URI导致的问题,并提供了一个自定义JSP文件的解决方案,该方案能够正确地读取和展示中文命名的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般是避免用中文名做图片名字的,这次碰到特殊需求。

查找了下网上的资料,大概有这么几种说法:

  1. img标签的src属性做Encode,尝试无效
  2. 更改tomcat配置,加入 URIEncoding为UTF-8。这个理论上应该是有效的,但是具体到自己的项目中,无效。
  3. 过滤器,过滤图片资源的解析。
其实这个问题的产生,根源于Tomcat默认是用ISO-8859-1来传递URI的。所以我认为方法2、3应该是有用的。

最后的解决方案,是模拟3的原理,自己写一个jsp,来读取图片资源。

<%@page language="java" pageEncoding="UTF-8" contentType="image/png"%>
<%
String name = request.getParameter("name");
if(name == null || name.isEmpty())
	return;

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

String path = application.getRealPath(request.getRequestURI()); 
File cur = new File(path);
File parent = new File(cur.getParent());
File image = new File(parent.getParent() + "\\images" + "\\" + name);

if(!image.exists()) return;

FileInputStream fileStream = new FileInputStream(image);

//设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
OutputStream os = response.getOutputStream();

int size = 1024*6;
byte[] buffer = new byte[size];
int read;
while((read = fileStream.read(buffer)) > 0){
	os.write(buffer, 0, read);
}

os.flush();
os.close();
%>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值