jsp+sevlet使用Mysql存取图片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kkorkk/article/details/54311146

在web开发中,除了往数据库中存取文字信息外,还经常存取图片信息,今天我们就自己动手实现以下如何使用Mysql在jsp与servlet中存取图片信息。

首先看jsp,在jsp中首先添加一个按钮,按钮点击后将硬盘上指定的一张图片保存到数据库中,然后在当前页面中显示从数据库中读取到的图片,从而实现数据库的图片的存与取。看代码:

  <!-- index.jsp -->
  <body>
   	<form action="<%= request.getContextPath()%>/servlet/saveImage">
   		<input type="submit" value="保存图片到数据库">
   	</form>
   		<img src="<%= request.getContextPath()%>/servlet/getImage" alt="从数据库中读取到的图片" width="50%" height="50%">
  </body>

值得注意的是,保存图片至数据库与从数据库读取图片是由两个servlet完成的,第一个servlet--saveImage负责将本地图片保存到数据库中,第二个servlet--getImage负责读取数据库中的一张图片。

再来看servlet。首先是saveImage,这个servlet中,处理的思路是,先连接至数据库,然后往数据库中存入二进制的信息。直接看代码:

	//saveImage.java
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		Connection conn = null;
		PreparedStatement ps = null;
		InputStream in = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true","root","root");
			ps = conn.prepareStatement("insert into phototest values(?,?)");
			in = new FileInputStream("I://2.JPG");
			ps.setInt(1,1);
			ps.setBinaryStream(2, in,in.available());
			ps.executeUpdate();
			in.close();
			ps.close();
			conn.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
运行结果。首先看数据表。

在网页上点击保存图片按钮。


再看数据库,多了一条记录。


在这里使用的是Navicat软件进行查询,上次使用cmd命令查询,结果死机了。

然后,再来看getImage这个servlet。主体思路是这样,首先与数据库获取连接,然后查询数据库,将数据库中的二进制的信息固定为图片格式,然后将图片输出,注意setContentType()这个方法的使用。

	//getImage.java
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("image/jpg");
		Connection conn = null;
		InputStream in = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true","root","root");
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery("select * from phototest");
			rs.next();
			in = rs.getBinaryStream("photo");
			byte[] b = new byte[in.available()];
			in.read(b);
			response.getOutputStream().write(b);
			conn.close();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
上结果图。



展开阅读全文

没有更多推荐了,返回首页