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>