Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발공부 일지

학원수업_36day [HTML,CSS,Javascript (3day) - web 구동원리 ] 본문

학원수업/Web(HMTL,CSS,JSP,Servlet)

학원수업_36day [HTML,CSS,Javascript (3day) - web 구동원리 ]

짜몽- 2022. 9. 22. 09:14

**Servlet 기본 개념 **

HTTP : HyperText Transfer Protocol 웹 통신 규약 
HTTPS : HTTP Secure -> 보안  http protocol 의 보안 , 암호화된 버전

Web Server : HTTP 에 의거해 *HTML(html,css,javascript)*문서를 서비스 하는 서버
웹 브라우저 클라이언트에 *정적인* 컨텐트를 서비스하는 서버 

Web Application Server (WAS) : Web Sever + Web Container
 데이터베이스 서버 및 타 서버와 연동 
 다양한 비즈니스 로직을 처리하여
 *동적인* 컨텐트를 클라이언트에게 제공하는 웹 어플리케이션 서버 ex) 
 

Web Container : java web 기술인 Servlet 과 JSP 가 실행되는 환경 제공  

우리는 현재 WAS 제품군 중에서 Apache Tomcat 9 버전을 이용한다. 

//개발환경 jdk.18 WAS는 아파치톰캣이고, DB는 오라클쓰고있다

- 자바 웹 어플리케이션 개발 환경 설정
0.WAS 인 Apache Tomcat 9 버전 다운로드 후 압축해제
1. Apache Tomcat\conf\server.xml 에서 port 를 8080 에서 8888 로 변경  -> 왜냐? oracle web port 와 중복되므로
URIEncoding="utf-8" 설정 추가 -> http get 방식 요청 데이터의 한글 처리를 위해

2. Apache Tomcat\conf\server.xml 에서 reloadable="true" , 서버 프로그램 변경시 서버 restart 없이 자동 리로드 (이걸 안해주면 자바dao, jsp 변경시 리스타트해야함)

 - Client Side : html (web document content 담당 ) , css ( web site design style 담당)
    javascript (web document behavior 행위 담당 )

HTML : web document 의 컨텐츠를 담당 **
CSS : web document 디자인 스타일 담당 **
JavaScript : web document 행위 담당 **
  ECMAScript 표준을 준수하는 스크립트 언어
  ECMA 인터내셔널 : 정보 통신 표준을 제정하는 표준화 기구
ES5 (ECMA5, 2009) : 변수 선언 var -> 중복 선언 가능, Function-level scope
ES6 (ECMA6, 2015) : 변수 선언 let -> 중복 선언 불가 , Block-level scope 
const 상수 , arrow function ( 화살표 함수 ) 등이 새롭게 추가

DOM ( Document Object Model ) : javascript 에서 Html(web) 문서(document) 의 요소(element)를 **
  제어하기 위한 프로그래밍 인터페이스(제어 방법)를 제공한다 **
  
  웹브라우저에서 지원
  HTML 문서 요소를 계층적으로 지원 ( Dom Tree )
  각 요소들을 자바스크립트에서 제어하고 조작하기 위한 
  함수를 제공 


ex) 넷플릭스
전세계사람들에 동영상 서비스 지원,
여러개 독립된 서버들을 구축해놓음
통신방법이 레스트방식
  
  
 -Server Side : Servlet & JSP 
 
 - Servlet : Java Web Programming의 기반 기술
    model 2 MVC (Web MVC) 의 Controller 역할을 담당
    java class 개발 방식
 
 - JSP : Java Server Page , 서버 가이드에서 동적인 웹문서를 생성하는 템플릿 엔진 역할을 담당  // 
     html 내에 java code 삽입하는 개발 방식 -> 웹문서 구현에 장점
     Jsp 는 WAS ( Web Container ) 에 의해 Servlet class 로 생성됨
     // 나중에 스프링부트 - 타임루프 쓸 것 
     model 2 MVC (Web MVC) 의 View 역할을 담당
 
 
 - Web MVC or Model2 MVC => 이후 공부예정
  Model : 비즈니스 로직과 데이터 액세스 로직을 담당 
   java component(or java beans) 가 담당 : DAO, Service , VO 등
  View : 클라이언트에게 동적인 화면을 제공
  jsp 가 담당 
  Controller : 제어자의 역할 , 클라이언트 요청 분석 후 모델과 연동 , 적절한 view 를 선택
    Servlet 이 담당 
    
 - Java Web Application 설정 방식
  1) xml 설정 방식 : WEB-INF\web.xml => DD ( Deployment Descriptor : 배포기술서 )
  소스 코드와 설정이 *분리*
 
 
  2) Annotation 설정 방식 : 의미있는 주석 => 설정 정보의 역할 
  소스 코드 상에서 설정 정보를 기술 *통합*
 
 
  
  web.xml의 예 : client 가 hello url 로 요청하면 step1.HelloServlet가 실행된다
 
    HelloServlet
    step1.HelloServlet //step1.HelloServlet 물리적위치의 별칭은 
    
    
    HelloServlet
    /hello // 안에 hello가 HelloServlet 로 작동된다.
    
 
  - Http Request Method ( 요청 방식 ) 
  get 요청 방식 : 정보 조회용 , url 상에 전달하는 정보가 노출 , 전송 데이터 용량에 제한 (ex 뉴스)
  post 요청 방식 : 정보 전송용 , url 상에 정보가 노출되지 않음 , 전송 데이터 용량에 제한이 없음 (ex 회원가입, 상품등록 
    별도의 한글처리가 필요 
  (ex - 로그인시 , 파일 업로드시에는 post 방식을 이용해야 함 

 

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>html과 Servlet연동</title>
</head>
<body>
<!--
	action : 처리할 서버 프로그램 url! => web.xml 에 기술되어 있음
 	method : http request method ( 요청 방식 ) 
 			  아래는 get 방식임 , step1.HelloServlet 의 do goGet 메서드가 실행된다
 			  
 -->
<form action="hello"  method="get">
메세지 <input type="text" name="message" required="required">
<button type="submit">get요청방식버튼</button>
</form>
<hr>
<!-- 아래는 post 방식 요청임 step1.HelloServlet의 doPost 메서드가 실행됨 -->
<form action="hello"  method="post">
메세지 <input type="text" name="message" required="required">
<button type="submit">post요청방식버튼</button>
</form>
</body>

 

 

 

 

package step1;

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

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

/**
 * Servlet implementation class HelloServlet
 */
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//System.out.println("doGet 실행");
		response.setContentType("text/html;charset=utf-8"); //클라이언트 브라우저에서 응답할 정보의 타입과 한글처리를 지정 // "text/html // charset
		PrintWriter out=response.getWriter();
		out.print("<html>");
		out.print("<body bgcolor=yellow>");
		out.print("<h3>Hello Servlet doGet() 실행</h3>");
		String message=request.getParameter("message");
		out.print("<h4>메세지를 잘 받았습니다 보내신 메세지:"+message+"</h4>");
		System.out.println(message);
		out.print("</body>");
		out.print("</html>");
		out.close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// post 요청 방식으로 전달되는 데이터는 별도의 한글 처리가 필요
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8"); //클라이언트 브라우저에서 응답할 정보의 타입과 한글처리를 지정 // "text/html // charset
		PrintWriter out=response.getWriter();
		out.print("<html>");
		out.print("<body bgcolor=lime>");
		out.print("<h3>Hello Servlet doPost() 실행</h3>");
		String message=request.getParameter("message");
		out.print("<h4>메세지를 잘 받았습니다 보내신 메세지:"+message+"</h4>");
		System.out.println(message);
		out.print("</body>");
		out.print("</html>");
		out.close();
	}
}