2020.12.31 스프링 수업노트 - URL,기본객체와 영역

 

url 충돌

: 하나의 서버에 복수의 웹 어플리케이션을 기동하는 경우 발생할 수 있는 url 충돌

테스트

  1. 첫번째 웹 어플리케이션

context path : /

webapp/jsp/basic.jsp

jsp 는 폴더명

  1. 두번째 웹 어플리케이션

context path : /jsp

webapp/basic.jsp

1번째와 2번째 모두 web에서 요청시 localhost/jsp/basic.jsp 이름으로 요청했을시 1번째 로 연결이 되는지 2번째로 연결이 되는지 알아보자.

결과 : contextPath 가 경로폴더보다 우선되서 나온다.

즉 contextPath를 /jsp 로 설정, 경로가 jsp 폴더 아래에 있을 때 두개를 비교했을때 contextPath가 /jsp 라고 설정된 것이 우선된다.

⇒ ContxtPath 가 먼저 적용이되어 2번째 웹 어플리케이셔에서 응답을 생성한다.

클라이언트 입장에서는 url 만 보고서 contextPath인지 일반 폴더를 가리키는 경로인지를 판단할 수는 없다.

기본 객체와 영역

  • 기본 객체의 종류 및 특성
  • **영역(Scope) 의 종류 및 특성
  • 기본 객체중에서도 scope를 갖는 객체는 중요하다.

jsp 기본객체

스클립트릿에서 별도로 선언 없이 사용할 수 있는 미리 선언되어 있는 객체이다.

  • jsp 파일이 servlet으로 변환되는 과정(서버가 변환) 에서 선언되어 있는 것을 확인 할 수 있다. (work폴더에서 확인)

참고 :

[서블릿/JSP] JSP pageContext 객체

pageContext

  • jsp 기본객체
  • jsp 페이지에서 따로 선언이 필요하지 않고 참조하여 사용
  • 1 : 1 로 연결 → jsp 페이지하나에 하나의 pageContext 객체 생성
  • 기능 : 다른 기본객체들을 구할때 사용, 페이지 흐름을 제어할 때 사용
  • jsp 페이지가 서블릿으로 변환될 때 기본 객체들을 생성하는데 사용된다. jsp 가 서블릿으로 변환되는 과정에서 pageContext 객체를 통해 request, response, out 등 기본 객체 생성 → 별다른 선언이 필요없다.
  • 기본 객체들은 전역 전언문 안에서 사용 못함(<%! %> ) : 서블릿으로 변환될 때 기본 객체들이 _jspService() 라는 메서드의 지역변수로 생성되기 때문에
  • jsp 에 선언된 다른 내장객체를 관리
  • pageContext ⇒ request ⇒ session ⇒ application

내장객체

  • out : 응답 생성을 위한 출력 객체이다.

    servlet.getWriter() ==> PrintWriter type 객체 반환, PrintWriter 객체와 유사

    jsp 에서 문자열을 생성하기 위해 표현식을 사용

    자바의 반복문을 사용하며 표현식을 사용하기 위해서는 다음과 같은 형태로 코드를 작성한다.

    <% for(int i = 0 ; i < 10; i++ ) { %>

    <%=i %>

    <% } %>

    ⇒ 가독성이 떨어짐

    out 객체를 이용하면 표현식을 사용하지 않고도 문자를 출력할 수 있다.

    <% for(int i = 0 ; i < 10; i++ ) { %>

    out.write(i);

    <% } %>

  • public void init(ServletConfig config) throws ServletException {

      this.config = cinfig; 
    
      this.init(); 
    

    }

pageContext 의 흐름 제어 기능

흐름제어기능메서드

  • include 를 사용하면 jsp 하나를 포함한다. forward 는 그 jsp 페이지로 넘어간다.

참고

객체지향적으로 짬 → 코드 중복이 없다.한부분을 수정하면 그것과 관련된 코드가 영향을 받는다.

오버라이드를 두번하지 않고 인자가 있는 메소드가 인자가 없는 매소드를 콜한다.

( 인자가 없는 메소드를 바꾸면 인자가 있는 메소드, 없는 메소드 모두에게 영향이 간다. )

public void init() throws ServletException {

}

PAGE : HEADER

다른 JSP 를 include 하나의 웹페이지 이지만 여러개의 jsp 가 들어있을 수 있고 scope 를 include 로 가져와서 사용할 수 있다.

String userid = req.getParameter("userid"); String pass = req.getParameter("pass");

//로그인 성공 (forward 는 같은 곳에서 실행되서 contextPath() 를 붙일 필요가 없다. )
		if(userid.equals("brown") && pass.equals("pass")) {
			req.getRequestDispatcher("/main.jsp").forward(req, resp);
		}
		//로그인 실패 
		else {
			resp.sendRedirect(req.getContextPath() + "/login.jsp");
		}

댓글