拦截器 及 文件上传
拦截器 及 文件上传
可参考 :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>
<a href="${pageContext.request.contextPath }/sy/book_del.action?bid=${b.bid}">删 除</a>
<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>