url 충돌
: 하나의 서버에 복수의 웹 어플리케이션을 기동하는 경우 발생할 수 있는 url 충돌
테스트
- 첫번째 웹 어플리케이션
context path : /
webapp/jsp/basic.jsp
jsp 는 폴더명
- 두번째 웹 어플리케이션
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폴더에서 확인)
참고 :
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");
}
댓글
댓글 쓰기