看了好多网上用struts1.x实现文件下载功能的介绍了
action的写法大致有三 1, 用输入流,输出流
2, 用dispatcher
3, 用downloadAction
可是,怎么没看见个下载完成后跳转到成功画面的写法呢
用了第一和第二两种写法,最后都只能return null,如果写成return mapping.findForward("success"),则都会因为response已经提交而报exception
莫非都是下载完了就什么也不管了?
很疑惑,不知道怎么办好?有解决方法么,或者非正规的解决方法也好
问题补充:
这段代码也是我从论坛上看来的,下载没有问题,画面forward不可
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
FileDownLoadForm fdform =(FileDownLoadForm)form;
String path = fdform.getFilePath();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
InputStream fis = null;
OutputStream fos = null;
try{
File uploadFile = new File(path);
fis = new FileInputStream(uploadFile);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
response.reset();
response.setHeader("Content-disposition", "attachment;filename =" + URLEncoder.encode(path, "utf-8"));
int bytesRead = 0;
byte[] buffer = new byte[4096];
while((bytesRead = bis.read(buffer,0,4096)) != -1){
bos.write(buffer, 0, bytesRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
//return mapping.findForward("success");
return null;
} catch(Exception e){
e.printStackTrace();
System.out.println(path);
ActionMessages downErrors = new ActionMessages();
ActionMessage downError = new ActionMessage("errors.download", path);
downErrors.add(ActionMessages.GLOBAL_MESSAGE, downError);
saveMessages(request, downErrors);
return mapping.findForward("error");
}
}
问题补充:
对应第二种方法的
也是从论坛看来的
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
FileDownLoadForm fdform =(FileDownLoadForm)form;
String path = fdform.getFilePath();
response.setContentType("application/x-download");
String filenamedownload = path;
String filenamedisplay = path.substring(path.lastIndexOf("/")+1);
try {
filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);
RequestDispatcher dispatcher = request.getRequestDispatcher(filenamedownload);
if(dispatcher != null)
{
dispatcher.forward(request,response);
}
response.flushBuffer();
return null ;
// return mapping.findForward("success");
}
catch(Exception e) {
e.printStackTrace();
ActionMessages downErrors = new ActionMessages();
ActionMessage downError = new ActionMessage("errors.download", path);
downErrors.add(ActionMessages.GLOBAL_MESSAGE, downError);
saveMessages(request, downErrors);
return mapping.findForward("error");
}
}
相关推荐
- **Struts1.x** 的动作类需要继承自Struts的Action类,并且返回ActionForward对象来决定视图的跳转。 - **Struts2.x** 的动作类可以是任何实现了Action接口的对象,它使用注解或配置文件来定义结果映射,更加面向...
### Struts 1.x 在MVC架构中的角色与工作流程详解 #### Struts 概述与MVC设计模式实现 Struts是Apache软件基金会赞助的一个开源项目,它为基于Java的Web应用程序提供了一种实现MVC(Model-View-Controller)设计...
提交登录表单后,Struts框架会调用`LoginAction`处理请求,并根据其返回值决定跳转到哪个页面。 通过这个简单的Struts1.x登录示例,你可以了解Struts1.x的MVC工作流程、配置文件的编写以及Action和ActionForm的使用...
这个帮助文档将引导你完成从创建第一个Struts1.x应用,到实现复杂的业务逻辑和页面跳转。它会涵盖基本的表单提交、文件上传下载、异常处理、国际化、数据校验等多个方面,帮助初学者快速上手。尽管Struts1.x的时代已...
为了在Eclipse这样的集成开发环境中获得代码提示和自动完成,我们需要引入DTD(文档类型定义)文件,例如`struts-2.3.dtd`。 DTD是一个XML规范,它定义了一组元素和属性,以及它们的结构和限制。`struts-2.3.dtd`为...
这个压缩包"struts2.x所有包及配置文件"包含了Struts2框架的核心组件、扩展和配置文件,用于构建和管理Java web应用。 1. **核心组件**: - `struts2-core.jar`:这是Struts2框架的基础,包含了Action、Result、...
在"struts1.x入门"的教程中,我们可以学习到以下几个核心知识点: 1. **MVC模式**:理解MVC模式的基本概念,它将应用程序分为模型、视图和控制器三个部分,各自负责数据处理、用户界面展示和用户交互处理。 2. **...
标题中的"struts1-core.jar"是Struts1的核心库文件,它包含了实现框架核心功能的类和接口。描述中提到的"struts1.2.6.jar"和"struts-core-1.3.10.jar"分别是Struts1的两个不同版本,1.2.6和1.3.10,它们与"struts1-...
**Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...
Action元素定义了请求映射到的具体业务逻辑,拦截器定义了处理请求前后的操作,结果类型定义了Action执行后跳转的目标页面或资源。通过struts.xml,开发者可以精细控制应用程序的行为,实现业务逻辑和视图的分离,...
- **配置Freemarker**: 首先,在Struts1.x的配置文件(struts-config.xml)中添加Freemarker的配置,包括模板目录设置、编码设置等。 - **Action类改造**: 将原本在JSP中使用的EL表达式和JSTL标签替换为Freemarker...
- **Struts1.x** 验证通常在ActionForm中实现,通过自定义校验逻辑,如果验证失败,需要手动设置错误信息并跳转回表单页面。 - **Struts2** 验证可以通过注解或XML配置实现,可以将验证逻辑移到模型对象中,更加...
- **struts-config.xml**: 这是 `Struts 1.x` 的核心配置文件,定义了动作映射(Action Mapping)、表单bean、数据源等。通过这个文件,你可以明确地指定每个HTTP请求应如何映射到特定的 `Action` 类。 ### 4. 请求...
2. **配置文件(struts-config.xml)**:这是Struts1.x的核心配置文件,它定义了Action的映射、Form Bean的配置以及结果页面的跳转规则。例如,你可以在这里指定哪个URL请求应该由哪个Action处理。 3. **Form Bean**...
完成后,工程会自动引入Struts 1.2的jar包,生成struts-config.xml配置文件。 struts-config.xml是Struts框架的核心配置文件,定义了ActionMapping、ActionForm和数据源等信息。例如: ```xml <!DOCTYPE struts-...
- `result`元素:Action执行成功后的跳转页面。 - `param`元素:Action的参数设置。 通过以上分析,我们可以看出`struts.xml`配置文件在Struts2框架中的重要性,它不仅定义了应用程序的基本结构,还控制着各种功能...
它接收到Servlet容器转发的请求,处理完成后,返回一个表示跳转路径的字符串,通常指向一个JSP页面或另一个Action。 - **ActionForm**: 用于封装请求参数,它是业务数据和视图之间的桥梁。用户在表单中输入的数据会...
解压后,我们可以看到Struts1.x的目录结构,如`WEB-INF`目录下的`struts-config.xml`配置文件、`web.xml`部署描述符、`classes`目录中的Action类、Form Bean类以及其他支持类,还有`jsp`目录下的视图页面。...
10. **依赖库**:为了使用Struts1.x,需要将Struts的库文件(jar包)拷贝到WEB-INF/lib目录下,这些库包含了Struts框架的核心组件和依赖的第三方库。 总结来说,Struts1.x 提供了一个结构化的Web应用开发框架,通过...
Struts1.x是一个经典的Java Web框架,用于构建MVC(Model-View-Controller)架构的应用程序。这个"Struts1.x写的增删改查实例"是面向初学者和开发者的一个实用教程,它演示了如何使用Struts1.x来实现基本的数据操作...