웹 개발 Struts:Session 객체 작성 및 제어

우선session 대상이 웹 개발에서의 생성과sessionId가 클라이언트를 생성하고 되돌려주는 운영 체제에 대해 이야기합니다.
session 대상은 클라이언트가 처음 방문할 때 새로운session 대상을 만듭니다.이 응답에서sessionId는 응답 메시지로 클라이언트 브라우저 메모리를 되돌려주거나 URL을 다시 쓰는 방식으로 클라이언트에게 돌려보내서 전체 세션을 유지합니다. sever측의 이session 대상이 소각되지 않으면 나중에 Request를 호출합니다.getSession () 는 클라이언트의session Id에 따라 서버에서 생성된session 대상을 직접 검색하고 되돌려줍니다. 이session Id에 따라session 대상을 검색하지 않은 경우 다시 만들지 않습니다.
IE 6.0의 BUG 중 하나가 IE의 개인 정보 보호 설정이기 때문에 IE에서 테스트합니다.모든 쿠키를 막을 때도 세션 쿠키로sessionId를 저장합니다.그래서 다음은 모두 세션 쿠키로 토론한 것이다.
(1) 서버가 닫히지 않았고session 대상이 소각된 시간 내에 클라이언트가 서버의 servlet이나 jsp를 다시 요청할 때 첫 번째 요청 시 생성된session Id를 요청 헤더에 첨부하여 서버에 보냅니다. 서버는session Id를 받은 후 이session Id에 따라 서버에 대응하는session 대상을 검색하고 이session 대상으로 직접 되돌려줍니다.이 때 새로운session 대상을 다시 만들지 않습니다.
(2) 서버가 닫히거나 (이전에 생성된session 대상도 사라짐),session 대상이 소각 시간이 지나면 브라우저 창이 닫히지 않고 이 브라우저 창에서 sever 측의 servlet과 jsp를 다시 요청할 때,session Id (서버가 닫히거나 소각할 때 생성된session Id) 를 서버에 보내고,server는session Id에 따라 대응하는session 대상을 찾지만, 이때session 대상은 존재하지 않습니다.이 때 새로운session 대상을 다시 생성하고 새로운sessionId를 생성하며 이 새로운sessionId를 응답 메시지 형식으로 브라우저 메모리에 보냅니다.
(3) 서버가 닫히지 않았고session 대상이 소각된 시간 안에 jsp 페이지를 클라이언트에게 요청한 후 이 브라우저 창을 닫으면 메모리에 있는sessionId도 소각됩니다.sever단의 servlet이나 jsp를 다시 요청할 때sessionId를 클라이언트 브라우저에 다시 생성하고 탐색 메모리에 존재합니다.
위의 이론은 servlet에서 테스트가 모두 성립된 것이기 때문에 다음은struts 구조에서 위의 테스트를 진행할 때의 다른 점을 이야기한다.
먼저 테스트 절차에 대해 간략하게 설명합니다.
클라이언트 요청 index.do---> 서버에 들어가는 IndexAction---> 방향login.jsp 페이지 -- ---> 요청login.do-----> 서버의 Loginaction에 들어갑니다.
먼저 설명: IndexAction에서session 대상이 생성되지 않았습니다,login.jsp에서 설정합니다.
(1) 환경 servlet+jsp
sevlet+jsp 테스트 추적 시 index.do가 Index Action에 들어간 후 login으로 돌아갑니다.jsp일 때 브라우저 메모리에 세션 쿠키가 없습니다.login에 있습니다.jsp에서 login을 요청합니다.do가 Loginaction에 들어간 후 Request를 사용합니다.getCookies () 테스트 시, 그 값은null입니다!결과는 처음부터 끝까지 세션이 생기지 않았기 때문에 일치했다.
(2) 환경struts+jsp
struts+jsp 테스트 추적을 할 때 위의 절차와 같이 결과도 같아야 한다고 생각하기 시작했지만 디버깅을 한 결과 결과는 생각한 대로 되지 않았다.login에 있습니다.do는 LoginActoin에 들어간 후, Request를 사용합니다.getCookies () 테스트 중,null이 아닌 것을 발견했습니다.name과value가 있어도 이해가 되지 않았습니다.session 대상을 만든 적이 없기 때문입니다.세션 쿠키 값이 어디서 났습니까!그러나 결과는 있다. 그러면 이때 브라우저 메모리에도 세션 쿠키가 있어야 한다고 생각하면 문제는 바로 여기에 있다!어디서 오셨어요?
나중에 자세히 고려한 후에 struts의 특징을 생각해 보니 우리가 쓴 Action 클래스는 struts의 Action을 계승한 것이고 이전에 struts의 중앙 컨트롤러인 Action Servlet을 통해 방향을 제어한 것이기 때문에 프로그램이 내가 쓴 Index Action에 들어가기 전에 struts 프레임워크의 코드는session 대상을 만들고 session Id를 생성한 것이 틀림없다고 생각한다.그래서 관련 서적을 찾아서 Action Servlet 작업 절차와 어떤 종류를 호출하는지 살펴보았는데, 그 중에서 과연 Http Session session = request를 보았다.getSession();이런 한마디!그래서 답도 알았다.
struts의 Action Servlet 클래스에서 저희 클라이언트의 요청(*.do)을 받은 후(이전에는 일련의 초기화 작업을 할 것임) 저희 요청을 직접 처리하고 해당하는 Action(저희가 쓴 것은 Index Action)을 호출하는 것이 아니라 Request Processor 클래스에 처리 작업을 맡기고 프로세스 방법에서 해당하는 요청 처리와 전환 작업을 수행하는 일련의 방법을 호출하는 것을 알고 있습니다.그중에 한 가지 방법이 나의 관심을 끌었는데 그것이 바로 프로세스 로컬() 방법이다.
Struts 프레임워크: RequestProcess 클래스의 processLocale () 메서드 원형은 다음과 같습니다.
protected void processLocale(HttpServletRequest request,
		HttpServletResponse response) {
	// Are we configured to select the Locale automatically?
	if (!moduleConfig.getControllerConfig().getLocale())
		// Has a Locale already been selected?
		HttpSession session = request.getSession();

	if (session.getAttribute(Globals.LOCALE_KEY) != null)
		// Use the Locale returned by the servlet container (if any)
		Locale locale = request.getLocale();
	if (locale != null) {
		if (log.isDebugEnabled()) {
			log.debug(" Setting user locale '" + locale + "'");
		}
		session.setAttribute(Globals.LOCALE_KEY, locale);
	}
}
 
이런 종류는struts-config.xml 프로필에 대응하는 설정 항목이 있습니다: < controller locale = "true"> 기본 상태인 locale 속성의 값은true이며,processLocale 방법을 호출하고, 첫 번째 요청할 때session 대상을 만들고session Id를 생성합니다.그러나false로 바뀌면 첫 번째 요청이ActionServlet에 도착한 후processLocale 방법을 호출하지 않고session 대상을 생성하지 않습니다.
결과도 나왔습니다. struts 응용 프로그램에서 *.do가 서버에 도착한 후 Action Servlet을 지나서 우리가 쓴 Index Action을 생각하기 전에 < controller locale = "true"> (부족한 상태) 가 생겼을 때,session 대상과session Id가 생겼습니다. 이것은struts 프레임워크 클래스에서 생성된 것입니다. 설령 우리가 Index Action에 Http Session session = request를 쓴다 하더라도.getSession();이것도 Request Process 클래스의process Locale () 방법으로 생성된 것입니다. 이때session의isNew도true입니다. 클라이언트로 되돌아오지 않았기 때문에 새로 만든 것입니다. 위의 절차에 따라login에 있습니다.jsp에서login을 통과합니다.do가 Loginaction에 들어가면 Request.get Cookies () 물론 값어치가 있습니다!또한 값은 RequestProcess 클래스의 processLocale () 방법에서session 대상을 생성할 때 생성됩니다.
만약 우리가struts-config에 있다면.xml에 를 추가할 때 위의 절차에 따라 프로그램을 추적하고 Loginaction에서 Request를 사용합니다.get Cookies () 테스트 시, 그 값은null입니다. 물론 Index Action에 Http Session session = request를 씁니다.getSession();는 IndexAction에 들어갈 때 새로 만들어지고 isNew도 true입니다.

좋은 웹페이지 즐겨찾기