SpringMVC从本地磁盘读取图片显示到JSP页面上
来源:互联网 发布:mac怎么解压 编辑:程序博客网 时间:2024/05/29 13:15
上一篇博客是从数据库中读取图片的二进制信息流然后显示到JSP页面上,下面是将图片存储到我的本地磁盘E中,然后在数据库中只存图片的名字
将磁盘的路径写到配置文件中,从配置文件中将地址读取出来,图片显示的流程与前一篇博客的一样,只不过图片存储的地方不一样。
2)使用mybatis的generatorConfig.xml自动生成DAO类,至于生成过程我在之前也已经介绍过了。
到这里我的瀑布墙图片展示基本算是完成了,不知道还有没有更好的处理图片的方法。
将磁盘的路径写到配置文件中,从配置文件中将地址读取出来,图片显示的流程与前一篇博客的一样,只不过图片存储的地方不一样。
下面来展示我的实现流程.
(1)数据库中只保存图片的id和名字,我用的是oracle数据库,id是自增的,至于如何建表实现id自增等,我已经有博客介绍过这个,这里我展示下我自己写了一个工具类用来建表.
<span style="font-family:Comic Sans MS;">public class CreTableUtil {/** * * @param tableName * 创建表 */public void create(String tableName,JdbcTemplate jdbcTemplate){jdbcTemplate.execute("create table "+tableName+"(photo_id int,photo_data blob,photo_name varchar2(100),primary key(photo_id))");}/** * * @param seq * 创建序列 */public void createSequence(String seq,JdbcTemplate jdbcTemplate){String create_seq="create sequence "+seq +" start with 1 "+ "increment by 1 minvalue 1 maxvalue 999999 nocycle nocache";jdbcTemplate.execute(create_seq);}/** * 为id设置自增 */public void idIncrement(String tablename,String seq,JdbcTemplate jdbcTemplate){String sql="insert into "+ tablename+"(photo_id) values("+seq+".NEXTVAL)";jdbcTemplate.execute(sql);}/** * 创建触发器 */public void create_trigger(String tablename,String seq,String triggerName,JdbcTemplate jdbcTemplate){String creat_trig="create trigger "+triggerName+" before insert on "+tablename+" for each row begin select "+seq+".NEXTVAL into :new.photo_id from dual;end;";jdbcTemplate.execute(creat_trig);}}</span>
2)使用mybatis的generatorConfig.xml自动生成DAO类,至于生成过程我在之前也已经介绍过了。
最后生成的 PhotoModel类如下:
<span style="font-family:Comic Sans MS;">public class PhotoModel { private BigDecimal id; private String name; public BigDecimal getId() { return id; } public void setId(BigDecimal id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}</span>
PhotoModelDAO如下:
<span style="font-family:Comic Sans MS;">public interface PhotoModelDAO { int deleteByPrimaryKey(BigDecimal id); int insert(PhotoModel record); int insertSelective(PhotoModel record); PhotoModel selectByPrimaryKey(BigDecimal id); int updateByPrimaryKeySelective(PhotoModel record); int updateByPrimaryKey(PhotoModel record);}</span>
自己创建的Service接口 :IPhotoModelService
<span style="font-family:Comic Sans MS;">public interface IPhotoModelService {int insert(String pName);public PhotoModel getPhotoById(BigDecimal photoId);}</span>
Service实现类如下:
<span style="font-family:Comic Sans MS;">@Service("photoModelService")public class PhotoModelServiceImpl implements IPhotoModelService{@ResourcePhotoModelDAO photoModelDAO;public int insert(String pName) {PhotoModel pm=new PhotoModel();pm.setName(pName);return photoModelDAO.insert(pm);}public PhotoModel getPhotoById(BigDecimal photoId) {return photoModelDAO.selectByPrimaryKey(photoId);}}</span>
(3)将图片输出到JSP页面上和将数据库读出出来的信息转换成json字符串传递到前台
<span style="font-family:Comic Sans MS;">@Controller@Configuration@ImportResource("classpath:spring.xml")@RequestMapping("/showPicture")public class PhotoModelController extends HttpServlet{ private static final long serialVersionUID=95163763702302821L; @Value("${picUrl}") private String picUrl; @Resource private IPhotoModelService photoModelService; @RequestMapping("/toPicShow") public String toPicShow(){ return "waterfullPic"; } //根据请求的路径中的参数id,从本地磁盘中读取图片,picUrl是从配置文件中读取出来的 @RequestMapping("/tofindPic") public void picToJSP(@PathParam("id")int id,HttpServletRequest request,HttpServletResponse response){ PhotoModel photoModel=photoModelService.getPhotoById(new BigDecimal(id)); String photoName=photoModel.getName(); FileInputStream in; response.setContentType("application/octet-stream;charset=UTF-8"); try { //图片读取路径//in=new FileInputStream("E:\\picture\\"+photoName);<strong><span style="color:#cc0000;">in=new FileInputStream(picUrl+photoName);</span></strong>int i=in.available();byte[]data=new byte[i];in.read(data);in.close();//写图片OutputStream outputStream=new BufferedOutputStream(response.getOutputStream());outputStream.write(data);outputStream.flush();outputStream.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} } //从数据库中读取信息转换成json格式传递到前台 @RequestMapping("/picToJsonReturn.do") @ResponseBody public String picToJsonReturn(HttpServletRequest request,Model model){ System.out.println("aaaaa"); JSONArray jsonArray=new JSONArray(); for(int i=10;i<31;i++){ PhotoModel p=photoModelService.getPhotoById(new BigDecimal(i)); jsonArray.add(p); } return jsonArray.toString(); }}</span>
(4)前台页面显示图片
<span style="font-family:Comic Sans MS;"><body><div id="main"><div class="pin"><div class="box"> <!-- 通过从数据库中读出图片的二进制信息流显示图片的Controller处理路径 --> <!-- <img src="/Login_ssm_mav_picbyte/user/toLookImage?id=13"> --> <!-- 注意这里的访问路径是正确的是,之前因为在web.xml文件中写成了png,所以折腾了很久 --><!-- 通过从本地E盘读取图片显示图片 --><img src="/Login_ssm_mav_picbyte/showPicture/tofindPic?id=10"></div></div><div class="pin"><div class="box"> <!-- <img src='/Login_ssm_mav_picbyte/static/pic/img2.jpg'> --> <img src="/Login_ssm_mav_picbyte/showPicture/tofindPic?id=11"></div></div><div class="pin"><div class="box"> <img src="/Login_ssm_mav_picbyte/showPicture/tofindPic?id=12"></div></div><div class="pin"><div class="box"> <img src="/Login_ssm_mav_picbyte/showPicture/tofindPic?id=13"></div></div><div class="pin"><div class="box"> <img src="/Login_ssm_mav_picbyte/showPicture/tofindPic?id=14"></div></div></div></body></span>
waterfull.js代码如下:
<span style="font-family:Comic Sans MS;">window.onload=function(){/*当页面加载的时候调用函数*/ setInterval(function(){window.onscroll = sscroll();},1000);waterfall('main','pin');window.onscroll=sscroll();}/*之前将函数写在里面时一直实现不了,现在这样写在外面便可以了。*/function sscroll(){var pic;//原来要把变量定义在这里,之前定义在外面,就会出现undefined的错误$.ajax({async:false,type:'get',//get是获取数据,post是带数据的向服务器发送请求//url:'addAction.do',url:'picToJsonReturn.do',dataType:'json',success:function(data){pic=eval(data);//转换成js对象},error:function(data){alert("JSON数据获取失败,请联系管理员!");}});var dataInt={'data':[{'src':'img1.jpg'},{'src':'img2.jpg'},{'src':'img3.jpg'},{'src':'img4.jpg'},{'src':'img5.jpg'},{'src':'img6.jpg'}]};if(checkscrollside()){var oParent=document.getElementById('main');for(var i=0;i<pic.length;i++){var oPin=document.createElement('div');//添加元素节点oPin.className='pin';oParent.appendChild(oPin);var oBox=document.createElement('div');oBox.className='box';oPin.appendChild(oBox);var oImg=document.createElement('img');//oImg.src='/Login_ssm_mav_picbyte/static/pic/'+dataInt.data[i].src;//oImg.src=src='/Login_ssm_mav_picbyte/user/toLookImage?id='+pic[i].photoId;oImg.src=src='/Login_ssm_mav_picbyte/showPicture/tofindPic?id='+pic[i].id;//oImg.src='http://localhost:9988/pic/'+pic[i].photoName;oBox.appendChild(oImg);}waterfall('main','pin');}}function waterfall(parent,pin){ var oParent=document.getElementById(parent);//父级对象 var aPin=getClassObj(oParent,pin);//获取存储pin的数组的pin var iPinW=aPin[0].offsetWidth;//一个块框pin的宽 var num=Math.floor(document.documentElement.clientWidth/iPinW);//每行中能容纳的pin的个数[窗口的宽度除以一个块框的宽度] oParent.style.cssText='width:'+iPinW*num+'px;margin:0 auto;';//设置父级居中样式:定宽+自动水平外边距 var pinHArr=[];//用于存储没列中的所有块框相加的高度 for(var i=0;i<aPin.length;i++){ var pinH=aPin[i].offsetHeight; if(i<num){ pinHArr[i]=pinH;//第一行中的num个块框pin先添加进数组pinHrr }else{ var minH=Math.min.apply(null,pinHArr);//数组pinHArr中的最小值 var minHIndex=getminHIndex(pinHArr,minH);//获取高度最小的pin的index aPin[i].style.position='absolute';//设置绝对偏移 aPin[i].style.top=minH+'px'; aPin[i].style.left=aPin[minHIndex].offsetLeft+'px'; pinHArr[minHIndex]+=aPin[i].offsetHeight;//更新添加了快框后的列高 } }} //获取高度最小的pin 的indexfunction getminHIndex(arr,minH){for(var i in arr){if(arr[i]==minH){return i;}}}/*通过父级和子元素的class名称获取该同类子元素的数组*/function getClassObj(parent,className){var obj=parent.getElementsByTagName('*');//获取父类元素的所有子元素var pinS=[];//创建一个数组,用于收集子元素for(var i=0;i<obj.length;i++){//遍历子元素,判断类别,压入数组if(obj[i].className==className){pinS.push(obj[i]);}}return pinS;}function checkscrollside(){var oParent=document.getElementById('main');var aPin=getClassObj(oParent,'pin');var lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);//创建【触发添加块框的的函数waterfall()】的高度:最后一个块框的与网页顶部的距离+自身高的一半(未滚到底便开始加载) //网页中获取滚动条卷去部分的高度 var scrollTop=document.documentElement.scrollTop||document.body.scrollTop; var documentH=document.documentElement.clientHeight;//页面高度 return (lastPinH<scrollTop+documentH)?true:false;//到达指定高度后返回true,触发waterfall()函数}</span>
到这里我的瀑布墙图片展示基本算是完成了,不知道还有没有更好的处理图片的方法。
1 2
- SpringMVC从本地磁盘读取图片显示到JSP页面上
- SpringMVC从数据库中读取图片显示到JSP页面上
- SpringMVC从数据库中读取图片显示到JSP页面上
- 读取本地图片显示在JSP页面上
- SpringMVC读取本地图片(byte[]流方式)显示到前端页面
- springmvc后台获取图片,到jsp页面显示
- springmvc后台获取图片,到jsp页面显示
- 把mysql读取的图片显示在jsp 页面上
- 本地tomcat服务器上的图片显示到jsp
- spring读取指定路径图片显示到jsp页面
- springmvc读取本地图片并显示
- 图片显示到jsp页面
- java 通过流的方式读取本地图片并显示在jsp 页面上(类型以jpg、png等结尾的图片)
- JSP页面如何显示本地图片
- jsp页面加载本地路径图片显示
- JSP页面如何显示本地图片
- 从网上读取图片在本地显示
- struts保存图片到数据库 ,从数据库中读取图片显示到页面
- getUTF8StringFromGBKString
- 浏览器的工作原理:新式网络浏览器幕后揭秘(http://www.kuqin.com/web/20121209/333935.html)
- Listener中引入service
- Windows + MemCached
- 在Ubuntu 14.04中安装gcc4.4.7【转】
- SpringMVC从本地磁盘读取图片显示到JSP页面上
- 扩展Django:实现自己的manage命令
- 黑马程序员——java之集合总结
- 【Java基础专题】编码与乱码
- 九度 题目1006:ZOJ问题
- FFmpeg 获取H264流中的sps pps
- 突然想到Lua中的协程其实是这样的
- 灰度图像--图像增强 直方图均衡化(Histogram equalization)
- JSP 时间格式化