您的位置:首页 > 其它

服务端通过生成字节码返回客服端解析为图像

2018-01-13 16:26 295 查看
在之前做项目的时候遇到过这样的情况,用户需要上传自己的头像图片,为了能在下次登录时展示这个图片,我们会把图片保存到项目中的某一个指定的文件夹里面,以便服务程序能访问到这张图片。(因为这个图片必须放到tomcat容器里面(webapps文件夹下面)能访问到的地方,程序才能访问到)。但是有一个问题是,这不利于程序包的更新,每次发布war包,tomcat将会解析出新的项目文件夹,原有的项目文件夹将会被替换,这就会导致用户上传的图片被删除。提出一个更好的解决办法是:在浏览一个页面时,当浏览器解析到类似<image>(图片)\<embed>(多媒体资源音频视频等)等标签,以及请求静态文件的时候。浏览器会重新建立一个TCP链接,向服务器请求这些静态资源。一般地,我们的项目都会将静态资源请求转发到Servlet容器(tomcat等)中默认的Servlet上。因此我们需要打破这一点。将某些静态资源的请求,转发到我们能处理的servlet上(如springMvc的DispatcherServlet)。通过我们自己直接返回图片等资源的字节码(该字节码可以读取文件直接生成,也可以从数据库中读取,建议在用户上传头像的时候,将头像图片生成字节码存在数据库,这样数据不容易丢失,否则如果更换服务器的时候还要注意备份用户的图片信息),浏览器都可以讲这些字节码解析成为相应的静态资源。如下我将用两种方式请求图片资源:





界面显示结果:



其中第二张图片是通过DispatcherServlet处理返回字节码并由浏览器解释生成的图片。

第一张图片中表达的信息,为什么说第一个标签将会被默认的Servlet处理而第二个标签将会被DispatcherServlet处理呢?

这得取决于你web.xml中DispatcherServlet的配置。



如上图,所有请求的URI包含 /service/的请求都会被转发到 DispatcherServlet处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐