<jsp 의 기본>
Java Server Pages
서블릿으로 모두 변환되어 실행되는 녀석
1. 장점
(1) 서블릿 보다 쉽고 빠르다.
(2) 디자인과(HTML/JS) 과 로직(Java) 을 분리 시킬 수 있다. 즉, 디자이너와
프로그래머의 일을 분업화 할 수 있다.
(3) 프로그래머가 직접 코딩한 servlet 보다 최적화된 servlet 을 생성시켜 효율적인 코드를
효율적인 코드를 생산한다.
(4) Java Beans 사용이 쉽다.
(5) 웹어플리케이션 상에서 변수의 유효범위(scope)설정이 간편하다.
2. JSP를 이루는 구성인자
(1) 지시어 (directive) : 현재 jsp 페이지의 속성을 지시
<1> 형태 : <%@ 지시어 %>
<2> 종류 : page, include, taglib...
(2) 스크립팅 원소
<1> 기능 : JSP 페이지에서 자바코드를 직접 사용할 수 있게 해주는 기능 제공
<2.> 종류 및 형태
[1] 선언 (declaration) <%! 자바코드 %> : 메소드 멤버변수 선언용
[2] 스크립트릿 (scriptlet) <% 자바코드 %> : 순수하게 자바코드실행
[3] 식 (expresstion) <%= 자바코드 %> : 화면에 문자를 보여주기 위한 용도
실행시켜보면.....

----그림4

----그림5
out.write 에서 out 은 화면출력 기본객체임
보면.... <%="한글이 잘 나옵니까?" %> 의 내용도
out.write("i의 값은 : "+i); 처럼 브라우져에 나온다.
브라우져에 출력되는 것은 똑같으나
out.write(); 는 <% %> (스크립트릿) 안쪽에서 잠깐 사용되는것이고
<%= %> (식:expression) 은 스크립트릿 바깥쪽에서 문자열을 출력할때 사용하는 것임
스크립트릿(<% %>) 안쪽은 자바로서 html 보다 먼저 돌아간다.

----- 그림 6
D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\work\Catalina\localhost\wps\org\apache\jsp\jsp
여기를 보면.....
우리가 jsp 로 저장했던 파일이 servlet 으로 변환 되어 저장되어 있는 곳이다.
jsp01.jsp 가 jsp01_jsp.java (소스파일) 과 jsp01_jsp.class(클래스파일) 로 변환되어 저장이 되어있음을 알 수 있다.
java 파일을 열어보자
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
제일 중요하다 할 수 있는 service 메소드도 _jspService 메소드로 구현이 되어있음을 알 수 있다.
그리고 그 안쪽을 들여다보면...
전에 해봤던 servlet 으로만 구현했었던 데서 보았던 (html 코드를 한줄한줄 servlet 에 이식했던)
똑같은 방식으로 jsp01.jsp 의 내용들이 한줄한줄 servlet 화하여 구현이 되어있음을 알 수 있다.
결국 내부적으로 jsp 가 servlet 으로 바뀌어서 돌아간다는 것을 알 수 있다.
그리고 스크립트릿 안쪽에 적어줬던 부분은
바로 (int i=3; 같은...) 별도의 표시 없이 그대로 써있음을 알 수 있다. (java 이므로)
식(expression : <%= %>) 같은경우는 어떤가?
out.print("한글이 잘 나옵니까?" ); 요렇게 나온다.
jsp01.jsp 에서는 <%="한글이 잘 나옵니까?"%> 라고 했었다.
<%= %> 안쪽의 내용이 그대로 들어가 있음을 알 수 있다. 그러므로 ; 은 사용할 수 없다.
우리가 jsp 파일을 호출을 하면 바로 보여지는 것이 아니고 tomcat 폴더안의
C:\apache-tomcat-6.0.18\conf 안의 web.xml 을보면
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
이라고 되어있는데.... url-pattern 이 / 이다.
DefaultServlet 이 하는 일은 <welcome-file-list> 에있는 welcome file 을 불러들여 로딩을 하여주는 역할을 한다.
jsp 도 있는데...
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
*.jsp 라고 되어있으므로.... 어떤경로이든 .jsp 로 입력이 들어오면
JspServlet 을 통해 입력된 jsp 를 servlet 으로 변환하여돌아가게 된다.
기본적으로 우리 웹환경에서는 모든 자원들 (특히 jsp)이 직접적으로 돌아가는 것이 불가
그래서 다운로드 받을 수 없다. (php, asp 는 실제로 있는 파일을 직접 불러 실행한다. 다운받을수 있다.)
더불어 (jsp 는 내부적으로 servlet 으로 변환되어 돌아감에도 불구하고) xxx.jsp 같은 주소를 직접 호출하지
않는 방식을 사용함으로써 보안성을 더욱 증가시킬 수 있다.
단을 입력받아 구구단을 출력해보자
텍스트 박스와 버튼 하나를 추가하여 단을 입력하고 버튼을 눌렀을때
해당 단이 출력되도록 작성한다.
자바스크립트를 삽입하여 버튼이 눌러지면 submit 이 일어나도록한다.
여기에서 정규식(regular expression) 을 이용하여 0~9 까지만 입력이 가능하도록
꾸며준다.
그러기위해서 텍스트 박스와 버튼을 form 으로 감싸준다.
해서 document.getElementById("dan"); 해서 사용자 입력을 받아와서 처리를 하여준다.
여기에서는 submit 버튼이 아닌 일반 button을 이용하므로 submit을 따로 해주어야한다.
document.forms[0].submit(); 라고 해주면된다.
이는 0번째 form을 나타내는 것으로 form은 한 화면에 여려개가 존재할 수 있으므로
원하는 번째으 form 을 지정할 수 있다.
또는 form의 이름을 직접 명기해준다 document.f.submit();
실행하여보면...

----그림7

-----그림8
지금 해본 방식이.... (스크립트릿으로 도배를 한듯한....)
별로 좋지 못하다.
같은 웹프로그래밍을 하더라도 이런 옛날 방식 사용하면
조금만 복잡한 로직을 구현하고자면 상당히 고통스러워지고
로직의 가독성도 엄청 떨어지게 된다.
그래서 이러한 문제점을 개선하고자 나온 방식이 model 1 방식이다.
이것도 문제점이 많다. 이것도 비교적 옛날 방식인데
비교적 빠르게 개발이 가능하지만.... 스크립트릿의 사용을 완전히 없애지는 못한다.
"웹 프로그래밍" 카테고리의 다른 글
- 웹 어플리케이션 01 - 간단한 개념 정리 (댓글 0개 / 트랙백 0개) 2009/04/08
- 왠지 골치아픈 한글처리 (get방식) (댓글 2개 / 트랙백 0개) 2009/03/30
- 웹 어플리케이션 10 - 창고를 이용해볼까? (방명록) (댓글 0개 / 트랙백 0개) 2009/05/04
- 웹 어플리케이션 06 - 한글처리 (post 방식) (댓글 0개 / 트랙백 0개) 2009/05/02
- 웹 어플리케이션 03 - 서블릿은 어떻게 돌아가나? (2) (댓글 0개 / 트랙백 0개) 2009/04/15
- 웹 어플리케이션 08 - 페이지이동의 두가지 방식 (1) redirect 방식 (댓글 0개 / 트랙백 0개) 2009/05/03
- 톰캣과 오라클 포트 충돌 (댓글 0개 / 트랙백 0개) 2009/03/10
- 웹 어플리케이션 04 - 서블릿을 이용한 페이지 출력 (1) (방명록) (댓글 0개 / 트랙백 0개) 2009/05/02
- 웹 어플리케이션 12 - jsp 에서 db에 입력을 하여보자!! (댓글 0개 / 트랙백 0개) 2009/06/16
- 웹 어플리케이션 02 - 서블릿은 어떻게 돌아가나? (1) (댓글 0개 / 트랙백 0개) 2009/04/08



댓글을 달아 주세요