Jsp中图片显示问题以及显示绝对路径图片问题

Jsp中图片显示问题

最近项目中,有图片上传的情况,要求:保存路径存储在配置文件中,放在系统绝对路径下,命名方式:path/image/分类/imageName。
过程中,分类目录使用的是中文路径,一直没有想到因为中文路径会导致图片不显示,在查看图片时,一直都显示404,找不到资源,但是明显路径没有问题,图片也确实存在,害的本人头疼好久,突然发现显示图片的路径中,中文被编码成一串字符,难道是因为路径包涵中文?在线搜索,发现确实有这种情况,所以试了一下,结果成功显示。
解决方法:
在tomcat中设置中文路径:tomcat中server.xml文件中的connector部分:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

在其中添加一个属性:URIEncoding=”utf-8”。此处编码和网页编码相同。如:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>

可以显示图片。究其原因,在html,jsp页面中,引用了带汉字的图片或者目录,形如这样,如果没有在tomcat配置URIEncoding属性,则无法显示。

Jsp中显示绝对路径图片

1.使用servlet存储图片,将servlet当做img的src来显示。如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
    response.setContentType("text/html; charset=UTF-8"); 
    response.setContentType("image/jpeg"); //设置图片格式格式,这里可以忽略 
    FileInputStream fis = null; 
    OutputStream os = null;
    try { 
        fis = new FileInputStream(imagePath);//图片路径
        os = response.getOutputStream();
        int count = 0; 
        byte[] buffer = new byte[1024*1024]; 
        while ( (count = fis.read(buffer)) != -1 ) 
        os.write(buffer, 0, count); 
    } catch (IOException e){ 
        e.printStackTrace(); 
    }finally { 
        try {
            if (os != null) {
                os.close();
            }
            if (fis != null) {
                fis.close();
            }
            } catch (IOException e) {
                e.printStackTrace();
            }
    } 
}

这是servlet的方法,然后在jsp页面的img标签的src设置为访问该servlet即可。
2.另一种方式,在使用springmvc这样的框架时,如果我要添加一个servlet,个人觉得没有什么必要,那么就在jsp页面中的img的src中设置访问路径,如下:

<img name="imgdis" alt="图片显示" src="${ctx }//showImage?id=${image.id}">

此时在请求url对应方法中添加类似servlet中的doPost方法相应方法即可。例如:

public void showImage(HttpServletResponse response, String imagePath) {
        response.setContentType("text/html; charset=UTF-8");
        // response.setContentType("image/jpeg"); // 设置图片格式格式,这里可以忽略
        FileInputStream fis = null;
        OutputStream os = null;
        try {
            fis = new FileInputStream(imagePath);
            os = response.getOutputStream();
            int count = 0;
            byte[] buffer = new byte[1024 * 1024];
            while ((count = fis.read(buffer)) != -1)
                os.write(buffer, 0, count);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (os != null) {
                    os.close();
                }
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

这样绝对路径的图片就可以被显示了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值