JSP
jsp는 톰캣(server)가 servlet으로 바뀌어 동작하게 됨 =/= html
서블릿이 html 코드를 출력하기 불편해서 등장
<%@ %> : 지시자
<% %> : Scriptlet/ 자바코드를 입력할 수 있음
<%= %> : 표현식/ 출력할 응답결과 == out.print();
<%! %> : 선언식/ 메서드선언,필드(전역변수) 선언-> service 메서드 바깥에 생성
[workspace]\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps :JSP
[workspace]\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost :JSP 변환 JAVA 코드, class 코드
JSP 주석:
HTML<!-- -->(응답결과(실행)에는 보여줌, 웹브라우저 화면에 안보여줌)
JAVA //, /**/ (응답결과(실행)에 안보임, servlet으로 변환됨)
JSP<%-- -->(servlet으로 변환 안됨=JAVA로 안바뀜) 주석 전부 사용 가능
JSP 내장 객체
- _jspService()에 삽입된 코드의 윗부분에 미리 선언된 객체들
- 따로 선언할 필요 없음
리다이렉트(redirect)
- 서버가 클라이언트의 요청에 대해 특정 URL로 이동을 요청
- HttpServletResponse 클래스의 sendRedirect() 메소드 사용
- 요청 2번(request/response 객체가 따로 만들어짐)
Forward
- 서버가 처리를 혼자 하지않고 처리하던 것을 다른 누군가에게 위탁함 (URL이 변경되지 않음)
- 요청 1번 (처음 요청해온 객체가 그대로 유지, request/response 객체를 인자로 넘겨줌)
클라이언트에게 요청 받은 servlet
request.setAttribute("dice", diceValue); //요청객체에 저장, 오브젝트 타입으로 맡김
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/next"); //어디로 이동할지(같은 웹어플리케이션에서만 가능)
requestDispatcher.forward(request, response);
위탁받은 servlet
int dice = (Integer)request.getAttribute("dice"); //값을 맡길 때 설정했던 이름, 오브젝터 객체를 int로 변환
servlet과 JSP 연동
프로그램 로직 수행은 Servlet, 결과 출력(html)은 JSP
유리한 장점만 사용하려고 연동(forward를 이용)
EL/JSTL
JSP에서 자바 코드부분을 삭제하는 추세
Scope
page-선언된 한페이지 내에서만
request-클라이언트로부터 하나의 요청을 받고 응답을 보낼 때까지
Session-세션 객체가 소멸될 때까지(여러 요청에서 살아남음) ex) 상태유지
Application-하나의 어플리케이션이 생성되어서 소멸될 때까지
page Scope
- PageContext 추상 클래스 사용
- JSP 페이지에서 pageContext라는 내장 객체 사용
- forward하면 해당 Page scope에 지정된 변수는 사용할 수 없음
- 지역변수처럼 사용
- EL 표기법에서 쉽게 사용하려고 씀
request Scope
- HttpServletRequest 객체를 사용
- JSP= request 내장 변수
- 서블릿= HttpServletRequest 객체
- 값을 저장할 때는 request 객체의 setAttribute()메소드
- 값을 읽어 들일 때는 request 객체의 getAttribute()메소드
- forward 시 값을 유지할 때 사용
Session Scope
- 웹브라우저(클라이언트) 별로 변수 관리
- 웹브라우저 탭간 세션 정보 공유
- HttpSession 인터페이스를 구현한 객체를 사용
- JSP= session 내장 변수
- 서블릿= HttpServletRequest의 getSession()메소드를 이용하여 클라이언트 정보를 알아낸 후 session 객체를 얻음
- 값을 저장할 때는 session 객체의 setAttribute()메소드를 사용
- 값을 읽어 들일 때는 session 객체의 getAttribute()메소드를 사용
- 상태유지에 사용
Application Scope
- 웹 어플리케이션이 시작되고 종료될 때까지
- ServletContext 인터페이스를 구현한 객체를 사용
- jsp=는 application 내장 객체를 이용
- 서블릿= getServletContext()메소드를 이용하여 application객체를 이용
- 웹 어플리케이션 하나 = 하나의 application객체
- 값을 저장할 때는 application객체의 setAttribute()메소드를 사용
- 값을 읽어 들일 때는 application객체의 getAttribute()메소드를 사용
- 모든 클라이언트가 공통으로 사용해야 할 값에 사용
- 다른 브라우저에서 똑같은 페이지를 들어가도 ApplicationScope은 유지됨, 서버를 다시 실행했을 때 초기화됨
application scope 을 가져오고 저장하는 예
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
ServletContext application = getServletContext();
try {
int value = (int)application.getAttribute("value");
value++;
application.setAttribute("value", value);
out.println("<h1>value : " + value + "</h1>");
}catch(NullPointerException e) {
out.print("Null");
}
}
*내용 출처
웹 프로그래밍(풀스택)
부스트코스 무료 강의
www.boostcourse.org
'공부 스걱스걱 > 웹' 카테고리의 다른 글
[웹프로그래밍] Maven/ JDBC (0) | 2021.01.07 |
---|---|
[웹프로그래밍] EL/JSTL (0) | 2020.12.22 |
[웹프로그래밍] JavaScript (0) | 2020.12.17 |
[웹디자인] 첫 웹디자인 (0) | 2020.12.17 |
[웹디자인] 와이어프레임 만드는 사이트 (0) | 2020.12.17 |