如何将存储在服务器上的图片显示当页面中?
我通过一个jsp页面,将商品信息和图片路径保存到数据库中.而图片保存在tomcat服务器中.想通过访问另外一个jsp来展示出商品信息和图片,但图片一直加载不上去,查看网页源代码,显示URL加载失败.
请问大家如何解决?
下面是我的代码:
addproduct.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${msg }
<form action="${pageContext.request.contextPath }/servlet/addProductServlet" method="post" enctype="multipart/form-data">
商品名称:<input type="text" name="name"/><br/>
商品价格:<input type="text" name="price"/><br/>
商品数量:<input type="text" name="pnum"/><br/>
上传图片:<input type="file" name="upfile"/><br/>
<input type="submit" name="添加"/><br/>
</form>
</body>
</html>
AddProductServlet.java
package cn.itcast.servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import cn.itcast.domain.Product;
import cn.itcast.service.ProductService;
import com.sun.org.apache.commons.beanutils.BeanUtils;
public class AddProductServlet 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 {
//创建一个工厂对象
DiskFileItemFactory dfi = new DiskFileItemFactory();
//创建一个核心上传类对象
ServletFileUpload sfu = new ServletFileUpload(dfi);
//设置单个文件的上传大小
sfu.setFileSizeMax(1024*1024);
//设置解决中文文件名乱码问题
sfu.setHeaderEncoding("utf-8");
//解析request,将解析结果封装到一个FileItem对象中,并将该对象保存到List集合中
try {
List<FileItem> list = sfu.parseRequest(request);
//创建一个结合用于存储name-value的对应关系
Map<String,Object> map=new HashMap<String, Object>();
Product product = new Product();
//对list集合进行遍历
for(FileItem fi:list){
//判断元素是普通输入型,还是文件上传项
if(fi.isFormField()){
String name=fi.getFieldName();
String value=fi.getString("utf-8");
map.put(name, value);
}else{
String fieldName = fi.getFieldName();
//获得上传文件的名字
String filename = fi.getName();
//由于不同浏览器获得结果可能不同,所以进行截取处理
filename = filename.substring(filename.lastIndexOf("."));
//为了使存储到文件不重名,再次对文件名进行处理
filename=UUID.randomUUID()+filename;
//获得存储文件的绝对路径
String path = getServletContext().getRealPath("/images");
//String path = "\\images";
//获得上传文件的输入流
InputStream in = request.getInputStream();
//创建输出流
FileOutputStream fos = new FileOutputStream(path+"\\"+filename);
//进行流对接
byte[] b=new byte[1024];
int len;
while((len=in.read(b))!=-1){
fos.write(b, 0, len);
}
fos.close();
//注意我这里是把文件在服务器中的全路径的地址作为purl存入到了服务器中.
//下一次获取时,记得尝试用这个purl搞出来一个输入流.
map.put("id", UUID.randomUUID().toString());
map.put("purl", path+"\\"+filename);
}
}
//将map集合中的包含的键值关系队,封装到product对象中
BeanUtils.populate(product, map);
//调用业务逻辑
ProductService ps=new ProductService();
boolean b=ps.addProduct(product);
//分发转向
if(b==true){
//System.out.println("添加商品成功...");
request.getRequestDispatcher("/servlet/productListServlet").forward(request, response);
}else{
request.setAttribute("msg", "商品添加失败...");
request.getRequestDispatcher("/addProduct.jsp").forward(request, response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
ProductListServlet.java
package cn.itcast.servlet;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.itcast.domain.Product;
import cn.itcast.service.ProductService;
public class ProductListServlet 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 {
ProductService ps = new ProductService();
List<Product> list=ps.getAllProducts();
request.setAttribute("list", list);
request.getRequestDispatcher("/productlist.jsp").forward(request, response);
}
}
ProductService
package cn.itcast.service;
import java.sql.SQLException;
import java.util.List;
import cn.itcast.dao.ProductDao;
import cn.itcast.domain.Product;
public class ProductService {
ProductDao pd=new ProductDao();
public Boolean addProduct(Product product) {
try {
return pd.insertProduct(product);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public List<Product> getAllProducts() {
try {
return pd.getAllProducts();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
ProductDao
package cn.itcast.dao;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import utils.C3P0Util;
import cn.itcast.domain.Product;
public class ProductDao {
QueryRunner qr=new QueryRunner(C3P0Util.getDataSource());
public Boolean insertProduct(Product product) throws SQLException {
int i = qr.update("INSERT INTO products VALUES(?,?,?,?,?)", product.getId(),product.getName(),product.getPrice(),product.getPnum(),product.getPurl());
if(i>0){
return true;
}
return false;
}
public List<Product> getAllProducts() throws SQLException {
return qr.query("SELECT * FROM products", new BeanListHandler<Product>(Product.class));
}
}
Product[
package cn.itcast.domain;
public class Product {
private String id;
private String name;
private double price;
private int pnum;
private String purl;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPnum() {
return pnum;
}
public void setPnum(int pnum) {
this.pnum = pnum;
}
public String getPurl() {
return purl;
}
public void setPurl(String purl) {
this.purl = purl;
}
}