`

jsp用流从数据库读取图片, 如果有图片就显示,没有则显示默认的图片

    博客分类:
  • jsp
阅读更多
[size=medium]数据库中存放的头像是byte[] 字节的,在jsp页面上根据用户的id用流从数据库中读取图片。但是如果用户没有头像的话,那么在页面上显示的就是一个图片的小白框框,难看死了,所以如果用户没有头像的话,就给用户一个默认的头像。
在User类中:
private byte img[];

在UserAction类中:
ClientUser user = new ClientUser();
user=UserService.getUserByUserId(sqlSession,user);				request.getSession().setAttribute("LoginUserImg", user.getImg().length);
//在这里需要用byte[]对象的length属性判断是否存放了图片,如果length为0,那么就没有图片,反之则有。

在jsp页面中:
<c:if test="${LoginUserImg==0 }">
					<img src="${pageContext.request.contextPath }/images/head.jpg"
						alt=" " width="100" height="118" align="middle" />
				</c:if>
				<c:if test="${LoginUserImg!=0 }">
					<img
						src="userImg.jsp?id=${id}"
						alt="${id}"
						width="100" height="118" align="middle">
				</c:if>

userImg.jsp:
<%@page contentType="image/jpeg; charset=utf8"%>
<%@page import="java.io.OutputStream"%>
<%
	String id = request.getParameter("id"); 
	Boolean ret = true;
	id = id == null ? "" : id.trim();
	userId = userId == null ? "" : userId.trim();
	OutputStream os = response.getOutputStream();
	if (!id.isEmpty()) {

		ret =UserService.getUserImgById(
				id, os); 
	}  
	os.flush();
	os.close();
	os = null;
	response.flushBuffer();//下面这三句是一定要加上的,否则就会报错。
	out.clear();
	out = pageContext.pushBody();
%>

=================================================================================
后来发现上面的办法并不是最好的解决办法,比如对象User和ClientUser都有byte[] img的属相,那么再Action类中就要分别根据主键id获取对象信息的img属性,然后放到容器中判断byte[]的长度是否为0.那么这是很繁琐的。因此,我想到了一个更好的方法,那就是把读取默认图片也封装成一个方法。java类代码如下:
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

public class DefaultImage {
	public static int getUserImg(OutputStream out, String path) {
		int size = -1;
		FileInputStream is = null;
		try {
			is = new FileInputStream(path);
			// size = is.available(); // 得到文件大小
			byte[] bytes = new byte[1024];
			int len = 0;
			// 开始读取图片信息
			while (-1 != (len = is.read(bytes))) {
				out.write(bytes, 0, len);
				size += len;
			}
			out.flush();
			out.close();
			is.close();
			is = null;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return size;

	}
} 

在jsp页面中,这个和上面的一样,没有变化,只是传递一个id到userImg.jsp中。
<c:if test="${LoginUserImg==0 }">
					<img src="${pageContext.request.contextPath }/images/head.jpg"
						alt=" " width="100" height="118" align="middle" />
				</c:if>
				<c:if test="${LoginUserImg!=0 }">
					<img
						src="userImg.jsp?id=${id}"
						alt="${id}"
						width="100" height="118" align="middle">
				</c:if>

userImg.jsp:
<%@page contentType="image/jpeg; charset=utf8"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="com.tools.DefaultImage"%>
<%
	String id = request.getParameter("id");
	String userId = request.getParameter("uid");
	int imgLen = 0;
	id = id == null ? "" : id.trim();/**注意这个地方必须判断一下**/
	userId = userId == null ? "" : userId.trim();
	OutputStream os = response.getOutputStream();

	if (!id.isEmpty()) {
		imgLen = UserService.getUserImgById(
				id, os);//Get Validate Information
	} else if (!userId.isEmpty()) {
		imgLen =UserService
				.getUserImgByUserId(userId, os); 
	}
        //开始读取默认图片
	[color=red]String path = request.getRealPath("/images/head.jpg");[/color]
        //获取项目下的相对路径
	if (imgLen <= 0) {
		imgLen = DefaultImage.getUserImg(os, path);
	} else {
		os.flush();
		os.close();
	}
	os = null;
	response.flushBuffer();
	out.clear();
	out = pageContext.pushBody();
%> 
  
[/size]
分享到:
评论
3 楼 2213127617 2017-04-19  
  
2 楼 2213127617 2017-04-19  
[/flash]
1 楼 yuruei2000 2012-04-16  
不错,挺棒!

相关推荐

    从Excel中读取数据导入到数据库中

    本文将详细阐述如何从Excel文件中读取数据并将其导入到数据库中,重点处理合并单元格和超过4000字符的数据列。 首先,我们需要理解Excel是常用的数据存储和处理工具,而数据库如MySQL、SQL Server、Oracle等则用于...

    JSP存到数据库乱码解决办法

    这样可以确保从数据库读取或写入的数据都是按照UTF-8编码进行的,从而避免乱码问题。 #### 3. 总结 通过以上配置,我们可以有效地解决JSP项目中常见的乱码问题。需要注意的是,为了避免各种字符集不匹配导致的问题...

    jsp页面显示中文乱码解决.rar

    本主题聚焦于“jsp页面显示中文乱码解决”,这是一个典型的问题,许多开发者在处理包含中文字符的JSP页面时可能会遇到。让我们深入探讨这个问题,并提供一系列解决方案。 1. **字符编码基础** - **字符集与编码**...

    JSP中连接SQL Server2005数据库

    在JavaServer Pages (JSP) 中连接到SQL Server 2005数据库是Web开发中的一个常见任务,这个过程涉及到几个关键步骤和技术。首先,我们需要理解JSP的本质,它是一种基于Java的服务器端脚本语言,用于生成动态网页。而...

    JSP对Oracle数据库的操作

    在本文中,我们将探讨如何使用JSP(JavaServer Pages)连接到Oracle数据库并执行基本的CRUD(创建、读取、更新、删除)操作。首先,我们需要了解JDBC(Java Database Connectivity),它是Java中用于与各种数据库...

    jsp连接mysql数据库

    此外,标签中的“jsq”可能是笔误,但如果你指的是JavaScript,你可以在JSP页面中结合使用JavaScript进行前端处理,但数据库操作仍然需要在服务器端完成。 通过这样的方式,你可以构建一个简单的JSP应用,读取、...

    jsp对数据库的增删改查

    **JSP(JavaServer Pages)对数据库的增删改查是Web开发中常见的功能实现,主要涉及前后端交互以及数据库操作。在这个过程中,JSP作为服务器端脚本语言,负责接收前端页面传递的数据,通过连接MySQL这样的关系型...

    jsp项目答辩文档总结

    本文档介绍了如何实现师资未选择任何值时出现老师信息,包括直接给老师ID一个默认值和从数据库读取第一个老师的ID号两种方法。 5. 数据处理后转换到原页面 在JSP项目中,数据处理是一个常见的问题。本文档介绍了...

    JSP Servlet 图片上传

    在实际应用中,如果需要持久化图片数据,可以将图片数据存储到数据库的BLOB字段,Oracle数据库支持这种操作。 7. **MyEclipse集成** MyEclipse作为强大的Java EE开发工具,提供了创建、调试JSP和Servlet的便利。...

    5种JSP页面显示为乱码的解决方法

    如果使用IDE(如Eclipse),也可以在全局设置中修改JSP文件的默认编码。然而,这种方法可能导致在多个文件包含同一个JSP文件时产生冲突,因此更好的做法是在项目的`web.xml`配置文件中全局设定JSP文件的编码: ```...

    JSP做的考勤系统用的是access数据库

    结合这些知识点,我们可以理解这个考勤系统是使用JSP技术开发的,数据库后端选择了轻量级的Access。开发者使用MyEclipse作为IDE,利用其强大的开发和调试工具。JavaBean被用来封装和管理业务逻辑,Servlet处理HTTP...

    springboot连接数据库,连接redis,jsp展示数据

    可以将数据库查询的结果保存到Redis,当用户请求时,首先检查Redis中是否有对应的数据,如果有则直接返回,无则查询数据库并存入Redis。这可以通过Spring Cache抽象层来实现,它可以与多种缓存系统(包括Redis)无缝...

    cookie保存并读取用户登录信息

    2. **Cookie的属性**:Cookie可以设置过期时间(`setMaxAge()`),默认情况下,关闭浏览器后Cookie就会消失。若要使其持久化,可以设置非负的秒数。还可以设置Cookie的作用域(`setPath()`),限制其在哪些URL下有效...

    JSP中文乱码处理JSP中文乱码处理

    例如,JBuilder默认使用GBK编码,而Eclipse则遵循JSP规范,如果没有明确指定,页面默认为ISO-8859-1编码。因此,为了处理中文字符,最好在JSP文件头部使用`&lt;%@ page pageEncoding="GBK" %&gt;`或指定你需要的编码格式。...

    解决JSP中文显示问题的几个方法

    在开发基于Java的Web应用时,经常会遇到中文乱码的问题,尤其是在处理用户输入或者从数据库读取数据的过程中。本文将详细介绍几种常见的解决JSP页面中文显示问题的方法。 #### 方法一:设置页面编码格式 在JSP页面...

    jsp入门教程

    - **Read(读取)**:使用JSP和JavaBean从数据库中读取数据。 - **Create(创建)**:向数据库中插入新的记录。 - **Update(更新)**:更新数据库中的记录。 - **Delete(删除)**:从数据库中删除记录。 - **使用JDBC操作...

Global site tag (gtag.js) - Google Analytics