원하는대로

관심분야에 대해 원하는 모든 것을 발행하는 곳

미정 자세히보기

공부 스걱스걱/웹

[웹프로그래밍] JSP

ohsoou 2020. 12. 18. 22:39

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/web316/

 

웹 프로그래밍(풀스택)

부스트코스 무료 강의

www.boostcourse.org