1.上传方式

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

2.web代码优化

 package com.yuan.crud.web;

 import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork2.ModelDriven;
import com.yuan.crud.dao.ClazzDao;
import com.yuan.crud.entity.Clazz;
import com.yuan.crud.util.PageBean; public class ClazzAction extends BaseAction implements ModelDriven<Clazz>{ private Clazz clz = new Clazz();
private ClazzDao clzdao = new ClazzDao();
//这里的属性名一定要和页面上name的值对应
private File file;
private String fileFileName;
private String fileContentType; /**
* 跳转上传图片的界面
* @return
*/
public String preUpload() {
try {
this.result = this.clzdao.list(clz, null).get(0);
} catch (InstantiationException | IllegalAccessException | SQLException e) {
e.printStackTrace();
}
return "preUpload";
} public String upload() {
String realDir="D:/image";//保存路径尽量不要带中文,
String severDir = "/upload";//读取路径
try {
// FileUtils.copyFile(file, new File(realDir+"/"+fileFileName));
copyFile(file, new File(realDir+"/"+fileFileName));
clz.setPic(severDir+"/"+fileFileName);
try {
this.clzdao.edit(clz);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
| SQLException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return "toList";
}
/**
* 利用缓冲流技术进行拷贝
* @param source
* @param target
* @throws IOException
*/
public void copyFile(File source, File target) throws IOException{
try {
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();
} catch (FileNotFoundException e) {
e.printStackTrace();
} } /**
* 查询
* @return
*/
public String list() {
PageBean pageBean = new PageBean();
pageBean.setRequest(request);
try {
List<Clazz> list = this.clzdao.list(clz, pageBean);
System.out.println(list);
request.setAttribute("clzList", list);
request.setAttribute("pageBean", pageBean);
} catch (InstantiationException | IllegalAccessException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "list";
} /**
* 跳转编辑页面(新增修改页面)
* @return
*/
public String preSave() {
if(clz.getCid()!=0) {
try {
this.result = this.clzdao.list(clz, null).get(0);
} catch (InstantiationException | IllegalAccessException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "preSave";
} public String add() {
try {
this.code = this.clzdao.add(clz);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
| SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "toList";
} public String edit() {
try {
this.clzdao.edit(clz);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
| SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "toList";
} public String del() {
try {
this.clzdao.del(clz);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException
| SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "toList";
} @Override
public Clazz getModel() { return clz;
} public File getFile() {
return file;
} public void setFile(File file) {
this.file = file;
} public String getFileFileName() {
return fileFileName;
} public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
} public String getFileContentType() {
return fileContentType;
} public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
} }

3.jsp代码

3.1  clzList.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="z" uri="/****"%>
<!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>
<form action="${pageContext.request.contextPath }/sy/clz_list.action" method="post"> 班级名: <input type="text" name="cname" /><input type="submit" value="确定"/> </form>
<a href="${pageContext.request.contextPath }/sy/clz_preSave.action">新增</a>
<table border="1" width="100%">
<tr>
<td>编号</td>
<td>班级名</td>
<td>教员</td>
<td>图片</td>
<td>操作</td>
</tr> <c:forEach items="${clzList }" var="c">
<tr>
<td>${c.cid }</td>
<td>${c.cname }</td>
<td>${c.cteacher }</td>
<td>
<img style="height: 60px;width: 60px;" src="${pageContext.request.contextPath }${c.pic}">
</td>
<td>
<a href="${pageContext.request.contextPath }/sy/clz_preSave.action?cid=${c.cid}">修改</a>&nbsp;&nbsp;&nbsp;
<a href="${pageContext.request.contextPath }/sy/clz_del.action?cid=${c.cid}">删除</a>&nbsp;&nbsp;&nbsp;
<a href="${pageContext.request.contextPath }/sy/clz_preUpload.action?cid=${c.cid}">图片上传</a>&nbsp;&nbsp;&nbsp;
</td>
</tr>
</c:forEach>
</table>
<z:Page pageBean="${pageBean }"></z:Page>
</body>
</html>

3.2  clzUpload.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>
<form action="${pageContext.request.contextPath }/sy/clz_upload.action" method="post" enctype="multipart/form-data">
<input type="hidden" name="cid" value="${result.cid }"/>
<input type="hidden" name="cname" value="${result.cname }"/>
<input type="hidden" name="cteacher" value="${result.cteacher }"/>
<input type="file" name="file">
<input type="submit" value="ok"/>
</form>
</body>
</html>

4.配置xml

4.1  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>
<package name="sy" extends="base" namespace="/sy">
<action name="/hello_*" class="com.yuan.web.HelloAction" method="{1}">
<result name="success">/success.jsp</result>
</action> <action name="/clz_*" class="com.yuan.crud.web.ClazzAction" method="{1}">
<result name="list">/clzList.jsp</result>
<result name="preSave">/clzEdit.jsp</result>
<result name="preUpload">/clzUpload.jsp</result>
<result name="toList" type="redirectAction">clz_list</result>
</action>
</package>
</struts>

4.2  server.xml 配置(在Servers项目中找到)

在最后一个Value标签后面插入:
<Context path="/T226_struts01/upload" docBase="D:/image"/> 注:path为当前项目名下的upload文件夹,docBase为图片保存的路径

5. 页面显示

5.1 首页

5.2 上传页面

5.3 结果

谢谢观看  ^-^!!!

struts--CRUD优化(图片上传)的更多相关文章

  1. struts图片上传

    文件上传:三种上传方案1.上传到tomcat服务器 上传图片的存放位置与tomcat服务器的耦合度太高2.上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系文件服 ...

  2. Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能

    日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...

  3. Java Struts图片上传至指定文件夹并显示图片

    继上一次利用Servlet实现图片上传,这次利用基于MVC的Struts框架,封装了Servlet并简化了JSP页面跳转. JSP上传页面 上传一定要为form加上enctype="mult ...

  4. CKEditor图片上传实现详细步骤(使用Struts 2)

    本人使用的CKEditor版本是3.6.3.CKEditor配置和部署我就不多说. CKEditor的编辑器工具栏中有一项“图片域”,该工具可以贴上图片地址来在文本编辑器中加入图片,但是没有图片上传. ...

  5. struts中用kindeditor实现的图片上传并且显示在页面上

    做公司网站的时候由于需要在内容属性中加入图片,所以就有了这个问题,本来一开始找几篇文章看都是讲修改kindeditor/jsp/file_manager_json.jsp和upload_json.js ...

  6. webuploader项目中多图片上传实例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. Asp.Net Mvc 使用WebUploader 多图片上传

    来博客园有一个月了,哈哈.在这里学到了很多东西.今天也来试着分享一下学到的东西.希望能和大家做朋友共同进步. 最近由于项目需要上传多张图片,对于我这只菜鸟来说,以前上传图片都是直接拖得控件啊,而且还是 ...

  8. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  9. 关于移动手机端富文本编辑器qeditor图片上传改造

    日前项目需要在移动端增加富文本编辑,上网找了下,大多数都是针对pc版的,不太兼容手机,当然由于手机屏幕小等原因也限制富文本编辑器的众多强大功能,所以要找的编辑器功能必须是精简的. 找了好久,发现qed ...

随机推荐

  1. ant 节点和属性

    任务和javac命令是相似,它编译两种类型的java文件1)没有被编译的java文件2)曾经编译过,但是class文件版本和当前对应的java文件版本不匹配的java文件. 1)javac命令支持的参 ...

  2. 1183: 零起点学算法90——海选女主角(C语言)

    一.题目 http://acm.wust.edu.cn/problem.php?id=1183&soj=0 二.分析 从描述来看,就是找出一个二维数组中绝对值最大的数: 带符号的32位整数,刚 ...

  3. Consul作为SpringCloud配置中心

    一.背景介绍 在分布式系统中动态配置中,可以避免重复重启服务,动态更改服务参数等.一句话非常重要. 另外一篇文章也是这样说的,哈哈. Consul 作为Spring 推荐的分布式调度系统其也具备配置中 ...

  4. Java8新特性 - 并行流与串行流

    并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流. Java8中将并行进行了优化,我们可以很容易的对数据进行并行操作.Stream API可以声明性地通过parallel()和 ...

  5. javascript 之 扩展对象 jQuery.extend

    在JQuery的API手册中,extend方法挂载在JQuery 和 JQuery.fn两个不同的对象上,但在JQuery内部代码实现的是相同的,只是功能各不相同. 官方解释: jQuery.exte ...

  6. 使用async和await的异步编程

    异步编程模型(TAP)提供了抽象的异步代码.异步代码看起来和同步代码没什么大的区别,无非多个了两个关键字(async和await).但是代码的执行顺序并没看起来那么简单,代码的执行顺序根据cpu资源的 ...

  7. 线程一(lock)

    对于线程同步操作最简单的一种方式就是使用 lock 关键字,通过 lock 关键字能保证加锁的线程只有在执行完成后才能执行其他线程.   lock 的语法形式如下. lock(object) {    ...

  8. Javascript的异步与单线程

    一.前言 我们都知道,javasript是一个单线程的语言:所谓单线程就是同一时间不能做两件事情,两段代码不能同时执行:因为这种机制,才避免了两段js同时对一个DOM节点进行渲染的冲突.但是也会因此产 ...

  9. 【vue开发】超简单的防止连续点击js指令方法

    vue防重复点击(指令实现) 快速点击按钮会重复多次调用接口,防止出现这样的情况 全局定义,方便调用 新建plugins.js export default { install (Vue) { // ...

  10. 互联网项目中mysql推荐(读已提交RC)的事务隔离级别

    [原创]互联网项目中mysql应该选什么事务隔离级别 Mysql为什么不和Oracle一样使用RC,而用RR 使用RC的原因 这个是有历史原因的,当然要从我们的主从复制开始讲起了!主从复制,是基于什么 ...