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 패턴