서블릿과 JSP - 2

뫄뫄(ahk)·2022년 9월 15일
0

Spring

목록 보기
6/18

서블릿에서 사용되는 저장소

HTTP의 특징 중에 하나가 stateless. 클라이언트에 대한 정보를 기억하지 못함. 그렇기 때문에 저장소가 필요하다. 각 저장소는 접근 범위생존 기간이 다르다.

  1. application

    • 접근 범위 : context 어디서나 접근 가능 (모든 사용자가 공유)
    • 생존 기간 : appilcation 시작부터 종료까지
    • 저장소가 context마다 딱 한 개 있다.
  2. session

    • 접근 범위 : 클라이언트 개별 저장소, 클라이언트가 접근하는 page내
    • 생존 기간 : 로그인 - 로그아웃(session 객체 유지되는 동안)
    • 사용자 수 만큼의 저장소가 생기기 때문에 서버에 부담 → 사용 최소화
  3. request

    • 접근 범위 : 요청을 받은 페이지 내에서
    • 생존 기간 : 요청이 처리되는 동안
    • 요청할 때마다 생성, 각 request마다 독립적
    • forward시 한 jsp페이지에서 다른 jsp페이지로 request를 넘겨줄 수 있다. 그 사이에 속성을 더 추가해서 넘겨줄 수도 있음.

    → 제일 우선적으로 고려되어야 할 저장소

  • 저장소를 이용하기 편리한 건 session이지만 서버 부담이 있기 때문에 request를 사용하거나 그게 안 될 때 session에 저장하고, session에서 잠깐 저장하고 삭제하는 것도 방법

URL 패턴(@WebServlet)

//@WebServlet(urlPattern={"/hello", "/hello/*"}, loadOnStartup=1)
//loadOnStartup : early init, 숫자는 early init하는 것 중 우선순위
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {...}

우선순위
1. exact mapping - /login/hello.jsp
2. path mapping - /login/
3. extension mapping -
.jsp
4. default mapping - /(모든주소)

  • /login/hello.jsp를 검색창에 입력했을 때, 맨 위에서부터 순서대로 url패턴을 비교하여 일치하는 url패턴의 메서드가 처리
  • get방식으로 요청을 받는 경우에 url패턴이 중요할텐데.. 사실 패턴이 어떨 때 쓰이는지 모르겠다. 정확한 url을 항상 줘야 할 수밖에 없지 않나..?

요청시 매핑 된 url을 통해 서블릿이 실행되는 과정

  • sevletMappings : url과 서블릿 이름을 저장한 map객체
    • default value(/)에는 주로 정적 리소스(image, txt, css)를 등록하여 고정된 응답을 받도록하고, 그조차 없으면 404에러를 내게함
    • 그 외의 url을 등록할 때는 동적인 리소스(서블릿)를 등록함
  • spring은 children, servletMapping에 다른 값을 등록안하고 모든 url을 default로 받아서 (DefaultServlet이 아닌,)DispatcherServlet이 처리하게 함.
    Spring은 DispatcherServlet안에 children, servletMapping같은 구조를 내부에 가진다.
  • servlet과 spring의 서블릿 등록 관련 설정은 두 개의 web.xml에서 할 수 있는데 개별 web.xml가 전체 web.xml설정을 덮어쓴다.

++ jsp파일이 servlet으로 변환된 파일의 저장 경로

C:\Users\hka\Documents\workspace-sts-3.9.17.RELEASE.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\ch222\org\apache\jsp

→ jsp파일을 수정했는데 반영이 안될 때 clean tomcat work directory를 하거나 이 경로의 jsp, class파일을 삭제해보자

profile
NONONONONONOYes!

0개의 댓글