27일차 수업( JSP servlet 및 환경설치 )

 

CGI ( common Gateway Interface )
==> 동적으로 실행되어 클라이언트의 다양한 요구사항을 만족 시킬수 있는 개념

==> CGI를 구체화한 프로그램 언어 : JSP, Servlet, PHP, ASP

 

<JSP/Servlet 은 자바 기반>
따라서 JVM이 필요하다. JVM포함한 특별한 컨테이너(container)가 필요하다.

가장 많이 사용하는 tomcat 컨테이너 사용

 

* 환경

클라이언트              서버
: 웹브라우저            : 웹서버 ( 아파치, IIS )
                               ==> HTML를 서비스

 

* 환경2

클라이언트              서버
: 웹브라우저            : 웹서버 ( 아파치, IIS )
                             : 웹 컨테이너(tomcat)
                             ==> 웹 컨테이너가 웹 서버기능을 가지고 있기때문에

 

 

환경설정

가. JDK 설치
나. Eclipse설치 

다. Tomcat 설치
: http://jakarta.apache.org -> zip 파일로된 tomcat 7 파일을 받는다.

 

C 밑에 아무 파일(영어이름)이나 만들고 그안에 넣고 압축을풀면 준비 끝!

그리고 그안에 압축을 풀어준다.

 

서블릿(servlet)

: *.java 

작성방법

가. extends HttpServlet 상속받아야함
나. main 메소드 대신에 doGet(기본) 또는 doPost 메소드를 구현해야 된다.

 

ex) com.test.HelloServlet
클라이언트의 요청방법
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
--> 길고 보안에 취약함
다. 실행결과는 항상 html로 작성한다.
라. html를 클라이언트로 응답한다.

 

 

서블릿의 매핑방법 2가지!

 

a. web.xml
==> 배치지시자( Deployment Descriptor : DD )
 웹 어플리케이션의 환경정보를 저장한다.
==> xml로 구성되어 있다.
==> Servlet2.5, jsp2.1 (버전에서 주로 사용하던 방법)

 

사용방법>>>>

WEB-INF 에서 web.xml 소스에 아래와 같이 수정

 

<servrlet>

<servlet-name>서블릿별명</servlet-name>

<servlet-class>패키지를 포함한 서블릿명</servlet-class>

</servrlet>

<servlet-mapping>

<servlet-name>서블릿별명</servlet-name>

<url-pattern>매핑명</url-pattern>

</servlet-mapping>

 

b. annotation
==> web.xml에 설정 대신에 사용하는 방법
 자바코드내에서 설정하는 방법이다.
 Servlet3.0, jsp2.2 (Tomcat 7 에서만 동작) 보전에 사용 가능한 방법

 

사용방법 >>>>

@WebServlet("/Employee")

 

===부충수업 ========

 

  Servlet/JSP 과정 정리

1. 동작환경?

 : Client/Server 환경

클라이언트 A      가. 요청  서버
: 웹브라우저 ------------------->   나. 요청처리
     다. 결과(html형식)
            <-------------------
  라. 응답
서버는 html을 만드는거고, 클라이언트가 실행한다.

* 클라이언트에서 실행되는 프로그램 언어(컴포넌트)종류?
- html
- 자바스크립트

 

* 서버에서 실행되는 웹 컴포넌트 종류 3가지?

가. 정적 웹 컴포넌트
- html
==> 한번 작성하면 결과가 항상 동일하다.
    현재시간을 얻을 수가 없다.
 따라서 다양한 클라이언트 요구를 만족시킬 수 없다.

나. 동적 웹 컴포넌트
- JSP
- Servlet
==> 프로그램으로 실행된다.
   따라서 실행결과가 동적으로 다양하다.
클라이언트의 다양한 요규를 처리할 수 있다.

* CGI ( common Gateway Interface )
==> 동적으로 실행되어 클라이언트의 다양한 요구사항을 만족 시킬수 있는 개념

==> CGI를 구체화한 프로그램 언어 : JSP, Servlet, PHP, ASP

- JSP/Servlet 은 자바 기반이다.
따라서 JVM이 필요하다. JVM포함한 특별한 컨테이너(container)가 필요하다. 가장 많이 사용하는 tomcat 컨테이너 사용.

* 환경

클라이언트     서버
: 웹브라우저    : 웹서버 ( 아파치, IIS )
     ==> HTML를 서비스

* 환경2

클라이언트     서버
: 웹브라우저    : 웹서버 ( 아파치, IIS )
     : 웹 컨테이너(tomcat)
     ==> 웹 컨테이너가 웹 서버기능을 가지고 있기       때문에 ==> JSP, servlet 실행

 

2. 웹 컨테이너
: tomcat
: http://jakarta.apache.org 에서 무료 다운.

3. 환경설정
가. JDK 설치
나. Eclipse설치


다. Tomcat 설치
: http://jakarta.apache.org

*자바 개발 3가지 플랫폼
- Java SE ( Java Standard Edition )
==> 일반 PC에서 실행된는 프로그램 개발용.
==> 여지껏 우리가 배웠던 환경
==> 필요환경
 :: JDK 만 설치하면 된다.
 :: eclipse

- Java Enterprise Edition)
==> Enterprise 환경에서 실행되는 프로그램 개발용.
==> 필요 환경
:: JDK, Tomcat 설치하면 된다.
:: eclipse
:: 클라이언트는 웹 브라우저 필요.


- Java ME( Java Micro Edition )
==> 핸드폰, PDA같은 소규모 장치에서 실행되는 프로그램 개발용.
: 웹브라우저 ------------------->

     <-------------------

==> 이클립스와 톰켓 연동
가. Java EE 퍼스펙티브 선택

4. web application
: context 라고 한다.
: 물리적인 위치는 C:\tomcat7\apache-tomcat-7.0.42\webapps 폴더내에 있는 각각의 폴더를 지칭힌다.
ex) ROOT 컨텍스트 ( ROOT 웹 어플리케이션)이라고 한다.
: 용도?
==> 클라이언트가 요청했을 때, 컨테이너가 요청한 웹 컴포넌트를 찾는 디렉토리이다.

: 클라이언트 요청 처리방법?
http://서버아이피:포트번호/컨텍스트명/자원 <-- webapps에 있는 파일명을 컨텍스트라함
==> ROOT 컨텍스트는 생략한다.

ex) http://localhost:8090/examples/index.html
 http://localhost:8090/examples/test.jsp
http://localhost:8090/examples/servlet/com.test.HelloServelt

==> JSP와 HTML은 요청방법은 같다.
 서블릿은
http://서버아이피:포트번호/컨텍스트명/servlet/패키지명 포함한 클래스

: 컨텍스트 구조?
==> webapps 폴더에 저장되며 반드시 다음 구조를 갖는다.

webapps - 컨텍스트명 - WEB-INF  - classes
           - lib
    - web.xml

반드시 이 구조를 가져야한다. 이 구조가 아니면 컨테이너가 찾지 못한다.

5. 사용자 정의 context(web Application ) 생성

가. Eclipse에서 File > New > Dynamic Web Project 선택

6. 3가지 컴포넌트
가. html
==> www.w3schools.com 참조

나. JSP

다. 서블릿

7. 서블릿 ( servlet )

: *.java
: 작성방법

가. extends HttpServlet 상속받아야함
나. main 메소드 대신에 doGet(기본) 또는 doPost 메소드를 구현해야 된다.

 ex) com.test.HelloServlet
클라이언트의 요청방법
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
--> 길고 보안에 취약함
다. 실행결과는 항상 html로 작성한다.
라. html를 클라이언트로 응답한다.

* 아키텍쳐
 가. 요청     서버
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
브라우저 -----------------------------> com.test.Helloservlet
      나. 실행(프로그램)
      다. 결과(html형식) 
 <-----------------------------
 라. 응답

마. html을 보여준다.
* 서블릿 맵핑( Servlet mapping) --> 취약한 보안을 방지하는 방법
- 요청값을 짧게 줄이는 작업이다.
 이유는 요청값이 길고 보안에 취약하기 때문이다.
http://localhost:8090/HelloTest/servlet/com.test.HelloServlet
==?http://localhost:8090/HelloTest/servlet/xxx <- 의미없는 이름으로 지정

==> 서블릿 맵핑 정보 저장하는 방법 2가지

a. web.xml
==> 배치지시자( Deployment Descriptor : DD )
 웹 어플리케이션의 환경정보를 저장한다.
==> xml로 구성되어 있다.
==> Servlet2.5, jsp2.1 (버전에서 주로 사용하던 방법)

b. annotation
==> web.xml에 설정 대신에 사용하는 방법
 자바코드내에서 설정하는 방법이다.
 Servlet3.0, jsp2.2 (Tomcat 7 에서만 동작) 보전에 사용 가능한 방법

8. XML
 : eXtensible Markup Language ( XML )
=> 확장 가능한 마크업 언어
: 특징
- html 처럼 모두 태그(엘리먼트:element, 노드: node)로 구성됨.
시작태그
몸체
끝태그

예> <html> ==> 시작태그
    ==> 몸체 
    </html> ==> 끝태그

* 몸체가 없는 태그 ( empty 태그 )
예> <person> 홍길동 </person>
    <person></person> --> 빈태그
                      --> <person />
- 자바처럼 대소문자를 구별한다.
- html은 고정된 태그명이 있는데, xml은 마음대로 태그명을 추가할 수 있다. ( 가장 큰 특징 )
- xml을 작성하는 이유?
  ==> 데이터 저장
  예>
     <person>
 <name>홍길동</name>
  <age>29</age>
 <address>서울</address>
     </person>

  홍길동,20,서울

A회사  B회사
:win  :unix
:hwp         :word

    XML
- xml은 플랫폼(운영체제,프로그램 언어...)에 독립적이다.
==> xml 태그정보와 관련된 약속이 필요하다.
 ( 태그명, 갯수, 순서, 속성명, 속성값종류,...)
==> 2가지 약속문서로 작성가능하다.
- DTD (Data Type Definition)
-> *.dtd
- schema
-> *.xsd
======> xml 파일에서 dtd, xsd 의 문법을 따르는지 지정한다.

- xml은 태그가 계층구조로 되어 있다.

예>
     <person>
 <name>홍길동</name>
  <age>29</age>
 <address>서울</address>
     </person>

       person  => 루트태그(root 태그) (단 하나만 가질수있다.)
   |
   name  age   address
    |     |       |
  홍길동 20     서울

- 속성을 가질수 있다. 시작태그에 지정
  (속성명 = "값" , 속성명 = "값")
  반드시 속성값에는 " 또는 ' 를 사용해야 된다.
예> <person name="홍길동" age='20' />


=> 위 문법을 따르는 xml 파일을 well-formed 문서라고 한다.

=> dtd, schema 약속을 따르는 xml 파일을 valid 문서라고 한다.

가. 태그명 지정
< !ELEMENT 태그명 ( 자식태그, 자식태그2, ...) >
C:\tomcat7\apache-tomcat-7.0.42\lib 이 경로로 들어가서
servlet-api.jar 에디터 플러스로 연다.
//53번째 줄의 내용이다. (dtd파일)
<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*, servlet*,
servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
login-config?, security-role*, env-entry*, ejb-ref*,  ejb-local-ref*)>

나. 개수
? : 0이상
* : 1이상
 : 반드시 1

다. 속성명 지정
<!ATTLIST 속성명 타입 #IMPLIED|#REQUIRED>

: 타입은 CDATA, ID 등이 올수 있다.
: #IMPLIED은 옵션, 즉 송성을 지정안할 수 있다.
 #REQUIRED은 필수, 즉 속성이 필수사항이다.

9. web.xml
<welcome-file-list>를 에디터에서 찾는다.
<!ELEMENT welcome-file-list (welcome-file+)>
가. welcom-file-list 의 <welcom-file>
==> 맨 처음 보여주는 화면의 파일명 지정.
지정하면 브라우저에서 URL에 명시적으로 지정하지 않아도 자동으로 찾아서 보여준다.

자~~
웹.xml에 있는걸 보면
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 
 <description>sss</description>
 
  <display-name>Test001</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>abc.html</welcome-file>
  </welcome-file-list>
</web-app>
이것은 순서대로 파일을 찾는다. 찾을 때
구지
http://localhost:8090/Test001/abc.html 을 써주지 않아도 된다.
http://localhost:8090/Test001/ 만 써도 가능하다.

xml파일이란 ~ 묶어주는 역할을 하는 것 같다.
최고 큰 녀석은 conf에  xml이다.

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
--> 여기에 지정되있으니~톰켓 메인화면이 보이는 것이다.

10. 서블릿 맵핑 설정 방법 ( 크게 두가지고 있고 둘다 먹힌다. 확인은 콘솔에서)

가. annotation 방법
 @WebServlet("/zzz") //맵핑하는것서블릿3.0에서사용하는것!!
public class HelloServlet extends HttpServlet

나. web.xml 설정 방법
<servlet>
 <servlet-name>kkkk</servlet-name>
 <servlet-class>com.test.HelloServlet</servlet-class>
 
 </servlet>
 
 <servlet-mapping>
 
 <servlet-name>kkkk</servlet-name>
 <url-pattern>/abc</url-pattern>
 
 </servlet-mapping>


11. 응답처리
  가. 요청
웹 브라우저 ------------------> 서블릿
     나. 실행
 <---------------------
 다. 응답

* 서블릿 작성 클래스 3개.
가. HttpServlet
==> 일반클래스를 서블릿으로 만들기 위해서
==> 일반클래스는 브라우저에서 요청해도 처리가 안됨.
 서블릿이어야 브라우저에서 요청할 수 있다.
==> 서블릿이 요청을 받으면 서비스 메소드 실행된다.
   ( 서비스 메소드의 종류 : doGet, doPost )
 서비스 메소드는 반드시 2가지 인자를 갖는다.
HttpServletRequest request,
 HttpServletResponse response를 갖는다.

나. HttpServletRequest
==> 클라이언트가 서버로 요청할 때 관련있는 클래스.

다. HttpServletResponse
==> 서버가 클라이언트로 응답할 때 관련있는 클래스.

* 서블릿이 응답 시 2가지 작업

가. MIME 타입지정
==> 웹 브라우저에게 응답 데이터형식을 알려줄 때 사용한다.
 ex) html, text, img, ....
==> tomcat홈>conf>web.xml 참조

response.setContentType("text/html");

나. 자바 IO 얻기

//byte
 ServletOutputStream sos = response.getOutputStream();
//char
 PrintWriter out = response.getWriter();


다. html 형식으로 출력
out.print(값);

System.out.println("WorldServlet");
  
  //응답처리 + 한글지정
  //1. MIME 타입지정
  response.setContentType("text/html;charset=EUC-KR");
  
  // 2. IO 얻기
  //byte
  //ServletOutputStream sos = response.getOutputStream();
  //char
  PrintWriter xxx = response.getWriter();
  //3.출력
  xxx.print("hello World");
  xxx.print("안녕하세요");


12. 서블릿과 DB연동
웹 브라이저 ---------> 서블릿 -------> DAO ---------> 오라클

가. 드라이버 필요
 : 클래스패스에 추가

나. DAO, DTO 패턴

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,