struts2 다운로드 파일 원리 및 간단한 다운로드 코드

2788 단어
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.devMode" value="true"/>
      <package name="lee" extends="struts-default">
              <action name="downPro" class="com.zjlolife.downAction.DownLoadAction">
                     <param name="inputPath">\images\    .jpg</param>
                     <result name="success" type="stream">
                           <param name="contentType">image/jpg</param>
                           <param name="inputName">targetFile</param>
                           <param name="contentDisposition">attachment;filename="wjc_logo.jpg"</param>
                           <param name="bufferSize">4096</param>
                     </result>
              </action>
              <action name="*">
                    <result>/WEB-INF/content/download.jsp</result>
               </action>
      </package>
     
</struts>

DownloadAction.java
package com.zjlolife.downAction;


import java.io.InputStream;


import org.apache.struts2.ServletActionContext;


public class DownLoadAction {


  private String inputPath;
  
  
  public String getInputPath() {
	return inputPath;
}




public void setInputPath(String inputPath) {
	this.inputPath = inputPath;
}




public InputStream getTargetFile() {
	System.out.println("  targetFile"); //execute()    ,      。
	  return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
  }


public String execute() {
	System.out.println("  execute");    //   
	return "success";
}
}

파일을 다운로드하는 대략적인 절차를 분석해 봅시다.
struts2의 Filter는 사용자의 요청을 차단하고 사용자가 필요로 하는 action을 받은 다음에 설정 파일을 통해 대응하는 action의 기본 차단기를 찾고 이 설정에 대응하는 차단기 클래스의 대상을 생성하며 ActionInvocation 클래스를 실현한 대상을 생성하고 ActionInvocation을 통해 action을 제어합니다. 즉 ActionInvocation을 호출합니다.voke () 방법, 그리고 차단기를 호출합니다. 차단하는 과정에서 아무런 문제가 없으면 action의execute () 방법을 실행합니다.그리고 Filter는 이 액션에 대응하는 반환 형식 type이stream이고 기본값은dispacher라는 것을 발견했습니다.Filter는streamResult류의 대상을 만들어stream 유형을 처리하고result의 관련 매개 변수인 inputName,contentDisposition,contentType 등,action의 getTargetFile () 방법을 호출하여 파일을 다운로드하는 데 필요한 흐름을 되돌려줍니다. 어쩔 수 없습니다. 이것이streamResult의 메커니즘입니다.
각resultType은 서로 다른 처리 클래스와 파라미터가 필요합니다.dispacher 형식의 클래스는 인자 location이 필요합니다. (기본적으로 쓰지 않으면 location입니다.)

좋은 웹페이지 즐겨찾기