병갈이 블록

홈페이지2 - 첫 시작. 본문

IT(Old)/JSP 실습 과정 기록

홈페이지2 - 첫 시작.

woojang 2017. 7. 23. 03:57

1. 톰켓이 실행되면 기본 페이지로 넘어가게 하고 싶다.

해결. 서블릿 매핑에 "/"를 입력했었는데 결과적으로 "컨텍스트패스//"로 되어 버린것이다.

서블릿 uri매핑을 공백으로 두니 메인 서블릿으로 접속이 된다.

입력을 하게되면, 두가지 경우를 생각해야 한다.

앞에서부터 기준을 잡고 처리할 것인지, 주소 뒷글자에 따라 처리를 할 것인지...

앞에서부터 기준이 잡히면 절대경로로 시작을 하게 되고, 뒷글자로 기준이 잡히면 상대경로로 시작하면 된다.

이것은 필터로 한번 만들어 봐야겠다는 생각이 든다. 그러면 접속시에 한번만 사용하는 서블릿을 없에도 된다.

아! 여기서 카운트기능을 하면 되겠다. 세션을 확인해서. 어차피 사이트 접속시 한번만 거치는 곳이니까.


2. uri매핑 기준을 잡아야겠다.

web.xml에서 uri 매핑 -> 절대경로에서 시작한다.(앞쪽에서부터 기준을 잡고 가기에...)

jsp에서 포워딩 주소 -> 상대든, 절대든 다 되는듯.. 몇번의 실험을 더 해봐야겟음.

서블릿에서의 포워딩의 경우.

- dispatcher를 사용하면, 절대경로든, 상대경로든 요청파라미터가 있으면 전송이 된다. 

(자동으로 컨텍스트 경로를 인식한다.)

-res.sendRedirect를 사용하면 "/"를 붙이는 순간 포트번호 바로 뒤부터 시작되는 주소로 인식해서 에러가 발생한다.

(자동으로 인식하지 않기 때문이다.


3. 파라미터값을 읽어올때.

req.getContextPath와 req.getRequestURI메서드를 이용해서 요청 파라미터만 잘라내야 한다.

req.getRequestURI는 컨텍스트경로부터 요청경로까지 모두 나온다.


4. 서블릿 초기화 데이터가 읽어지지 않는다.

문제의 원인은 init메서드의 매개변수가 ServletConfig 객체가 있다면 그 객체를 이용해서 getInitParameter를 실행해야한다.

이때까지 그 매개변수의 존재에 대한 인식이 없는 상황에서 매개변수는 있는데 그냥 부모클래스의 getInitParameter를 가져다 쓰니까

초기화 파라미터가 읽혀지지 않는다.

즉, init(ServletConfig config) 형태로 정의된 init 매서드라면 config.getInitParameter를 해야 값이 읽어와진다.

init() 형태로 전의된 init 매서드라면 그냥 getInitParameter를 해야 값이 읽어와진다.



기존의 형태와 약간 다르게 꾸몄다고 바로 후달리기는...

그래도 잘 해쳐나가고 있다. 화이팅.

Comments