拦截器 及 文件上传

拦截器 及 文件上传

可参考 :https://blog.csdn.net/qq_44641053/article/details/94202376
(利用 struts2 完成增删查改)

文件上传

三种上传方案:

  • 1、上传到tomcat服务器

  • 2、上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系
    文件服务器

  • 3、在数据库表中建立二进制字段,将图片存储到数据库


BookAction

package com.dj.crud.web;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Map;


import com.dj.crud.dao.BookDao;
import com.dj.crud.util.PageBean;
import com.dj.crud.util.StringUtils;

public class BookAction extends BaseAction  {

	private BookDao bookDao = new BookDao();
	
	private File bimg;
	private String bimgContentType;
	private String bimgFileName;
	

	/**
	 * 查询所有图书 模糊查 分页
	 * 
	 * @param req
	 * @param resp
	 * @return
	 */
	public String list() {
		try {
			PageBean pageBean = new PageBean();// 需要分页
			pageBean.setRequest(request);// 初始化
			pageBean.setRows(6);// 设置每页几条数据
			List<Map<String, Object>> list = this.bookDao.list(request.getParameterMap(), pageBean);
			// 传值
			request.setAttribute("bookList", list);// 集合
			request.setAttribute("pageBean", pageBean);// 分页
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "list";
	}
	
	/**
	 * 直接上传图片
	 * @return
	 */
	public String upload() {
		try {
			/**
			 * 注意:
			 * 		在Linux下是没有E盘的,Linux下只有一个盘符,
			 * 		那么意味着,当打包到Linux服务器的时候,需要改动代码;
			 * 
			 * 解决:
			 * 		将targetPath对应目录串,配置到资源文件中,通过Properties类
			 * 		进行动态读取,那么当需要将项目发布到Linux服务器的时候,只需要
			 * 		改变XXX.properties文件中targetPath=/dj/img
			 */
			//实际图片存储的位置
			String targetDir = "D:/img";
			//文件上传 存储到数据库中的地址
			String serverPath = "/upload";
			
			//FileUtils.copyFile(bimg, new File(targetDir+"/"+bimgFileName));
			copyBuffile(bimg, new File(targetDir+"/"+bimgFileName));
			
			/**
			 * 注意:
			 * 		数据库存放是网络请求地址,而不是本地图片存放地址。
			 */
			request.setAttribute("bimg", serverPath+"/"+bimgFileName);
			this.bookDao.edit(request.getParameterMap());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toList";
	}
	
	/**
	 * FileUtils.copyfile的底层,
	 * 并且通过缓冲区进行了增强
	 * @param source
	 * @param target
	 * @throws Exception
	 */
	public void copyBuffile(File source,File target) throws Exception{
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(source));
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(target));
		byte[] bbuf = new byte[1024];
		int len = 0;
		while((len = in.read(bbuf)) != -1) {
			out.write(bbuf,0,len);
		}
		in.close();
		out.close();
	}
	
	/**
	 * 跳转到文件上传界面
	 * @return
	 */
	public String preUpload() {
		List<Map<String, Object>> list;
		try {
			list = this.bookDao.list(request.getParameterMap(), null);
			// 传值
			request.setAttribute("bookList", list);// 集合
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toUpload";
	}

	
	/**
	 * 跳转增加、修改页面的通用方法
	 * 
	 * @return
	 */
	public String preSave() {
		String bid = request.getParameter("bid");
		
		try {
			if(StringUtils.isNotBlank(bid)) {
				Map<String, Object> map = this.bookDao.list(request.getParameterMap(), null).get(0);
				request.setAttribute("book", map);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "preSave";
	}

	/**
	 * 增加图书
	 * @return
	 */
	public String add() {
		try {
			result = this.bookDao.add(request.getParameterMap());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toList";
	}
		
	/**
	 * 修改图书
	 * @return
	 */
	public String edit() {
		try {
			result = this.bookDao.edit(request.getParameterMap());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toList";
	}
	
	/**
	 * 删除图书
	 * @return
	 */
	public String del() {
		try {
			result = this.bookDao.del(request.getParameterMap());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "toList";
	}
	
	public File getBimg() {
		return bimg;
	}

	public void setBimg(File bimg) {
		this.bimg = bimg;
	}

	public String getBimgContentType() {
		return bimgContentType;
	}

	public void setBimgContentType(String bimgContentType) {
		this.bimgContentType = bimgContentType;
	}

	public String getBimgFileName() {
		return bimgFileName;
	}

	public void setBimgFileName(String bimgFileName) {
		this.bimgFileName = bimgFileName;
	}
	
}

struts-sy.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
	"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	 <!-- action 分类 -->
	<package name="sy" extends="base" namespace="/sy">
		
		<interceptors>
		    <!-- 定义拦截器 -->
			<interceptor name="one" class="com.dj.crud.interceptor.OneInterceptor"></interceptor>
			<interceptor name="two" class="com.dj.crud.interceptor.TwoInterceptor"></interceptor>
		</interceptors>
		
		<action name="/book_*" class="com.dj.crud.web.BookAction" method="{1}">
			<!-- 应用拦截器 -->
			<interceptor-ref name="one"></interceptor-ref>
			<interceptor-ref name="two"></interceptor-ref>
			
			<result name="list">/list.jsp</result>	
			<result name="preSave">/edit.jsp</result>
			<result name="toUpload">/upload.jsp</result>	
			<result name="toList" type="redirectAction">/book_list</result>	
				
		</action>
	
	</package>
</struts>


拦截器

OneInterceptor
package com.dj.crud.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class OneInterceptor implements Interceptor{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		System.out.println("************OneInterceptor**************  1 ");
		String invoke = arg0.invoke();
		System.out.println("************OneInterceptor*************** 2  ");
		return invoke;
	}
	
}

TwoInterceptor
package com.dj.crud.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class TwoInterceptor implements Interceptor{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		System.out.println("************TwoInterceptor**************  1 ");
		String invoke = arg0.invoke();
		System.out.println("************TwoInterceptor*************** 2  ");
		return invoke;
	}

}


jsp 界面

list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="/dj" prefix="d"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!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>书籍展示</title>
</head>
<body>
<h2>书籍展示</h2><br>
<div align="center">

	<!-- 模糊查询 -->
	<form action="${pageContext.request.contextPath }/sy/book_list.action" method="post">
		<input type="text" name="str" >
		<input type="submit" value="查  询">
	</form><br><br>
	
	<a href="${pageContext.request.contextPath }/sy/book_preSave.action"> 新 增 书 籍 </a><br><br>
	
	<%-- <!-- 获取数据 -->
	<c:if test="${empty bookList }">
		<jsp:forward page="${pageContext.request.contextPath }/sy/book_list.action"></jsp:forward>
	</c:if> --%>
	
	<!-- 书籍信息展示 -->
	<table border="1" width="100%">
		<tr align="center">
			<td>书 本 名 称</td>
			<td>书 籍 展 示</td>
			<td>书 籍 类 别</td>
			<td>所 出 作 者</td>
			<td>书 籍 价 格</td>
			<td>出  版  社</td>
			<td>上 市 销 量</td>
			<td>操          作</td>
		</tr>
		<c:forEach items="${bookList }" var="b">
			<tr align="center">
				<td>${b.bname }</td>
				<td><img style="width: 66px;height:66px;" alt="" src="${pageContext.request.contextPath }${b.bimg }" ></td>
				<td>${b.tname }</td>
				<td>${b.bauthor }</td>
				<td>${b.bprice }</td>
				<td>${b.bpublish }</td>
				<td>${b.bvolume }</td>
				<td>
					<a href="${pageContext.request.contextPath }/sy/book_preSave.action?bid=${b.bid}">修 改</a>&nbsp;&nbsp;
					<a href="${pageContext.request.contextPath }/sy/book_del.action?bid=${b.bid}">删 除</a>&nbsp;&nbsp;
					<a href="${pageContext.request.contextPath }/sy/book_preUpload.action?bid=${b.bid}">上 传 图 片</a>
				</td>
			</tr>
		</c:forEach>
		
		
		<%-- <s:iterator var="b" value="result">
			<tr align="center">
				<td><s:property value="#b.bname"/></td>
				<td><s:property value="#b.bimg"/></td>
				<td><s:property value="#b.tname"/></td>
				<td><s:property value="#b.bauthor"/></td>
				<td><s:property value="#b.bprice"/></td>
				<td><s:property value="#b.bpublish"/></td>
				<td><s:property value="#b.bdesc"/></td>
				<td><s:property value="#b.bvolume"/></td>
				<td>
					
				</td>
			</tr>
		</s:iterator> --%>
	
	</table>
	
	<!-- 分页 -->
	<%-- <d:page pageBean="${pageBean }"></d:page> --%>
	
</div>
</body>
</html>

upload.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>图片上传页面</title>
</head>
<body>
<br><br>
<!-- 新增页面与修改页面  公用 -->
<div align="center">
	<form action="${pageContext.request.contextPath }/sy/book_upload.action" method="post" enctype="multipart/form-data">
		<input type="hidden" name="bname" value="${book.bname }"><br><br>
		<input type="hidden" name="bauthor" value="${book.bauthor }"><br><br>
		<input type="hidden" name="bprice" value="${book.bprice }"><br><br>
		<input type="hidden" name="bpublish" value="${book.bpublish }"><br><br>
		
		<!-- 注意:name对应的值决定了子控制器action的命名 -->
		<input type="file" name="bimg">
		
		<input type="submit" value="提  交">
		<input type="reset" value="重  置"><br>
	
			
	</form>

</div>
</body>
</html>

图片解析

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值