11주차

하이·2023년 2월 6일
0

수업

목록 보기
21/41
post-custom-banner

Java Servlet

Java 웹페이지를(HTML, CSS, JavaScript) 동적으로 생성하는 Java program

기본개념&용어

① Internet

: network of network 물리적인 infrastructure

② Service

: internet 위에서 동작하는 여러가지 응용(e-mail, www(World Wide Web), Torent)

③ IP address

: internet상에 여러개의 computer들이 서로 Data를 주고 받아야 함
: 상대방 컴퓨터를 식별할 수 있는 식별자가 필요함

IP aderess V4. 32bit로 주소를 설정
0~255.0~255.0~255.0~255 = 16. 25. 112. 7
=> 이런 IP aderess를 어디에 할당할까요? NIC(Network Interface Card), 흔히 LAN카드
그래서 한 computer에 IP address를 여러개 할당 받을 수 있음
이런 IP address는 당연히 정해져 있는 체계가 있음
IP address는 할당을 요청하고 , 받는 구조이기때문에 논리적인 주소.
오늘은 16.2.117.34 주소를 사용하고 있는데 내일 바꿀 수 있나요? 가능
이런 논리적인 주소를 대신해서 물리적인 주소를 사용해서 통신을 이용 : MAC address

대표적인 IP address :127.0.0.1 (loopback)

  • 세상이 발전하면서 IP주소가 부족 : IPv6(당연히 좋음)

하나의 IPaddress를 이용하여 다수의 가상 IPaddress를 사용 : subnet(192.168.x.x)

④ IP address는 '숫자'->'문자'로 변환시켜서 사용하면 편함

: DNS(Domain Name System) and (Domain Name Server)
www.naver.com ->이 도메인 네임에 해당하는 적당한 아이피 ex) 232.17.64.8 -> Mac address -> 전송

⑤ Port

: 숫자(0~65535)
: 컴퓨터내에 실행되고 있는 프로세스(프로그램)에 할당된 번호를 지칭함
: 모든 process가 다 가지고 있는 건 아님
: Network통신에서 한 computer의 process가 다른 computer의 process를 식별하기 위한 수단

내 process ---(IP address)를 가지고---> 다른 computer(NIC): excel(300), MS word(500),

하나의 process가 Network으로 연결된 다른 process와 데이터 통신을 하려면?
1. IP address를 알아야 함
2. port
3. protocol : 데이터 통신 규칙(규약)
형식 : protocol://IP:port = Domain

⑥ HyperText

: 사용자의 선텍에 따라서 관련된 정보족으로 옮겨갈 수 있도록 만들어진 조직화된 정보
: naver로 가기 (흔히 링크라고 표현)
: HTML Element -> <a hreaf="...">~~</a>

⑦ www (World Wide Web)

: internet 위에서 동작하는 Service
: 우리는 흔히 인터넷이라고 부르기도 함

⑧ Protocol

: 데이터 통신을 위해 정해놓은 통신 규약
: www 상에서 사용되는 protocol = HTTP(HyperText Transfer Protocol)
: 이 protocol의 특징을 잘 알고 있어야함

  1. HTTP protocol은 client-server구조(c/s구조)
    <7페이지 clinet 서버 그림>
    왜 이런 구조로 통신하나요? 서버는 상대적으로 소수, client가 절대 다수 : 그래서 clinet와 지속적인 연결을 유지하기 힘듦
  2. protocol 자체가 복잡하지 않음

⑨ REST(Representational State Transfer)

: 표현이 가능한/ 상태(정보)/ 전송
: 자원을 이름으로 구분해서 자원의 정보를 주고 받는 것을 의미함
car.jpg -> 이미지 데이터를 전송
index.html -> 문자열을 전송
boxOffice.json -> JSON 전송
: (자원의 정보)결과를 전송할 때 일반적으로 JSON, XML 이용함
이런 형태의 Architencture Style
: 이런 REST는 기존의 web의 HTTP 방식과 거의 유사(HTTP protocol을 REST로 활용할 수 있음)

=> HTTP URI(Uniform Resource Indentifier) : 웹상에서 유일하게 식별할 수 있는 식별자 / URL(Location : 주소, 좌표) 를 통해 자원을 명시
->
HTTP의 method (Get(R), Post(C), Put(U), Delete(D))를 통해서 -> 자원에 대한 CRUD operation을 적용한 후 그 결과를 JSON, XML로 받음

  • REST를 적용하기 위해 별도의 infra가 필요없음,
    : web HTTP Protocol을 그대로 이용
    : method에 따라 작업이 구분되므로 명확한 코드처리 가능 !

    만약, REST기반의 API를 작성한다고 하면, REST API 작성 규칙을 준수해야 함

⑩ SOAP (Simple Object Access Protocol)
: web과 잘 맞지 않음. 일반적인 network program에 활용(보안적인 측면이 강함)

⑪ web browser(web client)
⑫ web Server
11페이지 그림

⑬ HTTP Request

  • Request line
    : Delete, Get, Post, Put
    : url(/---/---/---) HTTP/1.1(Version)
  • Request Header
    : 부가적인 정보
  • Request body
    : 클라이언트가 서버에 보내는 Data
    : key=value 형태로 전달 ex) isbn=3

⑭ HTTP Response

  • Status line
    : [HTTP/1.1(version)- 200(상태코드)-ok(상태설명)]
  • Response header
  • Response body
    : HTML, ...

환경설정

  1. Java 8 버전 다운로드
    https://www.oracle.com/kr/java/technologies/downloads/#java8-mac
    , 환경변수 설정

  2. eclipse - preference- utf-8 설정

  3. web project 생성
    static web project
    dynamic web project(servlet) - 생성할 때 context root

    : web상에서 우리 project에 대한 identifier(식별자) : sample(나중에 변경 가능)

  • web project 설정
  1. xml 파일
  2. annotation으로 설정
    : servlet 3.0 이후부터 사용 가능
    : 일반적으로 이걸 더 선호함. @~~
  • 다이나믹 웹프로젝트의 기본구조

=> project 완성 !
: web에 deploy해서 Client가 이용할 수 있도록 서비스하고 싶음

① web server가 있어야 함(Apache, NginX)
:Apache Tomcat 사용 (web server + servlet container)

② Tomcat 다운로드
https://tomcat.apache.org/download-90.cgi
맥 tar 다운로드 (9버전 이상)

③ Eclipse와 Tomcat 연동


server - add adn remove


⑤⑥⑦

=> static resource를(HTML/CSS/JavaScript/Image/동영상) 요청하고 응답하는 구조

  • 이번에는 dynamic resource를 요청/응답하는 구조
    : Java program(servlet)을 실행시켜 동적으로 만들어지는 resource
  • 클라이언트가 호출할 Java program(servlet)을 작성
    : class를 만들어야 함
    : url mapping -> /myservlet : web상에서 URL을 이용해 클라이언트가 이 servlet을 실행시키기 위한
    : 라이브러리가 없음
    : Java Build Path에 추가 !
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	소리없는 아우성
</body>
</html>

FirstServlet.java

package com.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet("/myservlet")
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public FirstServlet() {
        // TODO Auto-generated constructor stub
    }
    
    @Override
    public void init() throws ServletException {
//    	init()의 목적은 servlet instance를 초기화 하는데 있음
    	System.out.println("init()가 호출됨");
    }
    
   
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
//		클라이언트가 GET 방식으로 이 servlet을 호출하면 이 method가 호출됨
//		결과적으로 보면, doGet() method가 호출됨
//		클라이언트의 호출 URL => http://127.0.0.1:8080/sample/myservlet
//		이 클래스 안에 있는 doGet()이 호출됨

//		클라이언트가 호출했을 때 해야하는 일을 여기에 작성하면 됨
//		프로그램 처리방식대로 작성해보자
//		1. 입력을 받는다.
//			: 지금은 없음, 넘어감	
//		2. 로직처리한다.
//			: 지금 없음. 넘어감
//		3. 출력처리한다.
//			: 이건 해야함
//			3-1. 내가 클라이언트게 전달한 데이터가 어떤데이터인지 설정해야함
		response.setContentType("text/html; charset=UTF-8");	// html 데이터가 나간다는 의미
//			3-2. 클라이언트에게 데이터를 전달하기 위해 stream(데이터 통로)을 열어요!
		PrintWriter out = response.getWriter();	// 통로를 뚫음	
//			3-3. 통로가 열렸으니, 이제 통로를 통해 데이터를 전달해요
		out.println("<html>");
		out.println("<head></head>");
		out.println("<body>서블릿 결과.. 소리없는 아우성!</body>");
		out.println("</html>");
		
		out.close();	// close시켜서 리소스..
		
//		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

profile
기록의 즐거움 😆💻
post-custom-banner

0개의 댓글