JSP(JavaServer Page)

JSP(JavaServer Page) - 5 : 선언과 HTTP Request Method (GET, POST), 표현식과 스크립트릿

n.han 2016. 7. 25. 21:27

- 선언과 HTTP Request Method


선언과 표현식은 JSP 스크립트 요소의 대표적인 특징 중 하나이다.


선언문을 사용하면 JSP에서 메서드나 멤버 변수를 선언할 수 있으므로 프로그램 요소를 구현하기가 더욱 수월해진다.


그러나 일반적으로 JSP에서 자바 코드를 확장하는 것보다는 별도의 빈즈 클래스를 사용하는 것이 좋기 때문에


선언문을 사용하는 것을 권장하지 않는다.


1. 선언


JSP가 서블릿으로 변하는 과정에서, 서블릿으로 변환된 JSP 내용은 일반적으로 _jspService() 메서드에 들어간다.


JSP는 선언으로 클래스의 멤버 메서드나 멤버 변수를 선언할 수 있는 방법을 제공해준다.


다음은 선언의 syntax이다.


<%!

    //멤버 변수 선언


    //멤버 함수 선언

%>


2. HTTP Request Method


HTTP란 Hypertext Transfer Protocol (HTTP)의 약자로, 클라이언트와 서버와의 통신을 위해 디자인된 프로토콜이다.


HTTP는 클라이언트와 서버 간의 request - response protocol 형식으로 작동한다.


일반적으로 웹 브라우저는 클라이언트이고, 웹 사이트의 호스트가 서버이다.


HTTP에는 일반적으로 사용되는 두 가지의 Request Method가 있는 데, 바로 GET과 POST이다.


1) GET


GET 메서드는 특정한 리소스의 표현으로 요청한다. 일반적인 request는 GET 방식으로 query string이 URL 안으로 저장되어 보내진다.


따라서 민감한 데이터를 다루는 데 사용하면 안되며, 길이 제한이 있고, 데이터 검색을 위해서만 사용된다.


2) POST


POST 메서드는 서버에게 URI로 식별되는 웹 소스의 서브 루틴으로써 request 안에 있는 entity를 받아 들이도록 요청한다.


POST되는 데이터들은 메일링 리스트나, 데이터 베이스에 추가할 아이템 등을 예로 들 수 있다.


POST request는 HTTP 메시지 바디 안에 query string이 저장되어 보내진다.


3. 표현식


표현식은 <%=.. %>를 사용해서 간단한 데이터 출력이나 메서드 호출에 등에 이용한다.


표현식은 결국 JSP 내장 객체인 out의 println() 메서드로 변환되는 것과 마찬가지로,


사용할 수 있는 구문은 out.println() 인자로서 적합한 형태를 유지해야 한다.


4. 스크립트릿


스크립트릿은 JSP 문서 내에 자바 코드를 기술하는 부분이며, JSP를 강력하게 만든 어려움이다.


하지만 지금은 JSP 내에서 가급적 스크립트릿을 사용하지 말 것을 권장하고 있는데, 


그 이유는 JSP 내에 복잡한 프로그램 로직이 많이 들어가게 되면 유지 보수가 어려워지고,


자바 코드를 이해할 수 없는 그래픽 디자이너 등과의 협업에 어려움이 따르기 때문이다.


스크립트는 <% ... %>와 같이 사용되며, 이 자바 코드는 모두 _jspService() 메서드로 들어가게 된다.


주의할 점은 스크립트릿 부분에는 순수 자바 코드만이 올 수 있다.


따라서 스크립트릿 부분에서 HTML 출력이 필요한 경우,


out.println()을 이용하거나 스크립트릿을 닫은 후 HTML 출력을 하고, 다시 스크립트릿을 작성하는 방법을 이용한다.


5. 선언과 HTTP Request Method를 활용한 예제


다음은 선언과 HTTP Request Method를 활용한 예제이다. 이 예제에서 눈 여겨볼 점은 다음과 같다.


1) num1, num2, result, op와 calculator() 메서드는 클래스의 멤버 변수와 함수이다.


2) 처음 스크립트릿 블럭 내부에 있는 if문은 request 방식이 POST인 경우에만 true이다.


따라서 초기 계산결과(표현식을 이용한 calculator() 메서드 호출 부분)는 result = 0을 return한다.


3) request의 getParameter 함수는 POST된 파라미터를 string 타입으로 return하므로, Interger.parseInt()메서드를 


사용하여 파싱해야 한다.


4) type이 submit인 input을 클릭 시 action 속성이 존재하지 않으므로 이 페이지를 reload한다.


또한 form1의 method 방식이 POST이므로 form1의 name 속성을 가진 파라미터 값들을 


JSP 내장 객체인 request에 담아 POST 방식의 request를 요청한다.