페이지

2015. 2. 25.

[struts2] 인터셉터- servletConfig

servletConfig


mvc패턴처럼 사용할수 있도록 해주는 것이 servletconfig임

session, uri, ip 와 같은 정보를 꺼내올수 있도록 도움

interceptor로부터 주입 받아야함

기존에 jsp에서는 session setAtribute.. getAtribute...

mvc에서는 HttpSession session = ~~ 이런 식으로 사용해왔음





servletConfig은 총 7개의 인터페이스가 있다.

ServletContextAware : ServletContext 객체를 받을 수 있다.
ServletRequestAware : HttpServeltRequest 객체를 받을 수 있다.
ServletResponseAware : HttpServeltResponse 객체를 받을 수 있다.
ParameterAware : Parameter Map을 받을 수 있다. DTO쓰면 되서 거의 쓰이지 않음
RequestAware : Request Map을 받을 수 있다.
SessionAware : Session Map을 받을 수 있다.
ApplicationAware : Application Map을 받을 수 있다.

이 중에 ServletRequestAware랑 SessionAware만 거의 쓰인다.





SessionAware

[HelloWorld.java]
public class HelloWorld implements SessionAware{
    private Map sessionMap = null;
    public String execute(){
        sessionMap.put("memId", "test");
        //sessionMap.get("memId"); // 세션 확인
        //sessionMap.remove("memId"); // 로그아웃

        return "success";
    }

    public void setSession(Map arg0) {
        this.sessionMap = arg0;
        //session.setArrtibute("memId",id); 기존에 이렇게 사용했었음
    }   
}

[result.jsp]
<h2>세션(memId) = ${sessionScope.memId}</h2>

결과 : 세션(memId) = test
















ServletRequestAware




[HelloWorld.java]
public class HelloWorld implements ServletRequestAware{
    private HttpServletRequest request = null;
   
    public String execute(){
        String id = request.getParameter("id");
        HttpSession session = request.getSession();
        session.setAttribute("memId", "test");

        return "success";
    }

    public void setServletRequest(HttpServletRequest arg0) {
        this.request = arg0;
        //이렇게 설정해두면 MVC패턴과 동일하게 사용할 수 있다.
    }   
}





servletConfig을 이용해서 로그인 폼을 만들어 보자

우선 인터셉터 설정부터




[HelloWorld .java]
public class HelloWorld implements Preparable, ModelDriven, DAOSuper, SessionAware{
    private DAO dao = null;
    private DTO dto = null;
    private Map sessionMap = null;
    public String execute(){
        int check = dao.userCheck(dto.getId(), dto.getPw());
        if(check ==1){
            sessionMap.put("memId", dto.getId());
        }
        return "success";
    }
    public void setSession(Map arg0) {this.sessionMap = arg0;}
    public void setDAO(DAO dao) {this.dao = dao;}
    public Object getModel() {return dto;}
    public void prepare() throws Exception {dto = new DTO();
}
  
}






[struts.xml]
<struts>
    <package name="test" extends="struts-default">
        <interceptors>
            <interceptor name="hello" class="test.interceptor.HelloInterceptor" />  
            <interceptor name="dao" class="test.interceptor.DAOInterceptor" />  
        </interceptors>
      
        <action name="hello2" class="test.action.HelloWorld">
            <interceptor-ref name="prepare"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="params"/>
            <interceptor-ref name="dao"/>
            <interceptor-ref name="servletConfig" />

            <result>/0223/result.jsp</result>
        </action>
    </package>
</struts>


<interceptor-ref name="prepare"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="params"/>
폼에서 전달하기 위해서 3개 사용 (DTO)

<interceptor-ref name="dao"/>
dao사용

<interceptor-ref name="servletConfig" />
세션 사용


[DAO.java]
public class DAO {
    public int userCheck(String id, String pw){
        // ...이하 생략
        return 1;
    }
}










[form.jsp]
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

<form action="/struts/hello2.action">
    id : <input type="text" name="id"/>
    pw : <input type="password" name="pw"/>
   
    <input type="submit" value="전송"/>
</form>






















[result.jsp]
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>

<h2>세션(memId) = ${sessionScope.memId}</h2>