2021. 05. 28(金)TIL
JSP
JSP内蔵オブジェクト
JSPファイルを変換して生成されるJavaクラスのjspService(リクエスト、レスポンス)メソッドで定義されるJSP組み込みオブジェクト.public final class main_jsp extends HttpJspBase {
// main_jsp 설계도로 main_jsp객체를 생성한 후 초기화 작업의 수행을 위해 사용되는 메소드
public void _jspInit() {
}
// main_jsp 설계도로 생성한 main_jsp객체가 폐기되기 전에 수행할 작업을 구현하기 위해 사용되는 메소드
public void _jspDestroy() {
}
// main.jsp에 대한 요청이 접수될 때마다 실행되는 메소드
// Tomcat은 요청이 접수되면 HttpServletRequest(요청객체), HttpServletResponse(응답객체)를
// 생성한 다음 모든 요청메세지를 요청객체에 담는다.
// Tomcat은 요청메세지를 분석해서 main.jsp에 대한 요청이면, main_jsp 설계도로 생성한 객체의
// _jspService(request, response)를 실행한다.
// 그리고, _jspService(request, response)를 실행할 때, 미리 생성해둔 요청객체와 응답객체를 매개변수 전달한다.
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// JSP의 내장객체를 참조할 참조변수를 선언한다.///////////////////////////////////////////////////////
PageContext pageContext; // JSP 페이지에 대한 정보를 가지는 객체다.
HttpSession session = null; // 클라이언트에 대한 정보를 가지는 객체다.
ServletContext application; // 웹애플리케이션 프로젝트에 대한 정보를 가지는 객체다.
ServletConfig config; // 서블릿의 설정정보를 가지는 객체다.
JspWriter out = null; // 텍스트컨텐츠(text, html, xml, json) 클라이언트에게 보내는 객체다.
Object page = this; // 현재 생성된 이 객체를 참조한다.
// JSP의 내장객체를 생성/획득해서 위에서 선언한 참조변수에 대입한다.//////////////////////////////////////
pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
// - 요청메세지에 세션아이디가 포함되어 있지 않으면 새로운 세션객체를 생성하고, 그 세션객체를 참조하게 한다.
// * 새로 생성한 세션객체의 세션아이디를 클라이언트에게 응답으로 보낸다.
// - 요청메세지에 세션아이디가 포함되어 있으면, 세션아이디에 해당하는 세션객체를 찾아서 그 세션객체를 참조하게 한다.
// - 요청메세지에 세션아이디가 포함되어 있지만, 세션아이디에 해당하는 세션객체가 없으면, 새로운 세션객체를 생성하고,
// 그 세션객체를 참조하게 한다.
// * 새로 생성한 세션객체의 세션아이디를 클라이언트에게 응답으로 보낸다.
// - 즉, JSP에서 session은 null이 아니다.
// - 결론
// - session에는 요청을 접수한 클라이언트 전용의 세션객체가 항상 연결된다.
// - 세션객체에 정보를 저장하면, 그 세션객체의 주인(클라이언트)만 활용할 수 있다.
// - 세션객체에는 이 세션객체의 주인인 클라이언트의 정보(아이디, 이름)를 저장해 둔다.
// - 클라이언트의 요청이 접수될 때 마다, 그 클라이언트 전용의 세션객체가 session으로 참조되고,
// 추가적인 작업없이도 세션객체에 보관된 사용자정보를 활용해서 지금 요청한 클라이언트를 식별할 수 있다.
session = pageContext.getSession();
out = pageContext.getOut();
// JSP 파일의 내용이 여기에 추가된다/////////////////////////////////////////////////////////////////
// JSP 파일의 스크립틀릿, 표현식에서는 JSP의 내장객체를 참조하고 있는 참조변수들을 사용해서
// JSP 내장객체를 직접 사용할 수 있다.
// - 사용가능한 내장객체 : request, response, pageContext, session, application, config, out, page
// - 자주 사용되는 내장객체 : request, response, session 정도만 자주 사용된다.
<%
// 요청객체(HttpServletRequest)를 참조하는 request를 사용하기
String id = request.getParameter("id");
String password = request.getParameter("password");
// 세션객체(HttpSession)를 참조하는 session를 사용하기
// 1. 클라이언트를 식별할 수 있는 정보를 그 클라이언트 전용의 세션객체에 보관하기
// - 사용자 인증이 완료된 클라이언트에 대해서, 해당 클라이언트의 User정보를 session객체에 담기
// session.setAttribute("USER", user);
// 2. 클라이언트의 요청이 접수되었을 때 해당 클라이언트가 누구인지 알아내기
// - session은 언제나 요청을 접수한 클라이언트 전용의 세션객체를 참조하고 있다.
// User loginedUser = (User) session.getAttribute("USER");
// String userId = loginedUser.getId();
// 응답객체(HttpServletResponse)를 참조하는 response를 사용하기
response.sendRedirect("../main.jsp");
%>
}
}
JSPの属性とスキャン
ツールバーの
JSPファイルを変換して生成されるJavaクラスのjspService(リクエスト、レスポンス)メソッドで定義されるJSP組み込みオブジェクト.
public final class main_jsp extends HttpJspBase {
// main_jsp 설계도로 main_jsp객체를 생성한 후 초기화 작업의 수행을 위해 사용되는 메소드
public void _jspInit() {
}
// main_jsp 설계도로 생성한 main_jsp객체가 폐기되기 전에 수행할 작업을 구현하기 위해 사용되는 메소드
public void _jspDestroy() {
}
// main.jsp에 대한 요청이 접수될 때마다 실행되는 메소드
// Tomcat은 요청이 접수되면 HttpServletRequest(요청객체), HttpServletResponse(응답객체)를
// 생성한 다음 모든 요청메세지를 요청객체에 담는다.
// Tomcat은 요청메세지를 분석해서 main.jsp에 대한 요청이면, main_jsp 설계도로 생성한 객체의
// _jspService(request, response)를 실행한다.
// 그리고, _jspService(request, response)를 실행할 때, 미리 생성해둔 요청객체와 응답객체를 매개변수 전달한다.
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// JSP의 내장객체를 참조할 참조변수를 선언한다.///////////////////////////////////////////////////////
PageContext pageContext; // JSP 페이지에 대한 정보를 가지는 객체다.
HttpSession session = null; // 클라이언트에 대한 정보를 가지는 객체다.
ServletContext application; // 웹애플리케이션 프로젝트에 대한 정보를 가지는 객체다.
ServletConfig config; // 서블릿의 설정정보를 가지는 객체다.
JspWriter out = null; // 텍스트컨텐츠(text, html, xml, json) 클라이언트에게 보내는 객체다.
Object page = this; // 현재 생성된 이 객체를 참조한다.
// JSP의 내장객체를 생성/획득해서 위에서 선언한 참조변수에 대입한다.//////////////////////////////////////
pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
// - 요청메세지에 세션아이디가 포함되어 있지 않으면 새로운 세션객체를 생성하고, 그 세션객체를 참조하게 한다.
// * 새로 생성한 세션객체의 세션아이디를 클라이언트에게 응답으로 보낸다.
// - 요청메세지에 세션아이디가 포함되어 있으면, 세션아이디에 해당하는 세션객체를 찾아서 그 세션객체를 참조하게 한다.
// - 요청메세지에 세션아이디가 포함되어 있지만, 세션아이디에 해당하는 세션객체가 없으면, 새로운 세션객체를 생성하고,
// 그 세션객체를 참조하게 한다.
// * 새로 생성한 세션객체의 세션아이디를 클라이언트에게 응답으로 보낸다.
// - 즉, JSP에서 session은 null이 아니다.
// - 결론
// - session에는 요청을 접수한 클라이언트 전용의 세션객체가 항상 연결된다.
// - 세션객체에 정보를 저장하면, 그 세션객체의 주인(클라이언트)만 활용할 수 있다.
// - 세션객체에는 이 세션객체의 주인인 클라이언트의 정보(아이디, 이름)를 저장해 둔다.
// - 클라이언트의 요청이 접수될 때 마다, 그 클라이언트 전용의 세션객체가 session으로 참조되고,
// 추가적인 작업없이도 세션객체에 보관된 사용자정보를 활용해서 지금 요청한 클라이언트를 식별할 수 있다.
session = pageContext.getSession();
out = pageContext.getOut();
// JSP 파일의 내용이 여기에 추가된다/////////////////////////////////////////////////////////////////
// JSP 파일의 스크립틀릿, 표현식에서는 JSP의 내장객체를 참조하고 있는 참조변수들을 사용해서
// JSP 내장객체를 직접 사용할 수 있다.
// - 사용가능한 내장객체 : request, response, pageContext, session, application, config, out, page
// - 자주 사용되는 내장객체 : request, response, session 정도만 자주 사용된다.
<%
// 요청객체(HttpServletRequest)를 참조하는 request를 사용하기
String id = request.getParameter("id");
String password = request.getParameter("password");
// 세션객체(HttpSession)를 참조하는 session를 사용하기
// 1. 클라이언트를 식별할 수 있는 정보를 그 클라이언트 전용의 세션객체에 보관하기
// - 사용자 인증이 완료된 클라이언트에 대해서, 해당 클라이언트의 User정보를 session객체에 담기
// session.setAttribute("USER", user);
// 2. 클라이언트의 요청이 접수되었을 때 해당 클라이언트가 누구인지 알아내기
// - session은 언제나 요청을 접수한 클라이언트 전용의 세션객체를 참조하고 있다.
// User loginedUser = (User) session.getAttribute("USER");
// String userId = loginedUser.getId();
// 응답객체(HttpServletResponse)를 참조하는 response를 사용하기
response.sendRedirect("../main.jsp");
%>
}
}
JSPの属性とスキャン
ツールバーの
保存
スキャン
-顕微鏡の種類
- Page Scope
-PageContextに格納されている属性の有効範囲.
-同じJSP内でのみ属性を共有できます.
- Request Scope
-HttpServertRequestに保存されている属性の有効範囲.
-クライアント要求の処理中に属性を共有できます.
-foward、include方式を使用すると、リクエストオブジェクトに格納されているプロパティを複数のjspページで共有できます.
-モデル2の開発では、モデルが取得したデータをビューに転送する際に主に使用する有効範囲.
-クライアントの要求処理が完了すると(応答が完了すると)、保存された属性も消失します.要求オブジェクトが消失するためです.
-属性を管理する必要はありません.(メモリの問題を心配する必要はありません.)
- Session Scope
-HttpSessionに保存されている属性の有効範囲.
-セッション・オブジェクトの保持中に、セッション・オブジェクトに格納されている属性(値、オブジェクト)を異なるJSPページで共有することもできます.
-セッション・オブジェクトが期限切れになった場合(ブラウザをログアウトまたはシャットダウンした場合)にも保存されている属性が消えます.
-セッション・オブジェクトは、ブラウザ(クライアント)ごとにオブジェクトを作成するため、セッション・プロパティ(値、オブジェクト)として保存されているオブジェクトは、クライアントにのみ適用されます.
-セッション・オブジェクトのプロパティとして保存されるのは、個人情報のみです.
- Application Scope
-ServletContextに格納されている属性の有効範囲.
-Webサーバランタイム(Webアプリケーションランタイム)サーブレットContextオブジェクトに格納されている属性(値、オブジェクト)は、すべてのJSP、すべてのテンプレート、すべてのフィルタ、およびすべてのユーザーによって共有できます.
홍길동이 브라우저1을 사용하고 있다.
- 브라우저1은 SESS1 세션객체의 세션아이디를 가지고 있다.
- 요청1(JSP1의 실행을 요청하는 요청)이 처리되고 있는 동안
- REQ1과 응답객체가 생성됨
- JSP1의 _jspService(request, response)가 실행됨
- JSP의 내장객체가 모두 준비됨
* pageContext <- PAGE1
* request <- REQ1
* response <- 응답객체
* session <- SESS1
* application <- APP
- JSP1 스크립틀릿, 표현식에서는
* PAGE1, REQ1, SESS1, APP에 속성(값 혹은객체)를 저장하거나, 저장된 속성(값 혹은 객체)를 사용할 수 있다.
- 요청1에 대한 응답이 완료됨
- _jspService(request, response)가 종료됨
* PAGE1객체 소멸
- REQ1, 응답객체 소멸
- SESS1과 APP는 계속 유지됨
* JSP1에서 SESS1과 APP에 속성(값, 객체)를 저장했다면 다른 JSP에서 사용할 수 있음
김유신이 브라우저2를 사용하고 있다.
- 브라우저2는 SESS2 세션객체의 세션아이디를 가지고 있다.
- 요청3(JSP3의 실행을 요청하는 요청)이 처리되고 있는 동안
- REQ3과 응답객체가 생성됨
- JSP3의 _jspService(request, response)가 실행됨
* pageContext <- PAGE3
* request <- REQ3
* response <- 응답객체
* session <- SESS2
* application <- APP
- JSP3 스크립틀릿, 표현식에서는
* PAGE3, REQ3, SESS2, APP에 속성 저장, 속성 사용 가능
- JSP4로 내부이동이 발생함.
* JSP3의 _jspService(request, response)가 종료됨
* PAGE3은 소멸됨
- JSP4의 _jspService(request, response)가 실행됨
* pageContext <- PAGE4
* request <- REQ3 (JSP3가 사용했던 요청객체다)
* response <- 응답객체 (JSP3가 사용했던 요청객체다)
* session <- SESS2
* application <- APP
- JSP4 스크립틀릿, 표현식에서는
* PAGE4, REQ3, 응답객체, SESS2, APP에 속성 저장, 속성 사용 가능
* REQ3를 JSP3와 JSP4가 같이 사용하게 됨
* JSP3에서 REQ3에 속성(값 혹은 객체)을 저장했다면, JSP4에서 사용 가능
* 즉, 다른 JSP에게 업무로직 수행결과로 획득된 데이터를 전달하는게 가능해짐
* 데이터 전달에 세션이나 애플리케이션 객체를 사용하지 않는 이유는 세션객체나 애플리케이션 객체는
계속 유지되는 객체이기 때문에 그 객체에 저장된 데이터도 계속 유지됨(메모리 부족 문제가 발생할 수 있기 때문)
* 그에 비해 요청객체는 응답이 완료되면 즉시 사라지는 객체이기 때문에
다른 JSP에 값을 전달하기 위해서 요청객체를 사용하면 JSP에서 값 사용해서 표현하고 응답을 제공하고 나면
요청객체도 사라지고, 요청객체에 저장된 데이터도 사라짐(메모리 부족 문제가 발생하지 않음)
ダイレクトおよび転送
Redirect
Forward
内部は
Reference
この問題について(2021. 05. 28(金)TIL), 我々は、より多くの情報をここで見つけました https://velog.io/@eastgun_/2021.-05.-28금-TILテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol