0 0

[Struts] struts1.x下载文件完成后跳转到成功画面20

   看了好多网上用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");
		
		    }

		}
		








2009年1月06日 15:21

5个答案 按时间排序 按投票排序

0 0

采纳的答案

可以分两步,第一步处理下载之前的事务,第二步利用弹出窗口做下载。在弹出窗口上面做文章控制父页面的消息显示。
想直接一个请求做是不行的,因为response已经返回了的缘故。

2009年1月06日 16:48
0 0

建议用AJAX来检测用户下载,这样的界面比较友好,而且,最后只需要返回一个字符串或XML就可以了,很方便,而且,很友好

2009年1月07日 09:50
0 0

由于线性提交时间长
会看像假死一样.......

一般用ajax来作....成功页面
叫作异步....

2009年1月06日 18:16
0 0

检查一下你的文件下载请求响应的顺序吧,action不会有什么问题的.

2009年1月06日 16:17
0 0

如果跳转最后的页面不复杂,你可以直接在action里输出吧。。。上传文件直接用jsp就可以了,不用那么复杂

2009年1月06日 15:27

相关推荐

    对struts1.x与struts2.x的区别的总结

    - **Struts1.x** 的动作类需要继承自Struts的Action类,并且返回ActionForward对象来决定视图的跳转。 - **Struts2.x** 的动作类可以是任何实现了Action接口的对象,它使用注解或配置文件来定义结果映射,更加面向...

    Struts1.x.pdf

    ### Struts 1.x 在MVC架构中的角色与工作流程详解 #### Struts 概述与MVC设计模式实现 Struts是Apache软件基金会赞助的一个开源项目,它为基于Java的Web应用程序提供了一种实现MVC(Model-View-Controller)设计...

    Struts1.x的登录示例

    提交登录表单后,Struts框架会调用`LoginAction`处理请求,并根据其返回值决定跳转到哪个页面。 通过这个简单的Struts1.x登录示例,你可以了解Struts1.x的MVC工作流程、配置文件的编写以及Action和ActionForm的使用...

    Struts1.x 中文帮助文档

    这个帮助文档将引导你完成从创建第一个Struts1.x应用,到实现复杂的业务逻辑和页面跳转。它会涵盖基本的表单提交、文件上传下载、异常处理、国际化、数据校验等多个方面,帮助初学者快速上手。尽管Struts1.x的时代已...

    Struts2的DTD配置文件struts-2.3.dtd

    为了在Eclipse这样的集成开发环境中获得代码提示和自动完成,我们需要引入DTD(文档类型定义)文件,例如`struts-2.3.dtd`。 DTD是一个XML规范,它定义了一组元素和属性,以及它们的结构和限制。`struts-2.3.dtd`为...

    struts2.x所有包及配置文件

    这个压缩包"struts2.x所有包及配置文件"包含了Struts2框架的核心组件、扩展和配置文件,用于构建和管理Java web应用。 1. **核心组件**: - `struts2-core.jar`:这是Struts2框架的基础,包含了Action、Result、...

    struts1,struts教程,struts1.x入门

    在"struts1.x入门"的教程中,我们可以学习到以下几个核心知识点: 1. **MVC模式**:理解MVC模式的基本概念,它将应用程序分为模型、视图和控制器三个部分,各自负责数据处理、用户界面展示和用户交互处理。 2. **...

    struts1-core.jar

    标题中的"struts1-core.jar"是Struts1的核心库文件,它包含了实现框架核心功能的类和接口。描述中提到的"struts1.2.6.jar"和"struts-core-1.3.10.jar"分别是Struts1的两个不同版本,1.2.6和1.3.10,它们与"struts1-...

    魔乐科技Struts2.x框架笔记

    **Struts2.x与Struts1.x对比**:相较于Struts1.x,Struts2.x具有更多的优势,如不再强制要求ActionForm,配置文件更简洁,处理流程更加清晰。具体而言,请求首先被过滤器捕获,然后根据`struts.xml`文件的配置调用...

    struts.xml文件详解.doc

    Action元素定义了请求映射到的具体业务逻辑,拦截器定义了处理请求前后的操作,结果类型定义了Action执行后跳转的目标页面或资源。通过struts.xml,开发者可以精细控制应用程序的行为,实现业务逻辑和视图的分离,...

    struts1.x整合freemarker

    - **配置Freemarker**: 首先,在Struts1.x的配置文件(struts-config.xml)中添加Freemarker的配置,包括模板目录设置、编码设置等。 - **Action类改造**: 将原本在JSP中使用的EL表达式和JSTL标签替换为Freemarker...

    Struts2与Struts1.x的深度比较

    - **Struts1.x** 验证通常在ActionForm中实现,通过自定义校验逻辑,如果验证失败,需要手动设置错误信息并跳转回表单页面。 - **Struts2** 验证可以通过注解或XML配置实现,可以将验证逻辑移到模型对象中,更加...

    struts in action (struts1.x)

    - **struts-config.xml**: 这是 `Struts 1.x` 的核心配置文件,定义了动作映射(Action Mapping)、表单bean、数据源等。通过这个文件,你可以明确地指定每个HTTP请求应如何映射到特定的 `Action` 类。 ### 4. 请求...

    struts1.x实现的网上书店示例

    2. **配置文件(struts-config.xml)**:这是Struts1.x的核心配置文件,它定义了Action的映射、Form Bean的配置以及结果页面的跳转规则。例如,你可以在这里指定哪个URL请求应该由哪个Action处理。 3. **Form Bean**...

    struts1教程.doc

    完成后,工程会自动引入Struts 1.2的jar包,生成struts-config.xml配置文件。 struts-config.xml是Struts框架的核心配置文件,定义了ActionMapping、ActionForm和数据源等信息。例如: ```xml <!DOCTYPE struts-...

    struts2.0中struts.xml配置文件详解

    - `result`元素:Action执行成功后的跳转页面。 - `param`元素:Action的参数设置。 通过以上分析,我们可以看出`struts.xml`配置文件在Struts2框架中的重要性,它不仅定义了应用程序的基本结构,还控制着各种功能...

    Struts1.x使用回顾

    它接收到Servlet容器转发的请求,处理完成后,返回一个表示跳转路径的字符串,通常指向一个JSP页面或另一个Action。 - **ActionForm**: 用于封装请求参数,它是业务数据和视图之间的桥梁。用户在表单中输入的数据会...

    学校图书管理系统(struts1.x+mysql)

    解压后,我们可以看到Struts1.x的目录结构,如`WEB-INF`目录下的`struts-config.xml`配置文件、`web.xml`部署描述符、`classes`目录中的Action类、Form Bean类以及其他支持类,还有`jsp`目录下的视图页面。...

    struts1.x 学习总结

    10. **依赖库**:为了使用Struts1.x,需要将Struts的库文件(jar包)拷贝到WEB-INF/lib目录下,这些库包含了Struts框架的核心组件和依赖的第三方库。 总结来说,Struts1.x 提供了一个结构化的Web应用开发框架,通过...

    Struts1.x写的增删改查实例

    Struts1.x是一个经典的Java Web框架,用于构建MVC(Model-View-Controller)架构的应用程序。这个"Struts1.x写的增删改查实例"是面向初学者和开发者的一个实用教程,它演示了如何使用Struts1.x来实现基本的数据操作...

Global site tag (gtag.js) - Google Analytics