原生态JAVAEE酒店管理系统系列三

博主分享了在JAVAEE酒店管理系统中添加图片上传功能的过程,包括控制层代码的更新,DAO层中涉及图片添加和获取的方法,并提到了SQL语句。系统测试地址已给出,同时增加了用户名和密码的设置。
摘要由CSDN通过智能技术生成

最近刚回校,基本都在忙其他项目和自己的事。

接上之前的系列二,放上一部分控制层的代码。这次在里面加入了上传图片的功能。

package edu.fjnu.hotelsys.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import edu.fjnu.hotelsys.domain.Hotel;
import edu.fjnu.hotelsys.service.HotelService;
import edu.fjnu.hotelsys.service.impl.HotelServiceImpl;

public class HotelMgrServlet extends HttpServlet {

	private  HotelService hotelService = new HotelServiceImpl(); 
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		//获得当前web服务器的临时文件夹位置    上传的文件大,所以需要先缓存,然后再一并写入数据库
		File tempFile =new File(System.getProperty("java.io.tmpdir"));
		//在fileupload工具库中,任何一个输入域都是一个磁盘文件项  前端那些条条框框就是磁盘文件项,也叫普通表单域
		//图片就不是磁盘文件项,是文件上传域
		DiskFileItemFactory factory = new DiskFileItemFactory();
		
		factory.setSizeThreshold(4096);
		factory.setRepository(tempFile);
		
		ServletFileUpload sfu = new ServletFileUpload(factory);//过滤请求数据
		sfu.setSizeMax(5000000);
		
		List<FileItem>  fileItems = null ;
		
		String act =null;
		if(sfu.isMultipartContent(request)){ //判断是否是多段提交请求
			try {
				fileItems = sfu.parseRequest(request); //队请求过滤,获得所有文件项
				for(FileItem item :fileItems) {
					if(item.isFormField() && item.getFieldName().equals("act")){
						act =item.getString("utf-8");
						break;
					}
				}
			} catch (FileUploadException e) {
				e.printStackTrace();
			}
		}else 
			act = request.getParameter("act");
		
		if("create".equals(act)){
			try {
				this.create(request, response,fileItems);
			} catch (FileUploadException e) {
				e.printStackTrace();
			}
		}else if("loadAllHotel".equals(act)){
			this.loadAllHotel(request, response);
		}else if("forCreate".equals(act)){
			this.forCreate(request, response);
		}else if("del".equals(act)){
			this.deleteHotel(request, response);
		}else if("forUpdate".equals(act)){
			this.forUpdate(request, response);
		}else if("update".equals(act)){
			this.updateHotel(request, response);
		}else if("getpic".equals(act)){
			this.getHotelPic(request, response);
		}
	}
	
	/**
	 * 跳转到新建分店页面
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 * @author Harry
	 */
	private void forCreate (HttpServletRequest request, 
			HttpServletResponse response) throws ServletException, IOException{
		request.getRequestDispatcher("/jsps/hotel/input_hotel.jsp").forward(request, response);
	}
	/**
	 * 跳转到修改分店信息页面
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 * @author Harry
	 */
	private void forUpdate(HttpServletRequest request, 
			HttpServletResponse response) throws ServletException, IOException{
		int id = Integer.parseInt(request.getParameter("hotelId"));
		Hotel hotel = hotelService.findHotelById(id);
		System.out.println(hotel.getHotelName());
		request.setAttribute("hotel", hotel);
		request.getRequestDispatcher("/jsps/hotel/update_hotel.jsp").forward(request, response);
	}
	/**
	 * 创建分店
	 * @param request
	 * @param response
	 * @author Harry
	 * @param fileItems2 
	 * @throws IOException 
	 * @throws FileUploadException 
	 * @throws Exception 
	 */
	private void create (HttpServletRequest request, 
			HttpServletResponse response, List<FileItem> fileItems) throws IOException, FileUploadException {
		Hotel hotel = new Hotel();
	
		for(FileItem item:fileItems){
			if(item.isFormField() && item.getFieldName().equals("hotelname"))
				hotel.setHotelName(item.getString("utf-8"));
			else if(item.isFormField() && item.getFieldName().equals("hoteladdr"))
				hotel.setHotelAddr(item.getString("utf-8"));
			else if(item.isFormField() && item.getFieldName().equals("hotelphone"))
				hotel.setHotelPhone(item.getString("utf-8"));
			else if(!item.isFormField() && item.getFieldName().equals("hotelpic")){
				byte[] hotelPic = new byte[(int)item.getSize()];
				item.getInputStream().read(hotelPic,0,(int)item.getSize());
				hotel.setHotelPic(hotelPic);
			}
				
		}
		hotelService.addHotel(hotel);
		response.sendRedirect("HotelMgrServlet?act=loadAllHotel");
	}
	
	/**
	 * 显示所有分店信息
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 * @author Harry
	 */
	private void loadAllHotel(HttpServletRequest request, 
			HttpServletResponse response) throws ServletException, IOException{
		List<Hotel> hotelList = hotelService.loadAllHotel();
		request.setAttribute("hotelList", hotelList);
		request.getRequestDispatcher("/jsps/hotel/list_hotel.jsp").forward(request, response);
	}

	/**
	 * 删除分店
	 * @param request
	 * @param response
	 * @throws IOException
	 * @author Harry
	 */
	private void deleteHotel(HttpServletRequest request, 
			HttpServletResponse response) throws IOException{
		int id =Integer.parseInt(request.getParameter("hotelId"));
		hotelService.deleteHotel(id);
		response.sendRedirect("HotelMgrServlet?act=loadAllHotel");
		
	}
	
	/**
	 * 更新分店信息
	 * @param request
	 * @param response
	 * @author Harry
	 * @throws IOException 
	 */
	private void updateHotel(HttpServletRequest request, 
			HttpServletResponse response) throws IOException{
		int id = Integer.parseInt(request.getParameter("hotelId"));
		Hotel hotel = hotelService.findHotelById(id);
		String newname = request.getParameter("hotelname");
		String newaddr = request.getParameter("hoteladdr");
		String newphone = request.getParameter("hotelphone");
		hotel.setHotelName(newname);
		hotel.setHotelAddr(newaddr);
		hotel.setHotelPhone(newphone);	
		hotelService.updateHotel(hotel);//数据库更新对象
		response.sendRedirect("HotelMgrServlet?act=loadAllHotel");
	}
	/**
	 * 查找并得到酒店的图片
	 * @param request
	 * @param response
	 * @author Harry
	 * @throws IOException 
	 */
	private void getHotelPic(HttpServletRequest request, 
			HttpServletResponse response) throws IOException{
		int hotelId = Integer.parseInt(request.getParameter("hotelId"));
		byte[] hotelPic = hotelService.getHotelPic(hotelId);
		
		if(hotelPic ==null || hotelPic.length == 0) {
			String defaultPicPath = request.getRealPath("/")+"pics/no-pic.jpg"; 
			FileInputStream fis =new FileInputStream(defaultPicPath);
			hotelPic=new byte[fis.available()];
			fis.read(hotelPic);
		}
		
		response.setContentType("image/jpeg");
		ServletOutputStream sos = response.getOutputStream();
		sos.write(hotelPic);
		sos.flush();
		sos.close();
		
	}
}


上传的图片的dao层的代码也进行了一部分变动

主要是一个add,和一个gethotelpic

private static final String SQL_ADD="insert into hotel(hotel_name,hotel_addr,hotel_phone,hotel_room_count,hotel_pic) values(?,?,?,?,?)";

private static final String SQL_GETPIC="select hotel_pic from hotel where hotel_no=?";


/**
	 * 添加酒店
	 * @param hotel
	 * @author Harry
	 */
	public void addHotel(Hotel hotel) {
		
		conn=DBUtils.getInstance().getConn(); // 找连接池拿一个连接对象
		try{
		   
		   pstmt=conn.prepareStatement(SQL_ADD);//动态sql语句,创建一个statement对象,用来发送sql参数给数据库
		   //Creates a PreparedStatement object for sending parameterized SQL statements to the database
		   pstmt.setString(1, hotel.getHotelName());//设置上述提到的问号,这是jdbc防sql注入的一个手段
		   pstmt.setString(2, hotel.getHotelAddr());
		   pstmt.setString(3, hotel.getHotelPhone());
		   pstmt.setInt(4, hotel.getHotelRoomCount());
		  
		   InputStream sbs = new ByteArrayInputStream(hotel.getHotelPic());
		   pstmt.setBlob(5, sbs);
		   System.out.println(sbs);
		   pstmt.executeUpdate();//执行
		   
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			DBUtils.getInstance().ReleaseRes(conn, pstmt, null);//finally,一定执行,释放连接
		}
		

	}



/**
	 * 通过酒店id得到酒店图片
	 * @param hotelId
	 * @author Harry
	 */
	public byte[] getHotelPic(Integer hotelId) {
		conn =DBUtils.getInstance().getConn();
		byte[] hotelPic = null ;
		
		try {
			pstmt = conn.prepareStatement(SQL_GETPIC);
			pstmt.setInt(1, hotelId);
			rset=pstmt.executeQuery();
			if(rset.next()){
				java.sql.Blob blob = rset.getBlob("hotel_pic");
				if(blob != null) {
					InputStream inStream = blob.getBinaryStream();
					hotelPic = new byte[(int)blob.length()];
					inStream.read(hotelPic);
					inStream.close();
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
		}finally {
			DBUtils.getInstance().ReleaseRes(conn, pstmt, rset);
		}
		
		return hotelPic;
	}

大致放上这些,有啥不清楚的,可以私信我。或者发我邮箱 hhooong@163.com

没想到没发布到主页,也有几十的浏览量


测试地址是139.129.12.4:8080/hotel

顺便加入了用户名和密码

aaa aaa123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值