나를 기록하다
article thumbnail
반응형

오늘은 아직 해결하지 못한 HTTP 404, 500 에러 때문에 공부는 많이 못하였다.

관련 내용을 구글링을 통해서 디버깅, 에러 페이지 처리 등등을 찾아보고 시도하고 있는데 아직까지 해결하지 못했다.

개발을 할 때 가장 큰 난관은 이런 알 수 없는 에러를 마주했을 때 인 것 같다.

 

어쩔 수 없는 개발자의 숙명인만큼, 최대한 꼼꼼히 확인하고 놓친 부분이 있는지, 어느 부분이 문제되는지 확인하여 해결해보겠다.

오늘의 TIL 시작한다.

 

GET / POST에 특화된 서비스 함수

  • GET/POST 요청에 특화된 메서드는 super.service(req,resp)에 들어있다.
  • url요청에 해당하는것을 super.service가 받는다.
  • super.service(req,resp)는 부모가 가지고있는 서비스는 doGet함수와 doPost 함수를 호출하게 되어있다.
  • 사용자가 요청 시 Get/Post를 확인해서 doGet 또는 doPost를 호출
  • 만약에 오버라이드가 안되있으면 오류 발생
  • 둘 중 선택
    1. service를 오버라이드해서 doGet과 doPost를 다 처리
    2. doGet 또는 Post 따로 오버라이드하여 처리

특화된 메서드

예시

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(req.getMethod().equals("GET")) {
System.out.println("GET요청이 왔습니다.");
} else if(req.getMethod().equals("POST")) {
System.out.println("POST요청이 왔습니다.");
}

super.service(req, resp); //이 메소드가 doGet()/doPost() 를 호출한다.
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPOST 메소드가 호출 되었습니다.");
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGET 메소드가 호출 되었습니다.");
}
  •  

 

JSP 내장객체

내장 객체

  • request: 입력 도구
  • response: 출력 도구
  • pageContext: Session이나 Application처럼 페이지 내에서 임시로 데이터를 저장
    (setattribute,getAttribute를 가진 pageContext는 내부에서만 사용함)
  • session: session 객체 ServletContext는 전역적으로 사용
  • application: application객체
  • config
  • out: 출력 도구
  • page: page의 객체를 참조하는  object형 page변수

request
response
session

 

MVC MODEL 1

입력코드와 출력코드를 나눠서 난잡했던 코드를 정리

model
MVC
model 1

 

MVC MODEL 2

Controller, Model, View를 물리적으로 나눈다.

장점
  1. 사용자 요청이 들어오면 View  단에 있는 것만 서블릿 코드로 만들어 출력함으로 서블릿으로 바꿀 양이 줄어듦.
  2. Controller와 Model 부분을 미리 컴파일 → 실행속도 향상
  3. Controller와 View를 나눔 → 유지보수성 증가

model 2

redirect vs forward
  • redirect: 현재 작업했던 내용이 버려지고 새롭게 요청
  • forward: 현재 작업했던 내용을 dispatcher로 등록한 URI로 이어지게 함.
  • request, response를 활용해서 데이터를 가져올 수 있음.
    → request객체(저장소)는 두개 이상의 서블릿이 어떤 값을 공유하고 싶을때 저장하는 저장소이다.

[예시]

Spag.java(*Controller)에서 request.setAttribute("result", result); 로 result값 저장(꺼낼때 result로 꺼낸다.)

spag.jsp(*View)에서 request에서 result값을 꺼내려면 <%=request.getAttribute("result") %>로 꺼낼수있다.

 

EL(Expression Language): View를 위한 데이터 추출 표현식

  • EL 표기법: ${keyword} → View에서 Java 코드 없앨 수 있음

EL 표현식
EL - map

EL의 데이터 저장소

  • 우선순위: page > request > session > application

값 추출 순서

  • ${cnt}를 호출했을 때 충돌 에러가 나지 않고 정상적으로 값을 가져온다.
  • 그러나 값을 가져올 때는 4개의 저장소 중에서 우선순위에 따라 가져온다.
  • 이 우선순위는 다음과 같다
    page 객체 -> request 객체 -> session 객체 -> application 객체
  • 만약 session 저장소에 있는 cnt 값을 가져오고 싶다면 "Scope" 키워드를 사용하여 다음과 같이 접근 → ${sessionScope.cnt}
  • 나머지 저장소도 비슷한 방식으로 접근할 수 있으며 이를 통해 저장소에서 값을 가져올 수 있다.
    (pageScope.cnt, request.Scope, applicationScope)

EL 연산자

EL 연산자

 

오늘은 에러 때문에 많이 못했다. 에러를 해결하면 에러 관련 내용 또한 포스팅하겠다.

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...