controller interface
를 부여한 하위클래스여야만 함 (execute메서드를 보면 HttpServletRequest
, HttpServletResponse
) return타입은 String
.무조건 controller를 오버라이딩 해야하다 보니까 메서드 이름은 무조건 execute, 매개변수는 위의 request, response & return String type 여야한다.
-> 이 구조가 간단한 프로젝트에는 괜찮은데 너무 규격화 되어있으니까 이 규격을 맞추기 위해서 response가 필요없어도, request가 필요없어도 가지고있어야 한다
-> "스펙이 강화되었다"라고 표현함 -> 유연한 컨트롤러가 필요하다. 메서드가 다양화되어지려면 결국 dispatcherServlet의 코드가 복잡해질 수 밖에 없음. 한쪽이 유연해지려면 한쪽이 복잡해져야함 -> 오버라이딩을 많이 해야함.
web MVC module
. 그냥 uri와 class만 설정해주면 됨 알아서 요청한 것에 대해 매핑해줄 것.미들웨어
? 개발자가 직접 개발로 해결하지 못하는 문제를 서버가 대신 해결 (많은 사용자의 병목현상!!!
을 알아서 관리해주는 서버, 놀고있는 서버에 접속시켜주는)WAS
/ 웹로직, 웹스피어, 제우스톰캣은 WAS의 역할을 하진 않음
. 웹서버의 역할만 함웹 요청(/product/list?currentPage=3
)이 들어오면 톰캣 엔진이 서블릿/jsp엔진 또는 컨테이너에 의해 servlet 객체는 생성된다.
개발자가 @WebServlet("product/list")
로 설정하던지 또는 web.xml에 < servlet>< servlet mapping>
설정하면(둘중하나만하면됨) 서버가 알아서 servlet클래스를 찾고 서블릿클래스타입의 객체를 생성한다. -> 생성자 호출 -> init()
메서드 호출 -> -> HttpServletRequest객체 생성, HttpServletResponse객체 생성(없으면) -> service( , ) 호출 -> 메서드 형식에 따라 doGet, doPost 메서드 호출
↳ 모든 작업을 servlet/jsp 엔진이 알아서 해줌!
web.xml에 < init-param> < param-name> fileName < param-value>a.txt 로 설정해주면
httpServlet에 param의 key(param-name)=value(param-value)형태로 들어감
param이 잘 등록되기 위해서는 servletContext와 먼저 연결이 돼야함(init메서드가 servlet과 sevletContext를 연결 해줌)
생성자 호출시 객체 생성과 초기화까지는 되는데, servlet으로서 효과!를 내기 위해서는 또다른 메서드가 필요함 -> init()
servlet의 sc메서드가 servletContext와 연결됨
HttpServletRequest에도 param, attr메서드가 있음
servlet에는 attr이 없고, sc랑 param만 있음
HttpServletRequest : 응답시에 소멸
Session: 최종 사용 후 30분 후에 소멸 (자소서 쓸때 30분후 로그인 풀리는게 세션써서....)
servlet : class파일이 리로드(변경)될 때 소멸 -> destroy() 호출
servletContext: 톰캣 중지시 소멸
src/main/java or src/main/resources에 파일을 넣어서 배포가 되는게 아니라, build.classes에 옮겨지고 -> build.classes가 실제 톰캣서버에 붙여넣기됨
resources폴더를 소스폴더로 설정하는 이유 ? build - > 소스폴더로 설정해야 build.classes에 연결되고 배포할 수 있게됨
ibatis는 apache가 처음 개발 -> 구글로 넘어가면서 mybatis가 됨