반응형
오늘은 아직 해결하지 못한 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를 호출
- 만약에 오버라이드가 안되있으면 오류 발생
- 둘 중 선택
- service를 오버라이드해서 doGet과 doPost를 다 처리
- 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변수
MVC MODEL 1
입력코드와 출력코드를 나눠서 난잡했던 코드를 정리
MVC MODEL 2
Controller, Model, View를 물리적으로 나눈다.
장점
- 사용자 요청이 들어오면 View 단에 있는 것만 서블릿 코드로 만들어 출력함으로 서블릿으로 바꿀 양이 줄어듦.
- Controller와 Model 부분을 미리 컴파일 → 실행속도 향상
- Controller와 View를 나눔 → 유지보수성 증가
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의 데이터 저장소
- 우선순위: page > request > session > application
- ${cnt}를 호출했을 때 충돌 에러가 나지 않고 정상적으로 값을 가져온다.
- 그러나 값을 가져올 때는 4개의 저장소 중에서 우선순위에 따라 가져온다.
- 이 우선순위는 다음과 같다
page 객체 -> request 객체 -> session 객체 -> application 객체 - 만약 session 저장소에 있는 cnt 값을 가져오고 싶다면 "Scope" 키워드를 사용하여 다음과 같이 접근 → ${sessionScope.cnt}
- 나머지 저장소도 비슷한 방식으로 접근할 수 있으며 이를 통해 저장소에서 값을 가져올 수 있다.
(pageScope.cnt, request.Scope, applicationScope)
EL 연산자
오늘은 에러 때문에 많이 못했다. 에러를 해결하면 에러 관련 내용 또한 포스팅하겠다.
반응형
'TIL > NewLecture' 카테고리의 다른 글
[TIL-24/230915][뉴렉처] JDBC, MySQL (0) | 2023.09.16 |
---|---|
[TIL-22/230913][뉴렉처] GET, POST, Filter, Application, Session, Cookie (0) | 2023.09.14 |