卜若的代码笔记系列-Web系列-MVC框架-如何在mvc中请求一张图片,显示在页面jsp上-3003

1.好了,我们终于要有新的需求了,在我的
《3.如何使用@RequestMapping注解》里面讲授了如何使用@RequestMapping
进行请求映射
《4.关于@RequestMapping上传图片》里面讲授了如何传递图片(或许我会单独
开一张来讲如何传递文字啥的)

现在嘛,我提出了一个需求,我如何在前端请求
服务器,然后服务器就给我返回一张图片,并且下载到本地
,哈哈,这个感觉就有些挑战性了是吧


卜若的代码笔记系列是对每一个技术点进行故事性的
攻略,如果你有技术问题,欢迎发送邮件给我
[email protected]



好了,广告打到这儿,基本上以后每一篇卜若的代码笔记
都会有上三句哈~

现在开始go!

2.现在,我们简化需求,我定义一个
<href>
的标签,制作一个url请求发给服务器,并且将这个请求
映射到我们的服务器,接着,我们的服务器返回一个新的页面

并且将我们的图片放到这个页面上去。

好,这个流程看起来非常简单,先来一段代码

<body>
<a href="requestPic">请求图片</a>
</body>

使用这个,我们向服务器发送一个requestPic的请求,并且将这个请求映射到控制器当中去


当我们点击了这个请求之后,其实是发送了一个请求给我们的控制器,发送一个requestPic的请求
好了,我们接受到这个请求通过servlet发给控制器Controller。

接着,我们需要返回给我们的请求者一张图片。
于是我们可以直接使用response。
我们再来屡一下,我这里举个例子,因为我是菜鸡所以我知道身为菜鸡的各位缺的是啥。

我现在产生了一个新的需求,我的前端显示一张图片,于是我可以这样请求

<img src="http://localhost:8080/test/showImage.jpeg" height="80" width="80"/>

它其实是组装了一个url,并且将showImage.jpeg发给服务器然后转发给控制器。
我只需要response一个东西,就会顺着这个《请求线》返回给我们请求的页面。
换句话说

我控制器声明了一个负责解决showImage.jpeg的函数映射(一个策略)

    @RequestMapping("/showImage.jpeg")
    public String  showImage(HttpServletResponse response) throws Exception {  
            try{
                
                FileInputStream fis = new FileInputStream("D:\\temp\\test.jpeg"); // 以byte流的方式打开文件 d:\1.gif   
                int i=fis.available(); //得到文件大小   
                byte data[]=new byte[i];   
                fis.read(data);  //读数据   
                response.setContentType("image/*"); //设置返回的文件类型   
                OutputStream toClient=response.getOutputStream(); //得到向客户端输出二进制数据的对象   
                toClient.write(data);  //输出数据   
                toClient.flush();  
                toClient.close();   
                fis.close();
                
                
                
            }catch(Exception e){
            e.printStackTrace();
            System.out.println("图片不存在");
            }
            
            return "success";
    }


    
ps:非常抱歉我这段代码是摘录自网上,但是我关浏览器的时候没有记录那个地址,如果有谁看到欢迎留言,把你送上去!

response之后,其实已经顺着请求线对请求做了回复。
我们再刷新一下页面,其实图片已经显示出来了。

然后整个请求流程是这样子的。但事实上,还有坑。
首先,我们的服务器是做不到物理穿透的,什么意思呢?就是说我们不能强行的从硬盘去读取图片,这特么就很恶心了。

然后我们应该如何解决呢?当然可以使用无所不能的i/o流啦~

具体代码看上面咯~

猜你喜欢

转载自blog.csdn.net/qq_37080133/article/details/82769753