- 浏览: 1460684 次
- 性别:
- 来自: 广东
文章分类
- 全部博客 (190)
- eclipse (5)
- struts (15)
- spring (1)
- hibernate (0)
- myeclipse (3)
- java (35)
- apache (1)
- PHP (7)
- 虚拟机 (0)
- 网络安全 (3)
- 防火墙 (1)
- linux (7)
- SVN (22)
- 测试文档 (1)
- 测试经验 (0)
- 项目管理 (0)
- BUG管理工具 (3)
- 安装配置 (3)
- 性能工具 (7)
- 脚本学习 (0)
- 协议选择 (0)
- loadrunner错误处理 (0)
- 相关监控配置 (0)
- 框架的认识 (0)
- 手动关联 (0)
- 性能调优 (1)
- 负载均衡 (0)
- 代码学习 (1)
- Windows (5)
- 软件开发安全 (0)
- 考研经验 (1)
- SQL SERVER (1)
- MySQL (6)
- LVS (0)
- ORACLE (1)
- TOMCAT (0)
- 开源框架 (1)
- EOS (3)
- web (5)
- JEECMS (7)
- XML (1)
- LDAP (3)
- ehcache (1)
- Ajax (3)
- OpenSourceTools (1)
- Exception (1)
- 密码学 (1)
- os-centos (1)
- os-ubuntu (0)
- os-FreeBSD (0)
- os-Fedora (0)
- 浏览器-chrome (1)
- flex (1)
- 数据结构与算法 (0)
最新评论
-
joedan0104:
挺方便的,谢谢
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download -
naruik:
非常感谢,不用自己找了。收藏和关注了。
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download -
scd01234:
感谢!
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download -
qingcheng123:
大虾,5.3这个版本有没有下载地址呀,谢谢!
EOS5.3+Tomcat5.0.28升级JDK1.5解决方案 -
1021082712:
JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download
最近因为一个项目,需要做统一的下载,并且要支持批量下载..其中涉及到的知识点有:get请求中文处理,下载动态设置下载名,批量下载,动态打包,流处理,删除临时文件,使用迅雷下载后台发出两次次下载请求,以及struts2工作流程与原理等..
下面是我自己做的一个实例,主要实现遍历一个文件夹生成下载列表,用户可以单一下载,也可选择相关文件批量下载.....做的其中发现有很多疑惑的地方,请高手们指出....谢谢
一.实例区
1.index.html
<%@ page language="java" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<hr>
<h3>欢迎光临下载区</h3>
<a href="downloadList.action">下载列表</a><br/>
</body>
</html>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<hr>
<h3>欢迎光临下载区</h3>
<a href="downloadList.action">下载列表</a><br/>
</body>
</html>
2.配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<constant name="struts.i18n.encoding" value="gbk"></constant>
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<constant name="struts.multipart.maxSize" value="209715200" />
<package name="struts2" extends="struts-default">
<action name="downloadList" class="cn.edu.cuit.disasterSystem.web.struts2.action.DownloadListAction">
<result name="success">/downloadList.jsp</result>
<result name="error">/downloadListError.jsp</result>
</action>
<action name="download" class="cn.edu.cuit.disasterSystem.web.struts2.action.DownloadAction">
<result name="success" type="stream">
<!-- contentType为二进制方式 -->
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<!-- attachment属性强调是下载,就不会主动打开,比如图片 -->
<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName() -->
<param name="contentDisposition">
attachment;filename=${filename}
</param>
<param name="inputName">downloadFile</param>
<param name="bufferSize">4096</param>
</result>
<result name="input">/downloadList.jsp</result>
<result name="error">/downloadListError.jsp</result>
</action>
</package>
</struts>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<constant name="struts.i18n.encoding" value="gbk"></constant>
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<constant name="struts.multipart.maxSize" value="209715200" />
<package name="struts2" extends="struts-default">
<action name="downloadList" class="cn.edu.cuit.disasterSystem.web.struts2.action.DownloadListAction">
<result name="success">/downloadList.jsp</result>
<result name="error">/downloadListError.jsp</result>
</action>
<action name="download" class="cn.edu.cuit.disasterSystem.web.struts2.action.DownloadAction">
<result name="success" type="stream">
<!-- contentType为二进制方式 -->
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<!-- attachment属性强调是下载,就不会主动打开,比如图片 -->
<!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性对应action类中的方法 getDownloadFileName() -->
<param name="contentDisposition">
attachment;filename=${filename}
</param>
<param name="inputName">downloadFile</param>
<param name="bufferSize">4096</param>
</result>
<result name="input">/downloadList.jsp</result>
<result name="error">/downloadListError.jsp</result>
</action>
</package>
</struts>
3.产生下载列表的Action----DownloadListAction
package cn.edu.cuit.disasterSystem.web.struts2.action;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 显示所有down目录的文件,供下载所用
* @author xcp
* @version 1.0
* Copyright (C), 2009 智能开发实验室 所有
* Program Name:灾情信息管理系统
* Date: 2009-10-24 上午11:16:41
*/
@SuppressWarnings("serial")
public class DownloadListAction extends ActionSupport{
private static ArrayList<String> filelist = new ArrayList<String>();
/**
* 可以是前台一个页面传入,也可以是手动指定,其作用是指定下载文件的根目录
* @author 向才鹏
* 2009-10-24 下午12:02:47
*/
private String downloadRootPath = "/upload";
public String getDownloadRootPath() {
return downloadRootPath;
}
public void setDownloadRootPath(String downloadRootPath) {
this.downloadRootPath = downloadRootPath;
}
/**
* 将指定文件路径下的文件全部遍历出来
* @author 向才鹏
* @param strPath 指来要遍历的文件
* 2009-10-24 下午12:04:48
*/
public static void refreshFileList(String strPath)
{
File dir = new File(strPath);
File[] files = dir.listFiles();
if (files == null)
return;
for (int i = 0; i < files.length; i++)
{
if (files[i].isDirectory())
{
refreshFileList(files[i].getAbsolutePath());
} else
{
String filePath = files[i].getPath();
filelist.add(filePath);
}
}
}
/**
* 格式化输出数据存入Map,形式文件名+文件服务端路径
* @author 向才鹏
* @param filelist 遍历出来的文件路径
* @param downloadRootPath 指明服务器下载的文件,便于从遍历出来的文件中取得服务端路径
* @return
* 2009-10-24 下午12:06:18
*/
private static Map<String,String> formatFileMap(ArrayList<String> filelist,String downloadRootPath){
Map<String,String> formatFileMap = new HashMap<String,String>();
//得到服务下载的根路径,并将/换成\\,这样便于替换
String formatDownloadRootPath = downloadRootPath.replaceAll("/", "\\\\");
for(String filePath : filelist){
//得到下载的相对路径
String downloadPath = filePath.substring(filePath.indexOf(formatDownloadRootPath));
//将得到的相对路径的\\转换成/
String formatDownloadPath = downloadPath.replaceAll("\\\\", "/");
//得到文件名
String filename = formatDownloadPath.substring(formatDownloadPath.lastIndexOf("/")+1);
/*try {
formatFileMap.put(filename, URLEncoder.encode(formatDownloadPath, "gbk"));
} catch (UnsupportedEncodingException e) {
formatFileMap.put(filename, formatDownloadPath);
e.printStackTrace();
}*/
//这就不用考虑设置编码了,再后面统一使用javascript的encodeURI函数
formatFileMap.put(filename, formatDownloadPath);
}
return formatFileMap;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
//指定下载目录
String upload = ServletActionContext.getServletContext().getRealPath(downloadRootPath);
//清理filelist
filelist.clear();
//遍历文件
refreshFileList(upload);
ActionContext context = ActionContext.getContext();
Map request = (Map) context.get("request");
if(filelist != null){
//格式化文件信息,包括文件名和地址
Map<String,String> formatFileMap = formatFileMap(filelist,downloadRootPath);
request.put("fileMap", formatFileMap);
return SUCCESS;
}
else{
request.put("errorMessage", "没有相关的下载文件");
return ERROR;
}
}
}
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 显示所有down目录的文件,供下载所用
* @author xcp
* @version 1.0
* Copyright (C), 2009 智能开发实验室 所有
* Program Name:灾情信息管理系统
* Date: 2009-10-24 上午11:16:41
*/
@SuppressWarnings("serial")
public class DownloadListAction extends ActionSupport{
private static ArrayList<String> filelist = new ArrayList<String>();
/**
* 可以是前台一个页面传入,也可以是手动指定,其作用是指定下载文件的根目录
* @author 向才鹏
* 2009-10-24 下午12:02:47
*/
private String downloadRootPath = "/upload";
public String getDownloadRootPath() {
return downloadRootPath;
}
public void setDownloadRootPath(String downloadRootPath) {
this.downloadRootPath = downloadRootPath;
}
/**
* 将指定文件路径下的文件全部遍历出来
* @author 向才鹏
* @param strPath 指来要遍历的文件
* 2009-10-24 下午12:04:48
*/
public static void refreshFileList(String strPath)
{
File dir = new File(strPath);
File[] files = dir.listFiles();
if (files == null)
return;
for (int i = 0; i < files.length; i++)
{
if (files[i].isDirectory())
{
refreshFileList(files[i].getAbsolutePath());
} else
{
String filePath = files[i].getPath();
filelist.add(filePath);
}
}
}
/**
* 格式化输出数据存入Map,形式文件名+文件服务端路径
* @author 向才鹏
* @param filelist 遍历出来的文件路径
* @param downloadRootPath 指明服务器下载的文件,便于从遍历出来的文件中取得服务端路径
* @return
* 2009-10-24 下午12:06:18
*/
private static Map<String,String> formatFileMap(ArrayList<String> filelist,String downloadRootPath){
Map<String,String> formatFileMap = new HashMap<String,String>();
//得到服务下载的根路径,并将/换成\\,这样便于替换
String formatDownloadRootPath = downloadRootPath.replaceAll("/", "\\\\");
for(String filePath : filelist){
//得到下载的相对路径
String downloadPath = filePath.substring(filePath.indexOf(formatDownloadRootPath));
//将得到的相对路径的\\转换成/
String formatDownloadPath = downloadPath.replaceAll("\\\\", "/");
//得到文件名
String filename = formatDownloadPath.substring(formatDownloadPath.lastIndexOf("/")+1);
/*try {
formatFileMap.put(filename, URLEncoder.encode(formatDownloadPath, "gbk"));
} catch (UnsupportedEncodingException e) {
formatFileMap.put(filename, formatDownloadPath);
e.printStackTrace();
}*/
//这就不用考虑设置编码了,再后面统一使用javascript的encodeURI函数
formatFileMap.put(filename, formatDownloadPath);
}
return formatFileMap;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
//指定下载目录
String upload = ServletActionContext.getServletContext().getRealPath(downloadRootPath);
//清理filelist
filelist.clear();
//遍历文件
refreshFileList(upload);
ActionContext context = ActionContext.getContext();
Map request = (Map) context.get("request");
if(filelist != null){
//格式化文件信息,包括文件名和地址
Map<String,String> formatFileMap = formatFileMap(filelist,downloadRootPath);
request.put("fileMap", formatFileMap);
return SUCCESS;
}
else{
request.put("errorMessage", "没有相关的下载文件");
return ERROR;
}
}
}
4.显示下载列表downloadList.jsp
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<script type="text/javascript">
function downloadFile1(filenames,filepaths){
location.href=encodeURI("download.action?filenames="+filenames+"&filepaths="+filepaths);
}
function SelectAll(oForm)
{
for(var i=0;i<oForm.url.length;i++)
{
oForm.url[i].checked=true;
}
}
function TurnOver(oForm)
{
for(var i=0;i<oForm.url.length;i++)
{
oForm.url[i].checked=!oForm.url[i].checked;
}
}
function DownlodSelected(oForm){
if(confirm("因需要在服务端动态打包,需要时间比较长,是否继续批量下载?"))
{
var arrDownloadList = [];
for(var i=0;i<oForm.url.length;i++){
if(oForm.url[i].checked==true){
if(arrDownloadList.length==0){
arrDownloadList[0] = oForm.url.value;
}
arrDownloadList[arrDownloadList.length] = oForm.url[i].value;
}
}
if (arrDownloadList.length>0){
var temp = [];
var filenames="";
var filepaths="";
for(var i=1;i<arrDownloadList.length;i++){
temp = arrDownloadList[i].split(",")
if(filenames=="" && filepaths==""){
filenames=temp[0]
filepaths=temp[1]
}else{
filenames=filenames+"|"+temp[0];
filepaths=filepaths+"|"+temp[1];
}
}
downloadFile1(filenames,filepaths);
}else{
alert("还没有选中下载项");
}
}
}
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/downloaddwr.js"></script>
</head>
<body>
<form name="myform" style="display: inline" onSubmit="return false">
<table width="50%" align="center">
<tr>
<td colspan="2">
<h3>
以后是下载列表,点击进行下载
</h3>
</td>
</tr>
<tr>
<td colspan="2">
<font color="red"><s:fielderror></s:fielderror> </font>
</td>
</tr>
<s:iterator value="#request.fileMap" status="stuts">
<s:if test="#stuts.odd == true">
<tr style="background-color: #77D9F6">
<td>
<input name="url" type="checkbox" id="url"
value="<s:property value="key" />,<s:property value="value" />">
</td>
<td>
<s:property value="key" />
</td>
<td>
<a href="#"
onclick="downloadFile1('<s:property value="key" />','<s:property value="value" />')">点击下载</a>
</td>
</tr>
</s:if>
<s:else>
<tr style="background-color: #D7F2F4">
<td>
<input name="url" type="checkbox" id="url"
value="<s:property value="key" />,<s:property value="value" />">
<
pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<script type="text/javascript">
function downloadFile1(filenames,filepaths){
location.href=encodeURI("download.action?filenames="+filenames+"&filepaths="+filepaths);
}
function SelectAll(oForm)
{
for(var i=0;i<oForm.url.length;i++)
{
oForm.url[i].checked=true;
}
}
function TurnOver(oForm)
{
for(var i=0;i<oForm.url.length;i++)
{
oForm.url[i].checked=!oForm.url[i].checked;
}
}
function DownlodSelected(oForm){
if(confirm("因需要在服务端动态打包,需要时间比较长,是否继续批量下载?"))
{
var arrDownloadList = [];
for(var i=0;i<oForm.url.length;i++){
if(oForm.url[i].checked==true){
if(arrDownloadList.length==0){
arrDownloadList[0] = oForm.url.value;
}
arrDownloadList[arrDownloadList.length] = oForm.url[i].value;
}
}
if (arrDownloadList.length>0){
var temp = [];
var filenames="";
var filepaths="";
for(var i=1;i<arrDownloadList.length;i++){
temp = arrDownloadList[i].split(",")
if(filenames=="" && filepaths==""){
filenames=temp[0]
filepaths=temp[1]
}else{
filenames=filenames+"|"+temp[0];
filepaths=filepaths+"|"+temp[1];
}
}
downloadFile1(filenames,filepaths);
}else{
alert("还没有选中下载项");
}
}
}
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/downloaddwr.js"></script>
</head>
<body>
<form name="myform" style="display: inline" onSubmit="return false">
<table width="50%" align="center">
<tr>
<td colspan="2">
<h3>
以后是下载列表,点击进行下载
</h3>
</td>
</tr>
<tr>
<td colspan="2">
<font color="red"><s:fielderror></s:fielderror> </font>
</td>
</tr>
<s:iterator value="#request.fileMap" status="stuts">
<s:if test="#stuts.odd == true">
<tr style="background-color: #77D9F6">
<td>
<input name="url" type="checkbox" id="url"
value="<s:property value="key" />,<s:property value="value" />">
</td>
<td>
<s:property value="key" />
</td>
<td>
<a href="#"
onclick="downloadFile1('<s:property value="key" />','<s:property value="value" />')">点击下载</a>
</td>
</tr>
</s:if>
<s:else>
<tr style="background-color: #D7F2F4">
<td>
<input name="url" type="checkbox" id="url"
value="<s:property value="key" />,<s:property value="value" />">
<
发表评论
-
Struts2 文件上传文件类型allowedTypes汇总
2010-05-19 17:48 1716Struts2 文件上传文件类型allowedTypes汇总 ... -
设置Struts2文件上传的类型和大小
2010-05-19 16:42 2112设置Struts2文件上传的类型和大小 设置Struts ... -
Struts2多文件上传
2010-05-19 16:37 1378Struts2多文件上传 Struts2多文件上传: 在 ... -
Struts2文件上传详解
2010-05-19 16:36 1396Struts2文件上传详解 St ... -
JSP 生成随机验证码图片(经典老代码)
2010-03-21 17:29 1426JSP 生成随机验证码图片(经典老代码) ... -
封装了 Jakarta 文件上传功能的一个类
2010-03-21 17:28 1389封装了 Jakarta 文件上传功能的一个类 后 ... -
在Eclipse下创建Jeecms项目图文指南2009-12-30 15:30 Jeecms作为一个开源项目自发布以来受到全国各地JEE用户及爱好者的广泛关注
2010-03-06 12:34 1898在Eclipse下创建Jeecms项目 ... -
在Myeclipse7中整合struts2+spring2.5+hibernate3.2
2009-11-23 16:51 1740在Myeclipse7中整合struts2+spring2.5 ... -
请不要做浮躁的人(转载)
2009-11-23 16:45 1046请不要做浮躁的人(转 ... -
整合Struts2+JasperReport Web报表应用示例
2009-11-23 16:43 3741整合Struts2+JasperReport Web报表应用示 ... -
struts2 get 请求 下载 中文处理
2009-11-23 16:40 1569struts2 get 请求 下载 中文处理 最近因项目 ... -
struts2整合spring应用实例
2009-11-23 16:39 1389struts2整合spring应用实 ... -
struts2 get 请求 下载 中文处理
2009-11-23 16:37 1493Struts2操作request、session和appli ... -
Struts Spring Hibernate 面试题
2009-03-03 14:38 2189Struts Spring Hibernate 面试题 ...
相关推荐
在Struts2框架中,批量文件下载是一种常见的...综上所述,Struts2的批量文件下载涉及前端页面设计、Struts2配置、后台下载逻辑以及错误处理等多个方面。通过合理的设计和实现,可以提供高效、安全的批量文件下载功能。
综上所述,Struts2框架下的批量下载功能不仅涉及到注解的灵活运用,还需要对文件流、压缩技术、临时文件管理、日期时间处理、字符编码以及日志记录等多方面知识有深刻理解。同时,合理设计实体类与服务层的交互,...
在Struts2中处理文件下载和压缩功能是常见的需求,这通常涉及到用户请求从服务器获取文件或者打包多个文件为一个ZIP压缩包。下面将详细介绍这两个知识点。 **文件下载** 在Struts2中,文件下载可以通过Action类来...
标题 "SWFupload_struts1.rar_java 批量上传_struts1批量下载_swfupload struts1" 提供的信息表明,这是一个与Java编程语言、Struts1框架以及SWFUpload工具相关的项目或教程。SWFUpload是一个流行的老牌JavaScript和...
2.实现了文件在线压缩解压功能(可以压缩成zip格式,可以直接解压缩RAR文件格式) 3.实现了新建文件夹,以及删除文件和文件夹。 基于Struts2和Spring的网络硬盘系统,批量上传文件和在线解压,优秀源代码! 基于Struts...
然而,随着时间的推移,Struts2框架发现了一系列的安全漏洞,这些漏洞可能导致远程代码执行、敏感信息泄露等问题,对使用Struts2的系统构成了严重的安全威胁。本资源提供的“Struts2漏洞检测(带自己编写使用说明一...
5. **示例应用**:如果提供的压缩包包含一个完整的示例应用,那么你可以直接运行这个应用,了解如何在实际项目中使用JCaptcha4Struts2插件。这可能包括Web应用的部署描述符(如`web.xml`),以及必要的Maven或Gradle...
在【压缩包子文件的文件名称列表】中,"SWFuploadForstruts1"可能是一个包含SWFupload整合Struts1框架的示例代码或者配置文件的压缩包。Struts1是一个经典的Java Web MVC框架,用于构建企业级应用程序。将SWFupload...
基本架构 Struts2 + Spring2 + ExtJS2.2 无数据库 实现了多文件批量队列上传,有完美进度条列表,已经详细的上传信息显示. 实现了多文件压缩,以及解压缩文件,包括解压缩rar文件 实现了文件下载.等基本功能 此项目继续...
这意味着开发者可能针对Struts2原有的数据操作接口进行了增强,例如添加了批量更新、事务管理、错误处理等特性,使得在处理数据库操作时更加高效和安全。同时,由于框架“还在测试与开发”阶段,这表明它可能包含...
根据【压缩包子文件的文件名称列表】"mySSM-master",我们可以推测压缩包内包含了项目的所有源代码文件、配置文件、测试文件以及可能的资源文件,如图片、CSS样式表和JavaScript脚本。具体的文件结构可能如下: - `...
在IT行业中,图像上传处理是一项常见的功能,尤其在Web应用中。本项目主要涉及了Struts2、Servlet和ExtJS这三个技术,它们是构建...通过优化和扩展,该系统可以适应更多复杂的需求,如批量上传、图片压缩、水印添加等。
此外,前端也可以通过压缩图片、调整分辨率等手段减小文件大小。 8. **错误处理**:良好的错误处理机制是必不可少的。无论是前端的文件选择错误,还是后端的上传失败,都需要向用户清晰反馈,提供重试或取消选项。 ...
- 功能上,系统需支持用户注册登录、文件目录清晰展示、批量上传下载、文件预览、打包压缩下载以及外链设置等功能。操作应简便快捷,以优化用户体验。 - 性能上,强调高运行速度、快速响应和处理能力,以及足够的...
在【压缩包子文件的文件名称列表】中,"99273887dbboard_struts2"可能指的是系统的一部分或某个模块,比如后台管理界面或者使用Struts2框架的部分。Struts2是Java Web开发中常用的MVC框架,它负责控制应用程序的流程...
5. **文件预处理**:在上传前,可以使用SWFUpload提供的API对选中的文件进行预处理,比如重命名、压缩或者验证文件内容。 6. **UI自定义**:虽然SWFUpload默认提供了一些基本的按钮样式,但开发者可以根据需要...
- SpringMVC基于前端控制器模式,而Struts2基于拦截器模式。 - SpringMVC更加灵活,易于与其他Spring组件集成。 - Struts2提供了更多的内置标签库和插件支持。 - **SpringIOC和AOP的概念以及实现方式**: - **...
10. **性能优化**:DWR 3.0版本对性能进行了优化,例如,通过批量调用来减少网络请求次数,以及使用GZIP压缩来减小传输数据量。 使用DWR 3.0版本,开发者可以构建出更富交互性和响应性的Web应用,同时避免了传统...
- 论坛和社区:参与DWR相关的论坛讨论,可以解决学习过程中的问题,并获取最新的开发信息。 7. **实践与进阶**: - 与框架集成:DWR可以与Spring、Struts等常见的Java Web框架结合使用,增强框架的功能。 - 性能...