본문 바로가기
java spring/servlet&jsp

서블릿 5( 동적 페이지의 필요성)

by 킹차니 2021. 4. 1.

현재 웹 계산기는 동적인 html코드를 서버에서 클라이언트에게 보내준다.

 

정적 페이지는 만약 사용자가 요청을 보내면 서버에서 이미 만들어져있는 페이지를 보내준다.

하지만

동적 페이지는 요청으로 들어온 사항을 토대로 서버에서 바로 페이지를 새로 만들어서 클라이언트에게 보내준다.

그러니 우리가 만들어야하는 페이지는 동적이어야 한다.

 

본격적으로 들어가기 전에 이번 포스팅에서는 아주 힘든 방법으로 동적 페이지를 만들어 보려한다.

먼저 동적 페이지 계산기를 한번 봐보자.

html 계산 출력부분

나는 분명 3+4의 결과인 7을 출력하고 싶은데 html파일에서 3+4를 7로 계산해줄리가 없다. 그래서 우리는 다음과 같은 방식으로 서블릿에 동적 페이지를 만들 수 있다.

정말 고된 작업이다.... 모든 html태그들을 서블릿에서 출력해주는 것이다. 하지만 이렇게 되면 내가 워하던 3+4의 결과를 출력할 수 있다.

 

아래는 위의 코드 53line을 수정한 것이다.

html만 쓰는 것과는 다르게 3+4의 결과가 나온다. 

하지만 더는 위와 같은 방법을 사용하지 않을 것이다. 앞으로 배워보자.

 

 

 

지금까지의 계산기 정리.

(calc3의 55line에 사용자가 C를 누르면 쿠키를 삭제하는 구문도 추가하였다. 쿠키객체.setMaxAge(0)->쿠키 삭제 )

지금까지의 계산기는

1. 사용자가 화면에서 숫자 또는 연산자를 누르면 /calc3로 post요청을 보낸다. 첫 요청이라면 쿠키를 만들 때 그 안에 사용자가 보낸 값을

담아서 만들고

2. redirect를 통해 /calcpage로 만든 쿠키를 가지고 get을 보낸다.

3. 그렇게 되면 calcpage에서 쿠키에 든 값들을 확인하여 html에 뿌려주고 사용자는 이 화면을 받는다.

즉 GET과 POST를 처리하는 서블릿이 따로 존재하는 것이다.

 

하지만 이를 HttpServlet의 메소드 doGetdoPost를 오버라이딩하면 하나의 서블릿에 GET과 POST를 한꺼번에 처리할 수 있다.

 

물론 그 전에.

getMethod를 사용하여, 들어온 요청이 GET인지, POST인지 확인하고 처리하는 방법도 있다.

빨간 박스가 getMethod를 사용하여 확인하는 방법이다. 조건문을 사용하여 요청이 GET 이라면 if이하를 POST라면 else if이하를 실행한다.

 

super.service(req, res);는 요청에 따라서 조상의(여기서는 HttpServlet)의  doGet, doPost를 실행해주는 함수이다. 사실 여기서는 주석처리를 해도 되지만 기록을 위해 써놨다.

 

노란박스가 요청에 따라 doGet, doPost를 실행하는 부분이다. 해당 서블릿으로 post요청이 온다면 doPost메소드를 get요청이 온다면 doGet메소드를 실행할 것이다.

 

따로 분리된 서블릿을 하나로 합친 코드는 다음과 같다.

html을 write하는 부분때문에 너무 길어져서 안보이는데, doPost 안에는 calc3의 코드를 복붙하고, doGet에는 calcpage의 코드를 복붙해놨을 뿐이다. 또한 경로도 바꿔야한다.

doGet의 form부분.

원래 여기에 action="/calc3/"라는 경로지정이 있었는데 이제 없어도된다. 원래 따로있었던 calc3가 같은 서블릿에 있는데

당연히 경로설정을 해줄 필요가 없는 것이다.

 

다음으로 doPost메소드에서 수정된 경로를 보면

55line에서 보듯이 응답을 자기 자신으로 보낸다.

또한 중요한 것이 이제 경로를 설정할 수 있다.

그전에는 root경로로 모든 경로에 쿠키를 허용했지만 이제 두 기능이 하나의 서블릿으로 합쳐졌으니 setPath로 해당 경로만 왔다갔다 할 수 있게 하면 된다.

 

'java spring > servlet&jsp' 카테고리의 다른 글

서블릿, jsp 7(EL, 내장객체)  (0) 2021.04.04
서블릿, jsp 6  (0) 2021.04.03
서블릿4(application, session, cookie)  (0) 2021.04.01
서블릿3(여러 개의 버튼 post보내기)  (0) 2021.03.31
서블릿 2 (post, 필터)  (0) 2021.03.30