모든 Action들이 상속받게 한 BaseAction의 예입니다.
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
처음의 것은 로그인이 필요 없는 경우이며 두번째 것은 로그인이 필요한 것입
니다. 저의 경우 BaseAction에 getCart라는 장바구니를 리턴하는(생성하는) 함수를 만들어 두어 추후 쇼핑카트를 만드는 Action에서 호출토록 했습니다.
=============================
BaseAction.java
=============================
//============================================================================
/**
* 시스템명 : BASEACTION
* 작 성 일 : 2005-05-06
* 작 성 자 : Lee, Jong-Cheol
* 수 정 자 :
* 파 일 명 : oraclejava.BaseAction
* 버 전 : 1.0
* 개 요 : 모든 Action들이 상속하는 Action Class
* 모든 Action들은 이 BaseAction Class를 상속하고 필요한 메소드를 정의
* 이 Action이 필요한 이유는 모든 Action이 수행해야 되는 공통 부분이 있는 경우
* 이곳에서 처리(예:로그인 확인 등)
* 이 력 : 2005-05-08 : 초기 작성
*
*/
//============================================================================
package oraclejava;
import goods.model.Cart;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.validator.DynaValidatorForm;
import oraclejava.YLog;
import login.UserInfoVO;
/**
* @author 이종철
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class BaseAction extends DispatchAction {
/** 클래스의 메소드 이름 */
public static final String METHOD_NAME = "run";
/** ActionForward 이름 */
public static final String FORWARD_NAME = "fwd";
/**
* DispatchAction 의 처리를 재정의한다.
*
* @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
String methodName = request.getParameter(METHOD_NAME);
String uri = request.getRequestURI();
//관리자 페이지인 경우 관리자 인증이 되어 있는지 확인
if(uri.indexOf("webmaster") != -1) {
HttpSession session = request.getSession();
UserInfoVO user = (UserInfoVO)session.getAttribute(Constants.USER_KEY);
if(user == null || (user != null && !(user.getId().equals("shopmaster")))){
return new ActionForward("adminlogin", true);
}
}
if (methodName != null && methodName.length() > 0)
{
/*
* 주어진 method 이름으로 실제 BaseAction 의 Method 를 호출해준다.
*/
return dispatchMethod(mapping, form, request, response, methodName);
} else
{
/*
* parameter 에 forward 항목이 존재할 경우에는 ActionForward 정보에서 해당 forward 이름으로
* forward 를 시킨다.
*/
String forwardName = request.getParameter(FORWARD_NAME);
if( forwardName != null && forwardName.length() > 0 )
{
return mapping.findForward(forwardName);
} else
{
/*
* method, forward 모두 없으면 해당 parameter로 forward 시켜준다.
* 일명 ForwardAction -> BaseForwadAction 역활을 담당한다.
*/
String parameter = mapping.getParameter();
if( parameter != null && parameter.length() > 0)
{
if(!parameter.equals("run"))
return new ActionForward(parameter);
}
}
/*
* 모든 사항에 해당되지 않으면 defaultAction을 호출한다.
* 상속받는 곳에서 이메소드를 구현해 주면된다.
*/
return defaultAction(mapping, form, request, response);
}
}
/**
* method parameter 가 정의되어 있지 않을 경우 기본으로 수행되는 action.
*
* BaseAction 을 상속받는 자식 클래스에서 overriding 하여 사용함.
*
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward defaultAction(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception
{
return mapping.findForward("badaction");
}
// 쇼핑 카트를 얻어옴, 없으면 새로 만듬
public Cart getCart(boolean create, HttpServletRequest request)
throws Exception {
HttpSession session = request.getSession();
Cart cart = (Cart) session.getAttribute(Constants.CART_KEY);
if ((cart == null) && create) {
cart = new Cart();
session.setAttribute(Constants.CART_KEY, cart);
}
return cart;
}
public Cart getCart(HttpServletRequest request) throws Exception {
return getCart(true, request);
}
}
===============================
BaseActionLogin.java
===============================
//============================================================================
/**
* 시스템명 : BASEACTIONLOGIN
* 작 성 일 : 2005-05-06
* 작 성 자 : Lee, Jong-Cheol
* 수 정 자 :
* 파 일 명 : oraclejava.BaseAction
* 버 전 : 1.0
* 개 요 : 모든 Action들이 상속하는 Action Class(로그인이 필요한 경우)
* 모든 Action들은 이 BaseAction Class를 상속하고 필요한 메소드를 정의
* 이 Action이 필요한 이유는 모든 Action이 수행해야 되는 공통 부분이 있는 경우
* 이곳에서 처리(예:로그인 확인 등)
* 이 력 : 2005-05-08 : 초기 작성
*
*/
//============================================================================
package oraclejava;
import goods.model.Cart;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import oraclejava.YLog;
/**
* @author 이종철
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class BaseActionLogin extends DispatchAction {
/** 클래스의 메소드 이름 */
public static final String METHOD_NAME = "run";
/** ActionForward 이름 */
public static final String FORWARD_NAME = "fwd";
/**
* DispatchAction 의 처리를 재정의한다.
*
* @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception
{
String methodName = request.getParameter(METHOD_NAME);
//로그인 후 다시 원래 페이지로 보내기 위해...(로그인 전 페이지로 보냄)
String uri = request.getHeader("referer");
YLog.info("refer URI in BaseActionLogin ::::: ------------->" + uri);
//사용자 인증이 되어 있는지 확인
HttpSession session = request.getSession();
//사용자 로그인이 안되어 있으면..
if ((session == null) || (session.getAttribute(Constants.USER_KEY) == null)) {
//장바구니를 볼려고 했으나 인증이 안된 경우
if (methodName != null && methodName.indexOf("cart") > -1) {
if (request.getParameter("is_direct") != null &&
request.getParameter("is_direct").equals("Y")) {
uri = Constants.ORDER; //상품상세 보기에서 바로 구매 버튼인 경우
}
else {
uri = Constants.CART;
}
}
//주문을 할려고 했으나 인증이 안된 경우
else if (methodName != null && methodName.indexOf("order") > -1) {
uri = Constants.ORDER;
}
if (uri == null) {
uri = "/oraclejava/index.jsp";
}
response.sendRedirect("/oraclejava/loginLevelCheck.jsp?uri="+uri); //로그인후 돌아가기 위해
return null;
}
if (methodName != null && methodName.length() > 0)
{
/*
* 주어진 method 이름으로 실제 BaseActionLogin 의 Method 를 호출해준다.
*/
return dispatchMethod(mapping, form, request, response, methodName);
} else
{
/*
* parameter 에 forward 항목이 존재할 경우에는 ActionForward 정보에서 해당 forward 이름으로
* forward 를 시킨다.
*/
String forwardName = request.getParameter(FORWARD_NAME);
if( forwardName != null && forwardName.length() > 0 )
{
return mapping.findForward(forwardName);
} else
{
/*
* method, forward 모두 없으면 해당 parameter로 forward 시켜준다.
* 일명 ForwardAction -> BaseForwadAction 역활을 담당한다.
*/
String parameter = mapping.getParameter();
if( parameter != null && parameter.length() > 0)
{
if(!parameter.equals("run"))
return new ActionForward(parameter);
}
}
/*
* 모든 사항에 해당되지 않으면 defaultAction을 호출한다.
* 상속받는 곳에서 이메소드를 구현해 주면된다.
*/
return defaultAction(mapping, form, request, response);
}
}
/**
* method parameter 가 정의되어 있지 않을 경우 기본으로 수행되는 action.
*
* BaseAction 을 상속받는 자식 클래스에서 overriding 하여 사용함.
*
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward defaultAction(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception
{
return mapping.findForward("badaction");
}
// 쇼핑 카트를 얻어옴, 없으면 새로 만듬
public Cart getCart(boolean create, HttpServletRequest request)
throws Exception {
HttpSession session = request.getSession();
Cart cart = (Cart) session.getAttribute(Constants.CART_KEY);
if ((cart == null) && create) {
cart = new Cart();
session.setAttribute(Constants.CART_KEY, cart);
}
return cart;
}
public Cart getCart(HttpServletRequest request) throws Exception {
return getCart(true, request);
}
}
댓글 없음:
댓글 쓰기