基於jsp、servlet、MySQL 實現讀取顯示資料庫中的圖片
- 首先介紹mysql資料庫表的資訊:
CREATE TABLE `imgtest` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '圖片id',
`name` varchar(20) NOT NULL COMMENT '名稱',
`image` blob NOT NULL COMMENT '照片',
PRIMARY KEY (`id`)
)
注意:圖片儲存為 blob格式,直接儲存在資料庫中,而沒有選擇儲存路徑
2.介紹專案檔案結構,我使用的是 MyEclipse
3.解析主要程式碼
ImageBean.java 為與表結構對應的bean類:
public class ImageBean {
private int id; // 圖片id
private String name; // 圖片名字
private InputStream inStream; // 圖片位元組流
.....此處省略get和set方法
}
JDBCUtil.java 類包含資料庫的連線操作和關閉操作,此處省略,詳見附件程式碼
GeneralDao.java 包含通用的增刪查改操作,這裡只給出兩個用到的查詢函式:
// 查詢,返回一個物件
public static Object query(String sql, Object[] values, RowMapper rowMapper) {
Object object = null;
Connection conn = JDBCUtil.getConn();
PreparedStatement preStmt = null;
ResultSet rs = null; // 查詢結果集
try {
preStmt= conn.prepareStatement(sql);
for(int i =0;i<values.length;i++)
preStmt.setObject(i+1 , values[i]); // 將查詢引數放入sql語句中
rs = preStmt.executeQuery();
object = rowMapper.rowMapping(rs); // 對映為一個物件
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.closeConn(rs,preStmt,conn);
}
return object;
}
// 查詢,返回一組物件
public static List query(String sql, Object[] values, RowMapperList rowMapperList) {
List list = null;
Connection conn = JDBCUtil.getConn();
PreparedStatement preStmt = null;
ResultSet rs = null;
try {
preStmt= conn.prepareStatement(sql);
for(int i =0;i<values.length;i++)
preStmt.setObject(i+1, values[i]);
rs = preStmt.executeQuery();
list = rowMapperList.rowMapping(rs); // 對映為一個list
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUtil.closeConn(rs,preStmt,conn);
}
if (list == null || list.isEmpty() || list.size() == 0) {
return null;
}
return list;
}
RowMapper.java 和 RowMapperList.java 分別是兩個介面,供內部類實現
RowMapper.java :
public interface RowMapper {
public Object rowMapping(ResultSet rs) throws SQLException;
}
RowMapperList.java :
public interface RowMapperList {
public List rowMapping(ResultSet rs) throws SQLException;
}
ImageDao.java 裡面是對資料庫表的詳細操作:
public class ImageDao {
// 查詢所有記錄
public static List<ImageBean> query(String sql) {
Object[] values = new Object[] {};
ImageRML rowMapperList = new ImageRML();
List<ImageBean> list = GeneralDao.query(sql, values, rowMapperList);
return list;
}
// 根據id,查詢圖片位元組流
public static InputStream queryImgStream(int id) {
String sql = "select image from imgtest where id = ?";
Object[] values = new Object[] {id};
ImageRM rowMapper = new ImageRM();
ImageBean imageBean = (ImageBean)GeneralDao.query(sql, values, rowMapper);
// 如果查詢結果為空
if (imageBean.equals(null)) {
return null;
}
return imageBean.getInStream();
}
}
// 一條記錄對映
class ImageRM implements RowMapper {
@Override
public Object rowMapping(ResultSet rs) throws SQLException {
if (rs.next()) {
ImageBean imageBean = new ImageBean();
// 獲取圖片位元組
imageBean.setInStream(rs.getBinaryStream("image"));
return imageBean;
}
return null;
}
}
// 一組記錄對映
class ImageRML implements RowMapperList {
public List<ImageBean> rowMapping(ResultSet rs) throws SQLException
{
List<ImageBean> list = new ArrayList<ImageBean>();
// 如果rs有資料
if (rs.next()) {
do {
ImageBean imageBean = new ImageBean();
imageBean.setId(rs.getInt("id"));
imageBean.setName(rs.getString("name"));
list.add(imageBean);
} while (rs.next());
}
else {
return null;
}
return list;
}
}
ImageOutServlet.java 為顯示圖片的servlet:
public class ImageOutServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 獲取請求傳過來的id,對應的就是圖片的id
String temp = request.getParameter("id");
int id = Integer.parseInt(temp);
// 獲取圖片位元組流
InputStream inStream = ImageDao.queryImgStream(id);
// 建立圖片輸出的輸出流
ServletOutputStream soutStream = response.getOutputStream();
if (inStream.equals(null)) {
soutStream.println("圖片無法顯示 !<br>");
} else {
// 定義位元組流緩衝陣列
byte[] buffer = new byte[1024];
// 迴圈輸出位元組流, 為空時,read()返回 -1
while (inStream.read(buffer) != -1) {
soutStream.write(buffer);
}
// 輸入完畢,清楚緩衝
soutStream.flush();
soutStream.close();
}
}
}
4.jsp顯示頁面:
<body>
<%
String sql = "select id,name from imgtest";
List<ImageBean> list = ImageDao.query(sql);
// 如果結果集不為空
if (list.size() > 0) {
%>
<table>
<th>id</th><th>名稱</th><th>圖片</th>
<%
for (ImageBean bean : list) {
%>
<tr>
<td><%=bean.getId() %></td>
<td><%=bean.getName() %></td>
<!-- 通過bean.getId() 將圖片id傳給servlet,然後返回顯示 -->
<!-- 這裡 src 路徑,要根據目錄結構來確定,如果圖片顯示個X,大多是路徑問題 -->
<td><img style="width:50px;height:50px" src="servlet/ImageOutServlet?id=<%=bean.getId()%>"></td>
</tr>
<%
} // for
}// if
%>
</table>
</body>
5.最後把專案部署到伺服器(tomcat)上,然後啟動,在瀏覽器位址列輸入:http://localhost:8089/ImageShow/ShowImg.jsp,我的埠為8089,你們根據自己的埠來。顯示結果為:
辛苦大家看到最後,可能之間的資料庫操作略顯麻煩,但那是為了我專案的所有表的操作的方便,以及程式碼複用,沒有涉及到什麼框架。
如果為了儘快看到效果,也可以直接將資料庫查詢操作放在jsp中和servlet中,根據自己需要來。
程式碼還存在很多不足,還請見諒,普通學生水平。有什麼意見,儘管提出,大家互相交流。
過幾天會接著貼上專案地址
這裡附上 碼雲地址,裡面包含了兩種圖片上傳方式,由於能力有限,難免會有錯誤和侷限的地方,請多包含
https://gitee.com/sys_code/ImageShow
相關推薦
基於jsp、servlet、MySQL 實現讀取顯示資料庫中的圖片
首先介紹mysql資料庫表的資訊: CREATE TABLE `imgtest` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '圖片id', `name` varchar(20) NOT NUL
JSP、servlet、SQL三者之間的數據傳遞
gre setattr == lec iterator connect cti 輸出 erp JSP、servlet、SQL三者之間的數據傳遞 博客分類: web開發 JSPservletSQL數據庫連接池web開發 前言: 最近一直在做WEB
JSP、Servlet、JDBC學習筆記
html con bat 什麽 cal servlet das www 所有 WEB的學習 * 服務器 * 網絡的架構(面試題) * C/S client/server 客戶端/服務器端 例子:QQ 快播 暴風影音 * 優點:交互性好,服務器壓力小。 * 缺點:客戶端更新了
JSP + Servlet + JDBC + Mysql 實現增刪改查 課程管理系統
1.專案目錄結構 2.專案環境 Eclipse IDE MYSQL jdk tomcat jar包 3.資料庫相關配置 先建立一個course的資料庫名,然後在建立一個course的表 要注意將id欄位 自動遞增 4.原始碼  
jsp、servlet、form表單提交過程中的地址(相對和絕對)
今天終於理解這個地址的問題,對於jsp頁面或者是servlet中的相對地址和絕對地址,這裡我需要說的幾點:首先對於相對地址來說:Jsp頁面我現在有一個專案,名稱是shengsiyuan,然後webroot下面有一個資料夾session,session下面有兩個jsp頁面,一個
Java基礎、Java集合、多執行緒、JDBC、HTTP、JSP、Servlet、Struts面試題彙總(附答案)
[Java基礎] 1.”==”和equals方法有什麼區別? 答:==是運算子,equals是方法,方法可以通過重寫改變其行為,如String的equals就是比較字串內容。 2. switch語句能否作用在byte上,能否作用在long上,能否作用在String上?
tomcat、servlet、JSP、JSTL版本支援對應表
Tomcat版本 Servlet版本 Jsp版本 Jstl版本 6.0.x 2.5 2.1 1.2、1.1.x 5.5.x 2.4 2.0 1.1.x 5.0.x 2.4 2.0 1.1 4.1.x 2.3 1.2 1.0
基於jsp和servlet,通過複選框實現批量刪除的功能
複選框實現批量刪除 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java
013-Spring Boot web【二】靜態資源、Servlet、Filter、listenter
ces 其中 bean response cat 使用 修改配置 dac tostring 一、靜態資源 1.1、webapp默認支持靜態資源 在src/main/webapp下建立user.html默認支持訪問 1.2、默認內置靜態資源目錄。可被直接訪問 查看包:
jsp和servlet操作mysql中文亂碼問題的解決辦法
inux com 過濾 國際化 出現 conf onf my.cnf pos 轉載:http://www.jb51.net/article/49253.htm 首先看是從什麽地方開始出現的亂碼,只要統一編碼,就不會出現亂碼,下面以uft-8(個人認為最好)為例,詳細說明
spring boot 入門(八)filter、servlet、listener
spring boot 入門(八)servlet、filter、listener 1. filter spring boot有兩種方式來配置filter 1.1 Servlet 3.0新特性,以註解方式配置Filter,需在啟動類上加入@ServletComponentSc
用分離、附加的方式實現sql server資料庫的備份和還原
一、資料庫分離、附加的說明 SQL Server提供了“分離/附加”資料庫、“備份/還原”資料庫、複製資料庫等多種資料庫的備份和恢復方法。這裡介紹一種學習中常用的“分離/附加”方法,類似於大家熟悉的“檔案拷貝”方法,即把資料庫檔案(.MDF)和對應的日誌檔案(.LDF)再拷貝到任何需要恢復這個資料庫的系統磁
C#實現對SQL資料庫中的表的查詢、新增、修改、刪除資料
經常用到的物件有:SqlConnection,SqlAdapter,SqlCommand、Dataset、DataGrid和DataReader等,以SqlConnection,SqlAdapter,SqlCommand、Dataset、DataGrid物件,操作SQL的例
商城專案小總結(基於jsp和servlet的Java Web開發)
商品的查詢和刪除操作與往常一致,這裡著重說明的是商品的新增和修改。新增商品需要上傳照片,因此要用到檔案上傳下載的知識。檔案的上傳流程大致為:首先建立一個檔案解析工廠,接著通過解析工廠建立一個檔案解析器,解析器是用來解析request物件中的資訊,就是新增商品jsp頁面中,input輸入框中的name屬性。解
Filter、Servlet、Listener區別與聯絡
1. Filter實現javax.servlet.Filter介面,在web.xml中配置與標籤指定使用哪個Filter實現類過濾哪些URL連結。只在web啟動時進行初始化操作。filter 流程是線性的, url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個f
SpringBoot2伺服器屬性配置詳解-Server、SSL、Servlet、Tomcat、undertow、jetty
server server.address= # 定義一個伺服器將監聽的IP地址 Network address to whi
利用java反射機制實現讀取excel表格中的資料
如果直接把excel表格中的資料匯入資料庫,首先應該將excel中的資料讀取出來。 為了實現程式碼重用,所以使用了Object,而最終的結果是要獲取一個list如List<User>、List<Book>等,所以需要使用泛型機制去實現。下面會給出程式
使用Python實現讀取Excel表格中的資料
本案例的實現是通過使用第三方xlrd,關於xlrd的相關文章請自行百度,教程很多,不做詳解。 #-*- coding:utf-8 -*- import xdrlib ,sys imp
SQL 2008R2問題:使用者、組或角色'XXX'在當前資料庫中已存在?
為一個數據庫新增一個使用者或者對映資料庫時,提示以下錯誤資訊: 使用者、組或角色 '*****' 在當前資料庫中已存在。 (Microsoft SQLServer, 錯誤 : 15023) 問題原因:在還原資料庫的過程中,在其它sql server伺服器上進行還原之後,會
python獲取系統記憶體、CPU、磁碟、平均負載資訊並儲存到資料庫中
本主題主要考察的是python os模組呼叫linux命令、模組、函式呼叫以及通過python操縱資料庫。 假設已經可以正常連線mysql資料庫了,儲存系統資訊的資料庫名稱為hostinfo,相關的四個資料表分別名為cpuinfo、meminfo、diskin