아래의 내용은 여기에 올라와 있는 것과 유사한것입니다.
그런데. 이번에는 파일 업로드 부분이 추가 되었습니다.
form type이 mutilpart 일경우에. request에서 getParameter로
파라메터를 못 가져오더군요.
그래서 한참을 찾은 것이. CommonsMultipartRequestHandler 클래스를 이용해서
해결했습니다.
또한 파일을 여기 Action에서 가져가서 따른 Action으로 넘길때. 메모리의 공간을 찾이 할꺼
같아서. 여기서 바로 템프 디렉토리에 저장을 한 다음 파일 명과, 파일의 크기를 넘겨 주는
방식을 취했습니다.
참고 하실 것이 있으면 참고 하세요.
/*
* 파일명 : BaseAction.java
* 버 젼 : 1.0
* 저작권 :
* 설 명 : 공통 Action 처리
*/
package ad.com.action;
import java.util.Enumeration;
import java.util.Vector;
import java.util.Hashtable;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Cookie;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.RequestProcessor;
import org.apache.struts.upload.FormFile;
import org.apache.struts.upload.CommonsMultipartRequestHandler;
import java.io.FileOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.BufferedOutputStream;
import org.apache.commons.fileupload.FileItem;
import ad.com.form.BaseForm;
import ad.util.common.ReturnResult;
import ad.util.common.Constant;
/**
* <pre>
* 공통 Action 처리
* 세션처리
* 폼빈처리
* [관련항목]
*
* [사용법]
*
* [변경기록]
*
* </pre>
* @author Copyright(c) 2004-05 by KSC. All right reserved.
* @version 1.0
* @see ad.util.common.ReturnResult
* @see ad.com.form.BaseForm
* @since 1.1
*/
public abstract class BaseAction extends Action
{
/**
* Description : Action Servlet 에서 호출
* @param ActionMapping mapping
* @param ActionForm form
* @param HttpServletRequest request
* @param HttpServletResponse response
* @return ActionForward
* @exception Exception - doExecute 수행
*/
public ActionForward execute (
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response
) throws Exception
{
/**
* 공통 Form Bean
*/
BaseForm lo_BaseForm = null;
/**
* content Type
*/
String contentType = null;
/**
* HttpServletRequest
*/
HttpServletRequest req = null;
CommonsMultipartRequestHandler mRhdl = null;
try
{
contentType = request.getContentType();
/**
* 사용자 로그인 여부 체크
*/
if (!CookieCheck(request) )
{
return mapping.findForward("login");
}
/**
* contentType 이 multipart/form-data 인지 구분
*/
if ( (contentType != null) && contentType.startsWith("multipart/"))
{
/**
* Request parser
*/
req = request;
mRhdl = new CommonsMultipartRequestHandler();
mRhdl.handleRequest(req);
lo_BaseForm = getFileitems( mRhdl, getCookieValue(req, getEdtValue ( getFormValue(req) ))) ;
/**
* 업로드 파일 삭제처리(임시 데이터)
*/
mRhdl.rollback();
}
else
{
req = request;
lo_BaseForm = getCookieValue(req, getEdtValue ( getFormValue(req) )) ;
}
return doExecute(mapping, form, req, response, lo_BaseForm);
}
catch (Exception e)
{
System.out.println("Exception :: Base Action ["+e.getMessage()+"]");
return doExecute(mapping, form, request, response, null);
}
}
/**
* Description : request에서 폼의 이름과 값을 가져온다.
* @param HttpServletRequest req
* @return BaseForm
* @exception Exception return null
*/
private BaseForm getFormValue(HttpServletRequest req )
{
Enumeration lo_getParam = null;
String ls_Param = "";
String ls_Value = "";
BaseForm lo_BForm = null;
try
{
lo_BForm = new BaseForm();
lo_getParam = req.getParameterNames();
if (lo_getParam != null )
{
for ( ; lo_getParam.hasMoreElements() ;)
{
ls_Param = (String)lo_getParam.nextElement() ;
ls_Value = req.getParameter(ls_Param);
lo_BForm.setParam(ls_Param, ls_Value);
}
return lo_BForm;
}
else
{
return null;
}
}
catch (Exception e)
{
System.out.println("Exception :: BaseAction :: getFormValue ["+e.getMessage()+"]");
return null;
}
}
/**
* Description : 에디터 테이블의 데이터를 ReturnResult 형태로 변환 하여
* edtList 의 키 값으로 넣는다.
* @param BaseForm lo_BaseForm
* @return BaseForm
* @exception Exception return BaseForm
*/
private BaseForm getEdtValue ( BaseForm lo_BaseForm ){
ReturnResult lo_retRst = null;
BaseForm lo_BF = null;
String ls_edtList = "";
String ls_edtValue = "";
String [] la_edtRowval = null;
String [] la_edtColval = null;
String [] la_edtList = null;
int li_idx = 0;
Vector lo_lstVt = new Vector();
try
{
ls_edtList = lo_BaseForm.getParam("edtlist" ) != null ? lo_BaseForm.getParam("edtlist" ) : "";
ls_edtValue = lo_BaseForm.getParam("edtvalue") != null ? lo_BaseForm.getParam("edtvalue") : "";
if ( (!ls_edtList.trim().equals(""))
&& (!ls_edtValue.trim().equals(""))
)
{
la_edtList = ls_edtList.trim().toUpperCase().split(";");
la_edtRowval = ls_edtValue.split("@");
for ( li_idx = 0 ; li_idx < la_edtRowval.length ; li_idx ++)
{
la_edtColval = la_edtRowval[li_idx].split(";");
lo_lstVt.addElement(la_edtColval);
}
lo_retRst = new ReturnResult (lo_lstVt, la_edtList) ;
lo_BaseForm.setParam ( "edtList" , lo_retRst);
lo_BF = lo_BaseForm;
}
else
{
lo_BF = lo_BaseForm;
}
}
catch ( Exception e )
{
System.out.println(" Exception :: BaseAction :: getEdtValue ["+e.getMessage()+"]");
}
return lo_BF;
}
/**
* Description : 로그인 여부 체크
* @param HttpServletRequest request
* @return boolean
* @exception Exception return false
*/
private boolean CookieCheck ( HttpServletRequest request ){
int li_Loop = 0;
String ls_userid = "";
Cookie[] lo_Cookie = request.getCookies();
boolean lb_chk = false;
try
{
for(li_Loop = 0 ; li_Loop < lo_Cookie.length ; li_Loop ++)
{
if (lo_Cookie[li_Loop].getName().equals("PK_USERID"))
{ // 시스템 계정
ls_userid = lo_Cookie[li_Loop].getValue();
break;
}
}
if (ls_userid.trim().equals("") )
{
lb_chk = false;
}
else
{
lb_chk = true;
}
return lb_chk;
}
catch ( Exception e )
{
System.out.println(" Exception :: BaseAction :: CookieCheck ["+e.getMessage()+"]");
}
return lb_chk;
}
/**
* Description : 쿠키 값을 Form Bean 에 저장
* @param HttpServletRequest request
* @param BaseForm lo_BaseForm
* @return BaseForm lo_BaseForm
* @exception none
*/
private BaseForm getCookieValue ( HttpServletRequest request, BaseForm lo_BaseForm )
{
int li_Loop = 0;
Cookie[] lo_Cookie = request.getCookies();
try
{
for(li_Loop = 0 ; li_Loop < lo_Cookie.length ; li_Loop ++)
{
if (lo_Cookie[li_Loop].getName().equals("PK_USERID"))
{
lo_BaseForm.setParam ( "gs_userid" , lo_Cookie[li_Loop].getValue());
continue;
}
else if (lo_Cookie[li_Loop].getName().equals("PK_USERNM"))
{
lo_BaseForm.setParam ( "gs_usernm" , lo_Cookie[li_Loop].getValue());
continue;
}
else if (lo_Cookie[li_Loop].getName().equals("PK_DEPTCD"))
{
lo_BaseForm.setParam ( "gs_deptcd" , lo_Cookie[li_Loop].getValue());
continue;
}
else if (lo_Cookie[li_Loop].getName().equals("PK_DEPTNM"))
{
lo_BaseForm.setParam ( "gs_deptnm" , lo_Cookie[li_Loop].getValue());
continue;
}
else if (lo_Cookie[li_Loop].getName().equals("PK_WORKDT"))
{
lo_BaseForm.setParam ( "gs_workdt" , lo_Cookie[li_Loop].getValue());
continue;
}
else if (lo_Cookie[li_Loop].getName().equals("PK_WORKS"))
{
lo_BaseForm.setParam ( "gs_works" , lo_Cookie[li_Loop].getValue());
continue;
}
else if (lo_Cookie[li_Loop].getName().equals("PK_WORKSNM"))
{
lo_BaseForm.setParam ( "gs_worksnm" , lo_Cookie[li_Loop].getValue());
continue;
}
else if (lo_Cookie[li_Loop].getName().equals("PK_CLIENTIP"))
{
lo_BaseForm.setParam ( "gs_clientip" , lo_Cookie[li_Loop].getValue());
continue;
}
}
} catch ( Exception e ){
System.out.println(" Exception :: BaseAction :: getCookieValue ["+e.getMessage()+"]");
}
return lo_BaseForm;
}
/**
* Description : 파일 명과 파일 크기를 Form Bean 에 저장
* @param HttpServletRequest request
* @param BaseForm lo_BaseForm
* @return BaseForm lo_BaseForm
* @exception Exception return BaseForm
*/
private BaseForm getFileitems ( CommonsMultipartRequestHandler cMRH, BaseForm lo_BaseForm )
{
Enumeration oFileNames = null;
Hashtable oFileItems = null;
String sFileObjName = null;
String sFileName = null;
FormFile oFileItem = null;
File oCFile = null;
int nFileSize = -1;
try
{
/**
* 파일 Object HashTable
*/
oFileItems = cMRH.getFileElements();
if ( oFileItems != null)
{
/**
* 파일 Object Form Name
*/
oFileNames = oFileItems.keys();
if (oFileNames != null)
{
for ( ; oFileNames.hasMoreElements() ; )
{
sFileObjName = (String) oFileNames.nextElement();
/**
* 파일
*/
oFileItem = (FormFile) oFileItems.get(sFileObjName) ;
if ( oFileItem == null) continue;
sFileName = oFileItem.getFileName();
nFileSize = oFileItem.getFileSize() ;
System.out.println("BaseAction :: getFileName ::sFileName ["+ sFileName+"]");
System.out.println("BaseAction :: getFileName ::nFileSize ["+ nFileSize+"]");
lo_BaseForm.setParam(sFileObjName , sFileName );
/**
* 파일 크기 10 M
*/
if ( (nFileSize > (10 * 1024000)) )
{
/**
* 파일 용량 초과 및 파일이 존재하지 않을 경우
*/
lo_BaseForm.setParam(sFileObjName+"_size" , "-1" );
continue;
}
/**
* 파일 크기 0M 제외
*/
if ( (nFileSize <= 0 ) )
{
/**
* 파일 용량 초과 및 파일이 존재하지 않을 경우
*/
lo_BaseForm.setParam(sFileObjName+"_size" , "0" );
continue;
}
InputStream stream = oFileItem.getInputStream();
oCFile = new File (Constant.TEMP_DIR + sFileName.trim());
OutputStream bos = new BufferedOutputStream(new FileOutputStream(oCFile));
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);
}
bos.close();
lo_BaseForm.setParam(sFileObjName+"_size" , new Integer(nFileSize).toString() );
stream.close();
}
}
}
}
catch (Exception e)
{
System.out.println(" Exception :: BaseAction :: getFileitems ["+e.getMessage()+"]");
}
return lo_BaseForm;
}
/**
* Description : BaseAction클래스를 상속하는 클래스들이 구현해야할 메써드.
* @param ActionMapping mapping,
* @param ActionForm form,
* @param HttpServletRequest request,
* @param HttpServletResponse response,
* @param BaseForm oTmpMap
* @return ActionForward
* @exception none
*/
protected abstract ActionForward doExecute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response,
BaseForm oTmpMap
) throws Exception;
}
'프로그래밍 > struts' 카테고리의 다른 글
스트럿츠 파일 업로드 (0) | 2011.02.11 |
---|---|
스트럿츠 validate 사용시 CheckBox 폼 받기 (0) | 2009.06.10 |
struts 커스텀 태그 (0) | 2009.06.10 |
struts-config.xml 설명 (1) | 2009.06.10 |
배열 받아오기 및 저장 (iterator) (0) | 2009.06.10 |