SpringMVC从数据库中读取图片显示到JSP页面上

         摸索了一个多星期,终于解决了展示瀑布流照片墙的问题,我一直在思考照片放在哪里,前后想了很多方案。最开始是想把照片放在本地(我的E盘中),而数据库中只存照片的名字,但是这种方案遇到了瓶颈,我不知道img标签的src路径怎么写,不能直接写我本地的路径,在网上看了很多,说是要把图片放到服务器下。但是这样我又遇到了一个问题(问题真是频繁啊),因为我创建的是maven工程,之前把maven工程部署到自己配置的tomcat服务器上的时候各种错误,并且也没解决这个问题,我只好将maven工程部署到了STS自带的tomcat服务器上,那现在要把图片放在服务器的目录下,就需要找到tomcat的webapp目录,自己配置的服务器的话这个目录很好找,但是STS自带的tomcat服务器这个目录我又不知道在哪里,所以这种方案又放弃了。既然我找不到这个目录,网上又说可以把自己的某个文件夹当做服务器下的文件夹,所以把我想修改tomcat的server.xml文件,同样是由于找不到STS自带的tomcat服务器下的这个目录,所以这种方案我研究了很久还是不行。后来我又想着还是把图片转换成二进制流存到数据库里面吧,然后再从数据库中读出来,之前我一直想着把图片信息转换成json字符串传递到前台,传递到前台这个过程我是做到了,但是如何在前台将图片的二进制信息转换成图片显示呢,这个过程我又纠结了很久,我一直在想着在js中如何将图片的二进制流转换成图片显示,但是在网上找了很久之后,大家有的说js不能处理二进制流,这种办法也不适用。

      后来是通过把图片二进制信息写入到HttpServletResponse 的outputStream输出流中来展示的,最开始我只是在SpringMVC的一个controller中来处理这个过程,将这一个controller中同时处理,然后返回jsp页面,发现根本不行啊,下面是我当时错误的代码形式:

<span style="font-family:Comic Sans MS;">     @RequestMapping(value="/toLookImage",method = RequestMethod.GET)
     public String lookImage(@PathParam("id")int id,HttpServletRequest request,HttpServletResponse response,Model model){
    	 HttpSession seesion = request.getSession();
    	 
    	Photo photo=photoService.getPhotoById(new BigDecimal(id));
    	byte[] data=photo.getPhotoData();
    	response.setContentType("img/jpeg");
    	response.setCharacterEncoding("utf-8");
    	try {
    		
			OutputStream outputStream=response.getOutputStream();
			InputStream in=new ByteArrayInputStream(data);
			int len=0;
			byte[]buf=new byte[1024];
			while((len=in.read(buf,0,1024))!=-1){
				<span style="color:#cc0000;"><strong>outputStream.write(buf, 0, len);</strong></span>
			}
			outputStream.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "test";
 		
     }</span>

其中test.jsp便是我要显示图片的页面,原来我犯了很蠢的错误,应该让一个Controller来返回页面,另一个Controller来显示图片。终于这样我实现了从数据库中读取图片然后显示到页面上。下面来展示下我正确的代码流程:


(1)首先将图片上传然后存到数据库中,代码如下:

<span style="font-family:Comic Sans MS;">@Controller
@Configuration
@ImportResource("classpath:spring.xml")
@RequestMapping("/photo")
public class FileUploadController {
	
	@Resource
	private IPhotoService photoService;
	@RequestMapping(value="/tofile")
   public String toFileUpLoad(HttpServletRequest request,Model model){
	   return "fileUpLoad";
   }
	//@Value("#{settings['picPath.picUrl']}")
	@Value("${picUrl}")
	private  String picUrl;
	
	public void setPicUrl(String picUrl) {
		this.picUrl = picUrl;
	}
	@RequestMapping("/addAction.do")
	@ResponseBody//将返回结果写到response中
  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
这是一个完整的Web应用程序开发流程,需要涉及到前端页面设计、后端Java代码编写、数据库操作等多个方面。以下是一些可能有用的提示: 1. 登录注册页面的设计可以使用HTML、CSS和JavaScript等前端技术,与后端Java代码结合起来实现用户的注册和登录功能。需要注意密码加密、输入验证等安全问题。 2. JavaBean类是一个用于存储数据的普通Java类,需要实现Serializable接口以便于在不同的页面之间传递数据。可以使用IDE自动生成JavaBean类的代码。 3. 菜单界面可以使用JSP页面实现,需要从数据库读取菜品信息并动态生成HTML代码。用户点击菜品后可以跳转到菜品详情页面,也可以将菜品添加到购物车。 4. 购物车界面同样可以使用JSP页面实现,需要从数据库读取购物车的商品信息并动态生成HTML代码。用户可以修改购物车的商品数量、删除商品等操作,最终需要计算出总价格并显示页面上。 5. Servlet类是一个用于处理HTTP请求的Java类,可以用于处理菜品显示、购物车操作等多个功能。需要注意多线程安全、异常处理等问题,也可以使用框架如SpringMVC简化开发过程。 6. 数据库操作可以使用JDBC或ORM框架如Hibernate等实现。需要设计合适的数据库表结构,存储菜品信息、用户信息、购物车信息等数据。 以上是一个简单的Web应用程序开发流程,具体实现过程可能会涉及到更多的细节和技术。建议使用IDE如Eclipse或IntelliJ IDEA等进行开发,可以大大提高开发效率。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值