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

서블릿, jsp 6

by 킹차니 2021. 4. 3.

전 포스팅에서 지저분한 out.write의 남발을 보았다. 이러한 노동을 jsp를 쓰면 재스퍼가 알아서 만들어준다. (jsp=재스퍼)

간단하게 확장자를 .jsp라고 만들면되는데, 만약 calculator.jsp라는 파일을 만들면 재스퍼가 calculator_jsp.java 라는 서블릿을 만들어준다. 

이 서블릿은 HttpJapBase를 상속받는 클래스와 그안에는 service라는 메소드가 있다. 우리가 jsp파일에 내용을 적으면 그 내용들을 

여기 calculator_jsp.java라는 파일에 알맞게 넣어준다.

 

jsp에는 코드블럭을 넣을 수 있는

1. <% ....코드내용.....%>

 

변수를 출력해주는

2.<%= 변수%>

 

_jsp.java 서블릿의 service함수가 아닌 클래스의 멤버변수로 들어가는 즉 변수메서드를 선언하는

3.<%! ....코드내용....%>

 

파일의 인코딩 방식등을 지정하는

4. <%@page    %>

이 친구들이 있다.

 

 

또한 제스퍼에는 내장객체 request,  response,  out,  session,  application이 있는데 이들에 대한 메소드가 있으니 알맞게 사용하면 되겠다.

 

 

쿼리스트링에 n=값 으로 날리면 그 숫자가 짝수인지 홀수인지 알려주는 간단한 프로젝트를 만들어보자.

jsp로 작성하면 다음과 같다.

<%   %>안에 자바 코드가 들어갔고 그 밖으로 나온 부분은 그대로 출력을 한다.

결과
결과

위에서 보듯이 쿼리 스트링으로 전달하니 짝수인지 홀수인지 잘 알려준다.

 

 

MVC model1

그런데 위의 코드들은 어디에는 자바코드가 있고,, 또 그아래에도 있고,,. 이렇게 간단한 프로그램이 아니라면 꽤나 혼란스러울 것이다.

그래서 MVC라는 패턴을 활용해서 이를 model, view, controller로 분리한다.

model1

위의 코드에서

파란박스가 controller: 요청을 받아 처리하고 이를 model에 전달하고, view와 상호작용한다.

주황밑줄은 view:  사용자에게 보여지는 화면

전달되는 데이터인 result가 여기서는 model이라 할 수 있다.

이와 같은 방식을 MVC model1이라한다.  1인 이유는 2가 있기 때문이다.

 

MVC model2

MVC model2는 컨트롤러와 뷰를 아예 물리적으로 분리한다.

즉 각각의 파일이 분리되는 것인데, 이들의 연결은 Dispather가 해준다.

 

 

분리된 서블릿

위처럼 오른쪽은 view, 왼쪽은 contorller로서의 역할을 하도록 하는 것이다.

controller를 조금더 자세히 보자.

controller

29line: 컨트롤러와 뷰의 공통된 저장소가 필요하다. 이는 request내장 객체를 사용할 수 있다. 

33line: dispather객체를 생성한다. getRequestDispather("spag.jsp")로 연결해준다.

35line: dispather.forward(request, response);로 포워딩을 하면

 

view에서는 

request.getAttribute("result")으로  controller에서 저장한 request의 내용을 찾아서 출력한다.