目录
-
架构准备
-
步骤详解
-
实现效果
-
参考源码
架构准备
首先依旧是我们熟悉的架构准备环节:
步骤详解
在ImgC类中的编写doGet
方法,首先通过HttpServletRequest
获取参数action
的值,该参数表示要执行的操作。
如果action
的值是"getAllImgNames",则会获取指定目录下的所有图片文件名,并将文件名数组转换成JSON格式的响应。
如果action
的值是"getImgByName",则会根据图片名称获取对应的图片数据,并将图片数据作为响应输出。
以下是代码中使用到的工具类和方法的简要说明:
ImgUtil
:一个自定义的工具类,用于处理图片相关的操作。其中responseImg
方法用于响应图片数据。JsonUtil
:一个自定义的工具类,用于将对象转换为JSON格式的数据,并将其作为响应输出。
下面这个则是JsonUtil工具类:
工具类中的transJson
方法接受两个参数,一个是要转换成JSON格式的对象(obj
),另一个是HttpServletResponse
对象(resp
),用于向客户端发送响应。
在方法中,首先调用JSON.toJSONString(obj)
方法将对象转换为JSON格式的字符串。然后设置响应的Content-Type
为application/json;charset=utf-8
,指定响应的内容类型为JSON,同时指定字符编码为UTF-8。
最后,通过resp.getWriter().write(josn_string)
将JSON字符串作为响应输出给客户端。
然后是随机生成图片的工具类RandomImgC:
在doGet
方法中,首先通过File
类和指定的文件夹路径获取该文件夹下的所有文件名称,并将文件名数组存储在fileNames
变量中。
接下来,通过随机生成一个索引,从fileNames
数组中获取随机的图片文件名(imgName
),这样就获取到了随机的图片名称。
然后,通过调用ImgUtil
工具类的responseImg
方法,根据指定的图片路径和HttpServletResponse
对象,将随机图片作为响应输出。
最后,将生成的随机图片名称打印输出到日志中
下面是对应的工具类:
最后则是html与css有关知识编写,这里不做解释,附代码参考:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/vue/vue.min.js"></script> <style> .f{ display: flex; justify-content: space-around; } .f>div{ width: 300px; height: 350px; cursor: pointer; background-size: 300px 350px; margin-left: 30px; } .f>div:nth-child(odd){ background-color: lightgreen; } .f>div:nth-child(even){ background-color: lightcoral; } @keyframes xz { 0%{ transform: rotateY(0deg); background-image: url(""); }100%{ transform:rotateY(180deg); } } @keyframes xzr { 0% { transform: rotateY(180deg); } 100% { transform: rotateY(0deg); background-image: url(""); } } .xz{ animation: xz 1s linear 1 forwards; } .xzr{ animation: xzr 1s linear 1 forwards; } /* .z1,.z2,.z3{ width: 400px; height: 450px; position: absolute; } .z1{ top: 25px; left: 20px; background-color: aqua; } .z2{ top: 25px; left: 500px; background-color: lightcoral; } .z3{ top: 25px; left: 980px; background-color: lightgreen; } */ </style> </head> <body> <!-- 点击按钮实现图片切换 <img src="/randomImgC" alt="" width="400" height="450"><br> <button οnclick="location.reload()">换一个</button> --> <!-- <div class="f"> <div class="z1" id="img1" οnclick="changeImage1()"> <img id="Image1" alt="" width="400" height="450"> </div> <div class="z2" id="img2" οnclick="changeImage2()"> <img id="Image2" alt="" width="400" height="450"> </div> <div class="z3" id="img3" οnclick="changeImage3()"> <img id="Image3" alt="" width="400" height="450"> </div> </div> --> <div id="app"> <button οnclick="location.assign('/home.html')">进入后宫,观看佳丽三千</button> <div class="f"> <div v-for="i in 6" @click="xzImg($event,i)"></div> </div> <hr> <img src="/randomImgC" alt="" width="400" height="450"><br> <button οnclick="location.reload()">换一个</button> </div> </body> <script> /* let img1 = document.getElementById('img1'); function changeImage1() { let Image1 = document.getElementById("Image1"); Image1.src = "/randomImgC"; } let img2 = document.getElementById('img2'); function changeImage2() { let Image2 = document.getElementById("Image2"); Image2.src = "/randomImgC"; } let img3 = document.getElementById('img3'); function changeImage3() { let Image3 = document.getElementById("Image3"); Image3.src = "/randomImgC"; } */ new Vue({ el:'#app', data:{ //记录每个图片被点击的次数 arr:[0,0,0,0,0,0] }, methods:{ xzImg(e,i){ if(this.arr[i-1]%2){//1 e.target.style.backgroundImage='url()' e.target.className='xzr' console.log('xzr') }else{//0 e.target.style.backgroundImage='url(/randomImgC?'+i+')' e.target.className='xz' console.log('xz') } console.log(e.target,i,this.arr) this.arr[i-1]++ } } }) </script> </html>
实现效果:
将图片路径添加后,将会出现如下的几个隔行变色的方框,方框内将会显示你的图片路径对应的图片,这里我将图片路径进行了修改,所以没有显示图片(点击进行图片的旋转)。下面那一块就是一个一JavaWeb随机变换图片的效果