简单的图片处理servlet
好久没写博客了。近期做了一个比較有趣的商城项目,里面的业务还真的非常复杂,好在做了特殊的处理之后商城也能正常的使用了。
可是没中不足的就是图片目录和项目掺杂在一块,实在有些难以维护。之后找了点资料就搞了个简单的图片读取服务端程序,还算好用今天得闲了就整理出来给大家參考一下。
1 项目源码和图片目录放一块的优缺点
长处:方便检索、逻辑相对清晰
缺点:源码体积增大、easy丢失图片、easy被类似struts2这种漏洞利用(如被黑客删除、篡改)
2 解决方式
项目的上传文件的代码做对应调整,改为和源码不同的路径;图片显示先经过servlet把图片读取到server内存缓冲区。之后显示出来
3 图片读取与显示servlet
package org.lxh; import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* @说明 该Servlet将本地硬盘的图片输入管道中
* @version 1.0
* @since
*/
@SuppressWarnings("serial")
public class ImageShowServlet extends HttpServlet { @Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String uri=request.getRequestURI();
String rs=uri.substring(6);
String result=rs.replace("/", File.separator); OutputStream os = response.getOutputStream();
File file = new File("D:\\"+result);
FileInputStream fips = new FileInputStream(file);
byte[] btImg = readStream(fips);
os.write(btImg);
os.flush();
} /**
* 读取管道中的流数据
*/
public byte[] readStream(InputStream inStream) {
ByteArrayOutputStream bops = new ByteArrayOutputStream();
int data = -1;
try {
while((data = inStream.read()) != -1){
bops.write(data);
}
return bops.toByteArray();
}catch(Exception e){
return null;
}
}
}
图片的路径依据实际情况进行改动,关键方法是readStream
4 web.xml的配置
<servlet>
<servlet-name>ImageShowServlet</servlet-name>
<servlet-class>org.lxh.ImageShowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageShowServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
5 怎样使用(一句代码搞定)
<img src="/image${smallImage}" width="50px" height="50px"/>
${smallImage}是通过数据库动态读取出来的,就类似“/upload/front/image/201412/9da935f7-e3fe-45c1-9823-1d6c7d748606.jpg”这样的
注:该servlet可作为一个项目打包,和主项目放一块就能够搭配使用了。
简单的图片处理servlet的更多相关文章
- Expression Blend4经验分享:制作一个简单的图片按钮样式
这次分享如何做一个简单的图片按钮经验 在我的个人Silverlight网页上,有个Iphone手机的效果,其中用到大量的图片按钮 http://raimon.6.gwidc.com/Iphone/de ...
- jquery简单的图片切换效果,支持pc端、移动端的banner图片切换开发
详细内容请点击 无意中看见了两年前写的一个图片切换,那会儿刚刚学习网页制作,可以说是我的第一个处女座的jquery图片切换效果.无聊之余对它的宽度稍稍做了一下修改,变成了支持pc端.手机端全屏的ban ...
- Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器
新建一个single view 工程: 关闭ARC , 在.xib视图文件上拖放一个UIImageView 两个UIButton ,一个UISlider ,布局如图. 并为他们连线, UIImage ...
- 一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确
一般处理程序生成简单的图片验证码并通过html验证用户输入的验证码是否正确 最近没事研究了下验证码的的动态生成及通过cookie实现HTML页面对用户输入的验证码的校验,简要如下: 1.写 ...
- 简单实现图片间的切换动画 主要用到ViewPager
简单实现图片间的切换动画 主要用到ViewPagerViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view.ViewPager类需要一个PagerAdapter适 ...
- UEditor之实现配置简单的图片上传示例
UEditor之实现配置简单的图片上传示例 原创 2016年06月11日 18:27:31 开心一笑 下班后,阿华到楼下小超市买毛巾,刚买完出来,就遇到同一办公楼里另一家公司的阿菲,之前与她远远的有过 ...
- Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载
在使用这个框架的时候,我们必须要配置一个DisplayImageOptions对象来作为ImageLoader.getInstance().displayImage()中的参数,所以很有必要讲解这个对 ...
- 3-5 编程练习:jQuery实现简单的图片对应展示效果
3-5 编程练习:jQuery实现简单的图片对应展示效果 通过这个章节的学习, 老师带领大家完成了一个基本的图片切换特效,接下来,我们也实现一个类似的效果,点击相应的按钮,切换对应的图片. 效果图 : ...
- 一、简单的图片上传并预览功能input[file]
一.简单的图片上传并预览功能input[file] <!DOCTYPE html> <html lang="en"> <head> <me ...
随机推荐
- 通过RHN网站给RHEL打补丁
[root@yum01 ~]# yum list-sec securityLoaded plugins: downloadonly, product-id, rhnplugin, security, ...
- Codeforces Round #395 Div.2 题解
感受 第一次参加CF的rating比赛,感觉还是非常exciting,前18分钟把AB切掉之后一直在考虑C题,结果最后还是没有想出来Orz 传送门 A 比较水的模拟,就是计算:\(\frac{z}{l ...
- QML与Qt C++ 交互机制探讨与总结(转)
原文转自 https://www.cnblogs.com/aoldman/p/4103510.html 介绍 QML和 C++对象可以通过,signals,slots和 属性修改进行交互.对于一个C+ ...
- python--asyncio模块
申明:本文章参考于https://www.jianshu.com/p/b5e347b3a17c 网络模型有很多种,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系 ...
- Flex与51单片机socket通信 策略问题
直接把<cross-domain-policy> <allow-access-from domain="*" to-ports="*"/> ...
- laravel按月/时间区间查询数据
public function payRollList($time) { $member_phone = Session::get(phone'); $engineer = Engineer::get ...
- HTML5面向对象的游戏开发简单实例总结
在阅读一本HTML5游戏开发相关书籍时发现一个很好的例子,通过这个例子可以对面向对象的开发进行更深入的理解.这个对象要实现的是:将一个CSS sprite中的图像绘制到canvas中.首先创建一个Sp ...
- Spring Cloud 微服务架构解决方案
1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...
- 宠物收养所 (SBT)
宠物收养所 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得 ...
- How to copy projects into workspace of eclipse after importing the project?
在eclipse中如果已经导入了一个别处的项目但导入时没有选“copy projects into workspace”怎么办? 答案是删掉该项目重新导入... http://stackoverflo ...