Request response session 객체를 가져오는 방법

3006 단어 requestsession
Request response session 객체를 가져오는 방법
방금 작은 예를 썼지만 페이지의 속성 값은 모두setter getter 방법을 통해 값을 부여한 것을 발견했습니다. (이곳에는 구성에 대한 프레임워크, 예를 들어tapestry, 마찬가지로 기능이 강한ognl 표현식을 사용한 것 같습니다) 만약에 리퀘스트를 통해 어떤 값을 얻으려면struts2에서 어떻게 얻었을까요?
다들 아시다시피 struts1에서는
public ActionForward execute(ActionMapping mapping, ActionForm form,
     HttpServletRequest request, HttpServletResponse response) { } 

Request,respongse 대상이 있습니다.
그러면 struts2에서 두 가지 방법으로 이 대상을 얻을 수 있어요.
1. 비IoC 방식
위의 객체를 얻으려면 키 Struts 2에서com.opensymphony.xwork2.ActionContext 클래스.정적 방법 getContext () 를 통해 현재 Action의 상하문 대상을 얻을 수 있습니다.이 상대가 있으면 우리가 다른 몇 명의 상대를 얻으면 처리하기 쉽다
ActionContext ctx = ActionContext.getContext();
        Map session = ctx.getSession();

세심한 친구는 이곳의session이 맵의 대상이라는 것을 알 수 있다. Struts2의 밑바닥에 있는session은 모두 맵 형식으로 봉인되어 있다. 우리는 이 맵을 직접 조작해서session에 대한 쓰기와 읽기 조작을 할 수 있고 HttpSession 대상을 직접 조작하지 않아도 된다.
그리고 org.apache.struts2.ServletActionContext는 보조 클래스(Helper Class)로 이러한 객체를 빠르게 가져올 수 있도록 도와줍니다.
HttpServletRequest request = ServletActionContext.getRequest(); 
HttpServletResponse response = ServletActionContext.getResponse(); 
HttpSession session = request.getSession();

만약session의 속성 (Attribute) 에 접근하고 싶을 뿐이라면,ActionContext를 통해서도 가능합니다.getContext().getSession()에서 세션 범위(Scoped)의 객체를 가져오거나 추가합니다.
2. IoC 방식(이런 방식은tapestry에서도 이렇게 실현된다)
IoC 방식을 사용하려면 먼저 IoC 용기(Container)가 어떤 대상을 얻고 싶은 의사를 알려주고 해당하는 인터페이스를 통해 이를 해야 한다.구체적 실현

public class IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
    private String message;
    private Map att;
    private HttpServletRequest request;
    private HttpServletResponse response;    
    
    public String getMessage() {
        return message;        
    }
    
    publicvoid setSession(Map att) {
        this.att = att;
    }
    
    publicvoid setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    
    publicvoid setServletResponse(HttpServletResponse response) {
        this.response = response;
    }
    
    @Override
    public String execute() {        
        att.put("msg", "Hello World from Session!");
        
        HttpSession session = request.getSession();
        
        StringBuffer sb =new StringBuffer("Message from request: ");
        sb.append(request.getParameter("msg"));
        sb.append("<br>Response Buffer Size: ");
        sb.append(response.getBufferSize());
        sb.append("<br>Session ID: ");
        sb.append(session.getId());
        
        message = sb.toString();
        return SUCCESS;
    }
}

좋은 웹페이지 즐겨찾기