본문 바로가기

IT일반과목/JSP

20181008 개요 및 설치 및 설정 (학원수업1)

※JSP & Servlet을 배우기 전에 웹에 대한 이해도를 위한 설명을 진행하겠음



@ Server 와 Client 

-> 서버(Server)는 특정한 서비스를 제공하는 컴퓨터를 말함

-> 클라이언트(Client)는 서비스를 이용하는 사용자를 말함



@ Service의 종류

-> Web, Mail, FTP, Telnet, DB 등등...



@ Web의 통신 구조

-> Web Service의 통신 구조는 크게 Front-End와 Back-End로 볼 수 있음



Client- Web Server - WAS Server    -   DB Server

(서비스 사용자)  (HTML,JS 등등)   (JSP/Servlet)     (Oracle, MySQL 등)




@ Web Server 란?

-> 사용자에게 HTML 페이지나 , jpg, png 같은 이미지를 HTTP 프로토콜을

통해 웹 브라우저에 제공하는 서버로, 내부의 내용이 이미 만들어져 있는

정적인 요소들을 화면에 보여주는 역할을 하는 서버


# Web Server의 종류 #

-> Apache : Apache Software Foundation에서 만든 서버로 HTTP 통신에 대한

여러 라이브러리를 제공함

-> Windows IIS : MS사에서 만든 웹 서버로 높은 수준의 보안성과 성능을 제공함 (단, 유료임)

-> NGINX : 무료 오픈 소스로, 가벼움과 높은 성능을 위해 사용 됨


※ 이외에도 다양한 Web Server 들이 존재함


@ WAS 란?

-> Web Application Server의 약자로, 사용자가 요청한 서비스의 결과를 스크립트 언어 등으로 가공하여 생성한 동적


인 페이지를 사용자에게 보여주는 역할을 함

-> DB와의 연결 고리를 맡고 있는 서버라고도 볼 수 있음


# WAS의 종류 #

-> Tomcat : 전 세계적으로 가장 많이 사용되고 있으며 중소기업 관공서에서 많이 사용 함

-> Jeus : 티맥스 소프트가 만든 국산으로 관리가 쉽고, 대용량의 데이터를 고성능으로 처리 함

-> JBoss : 레드햇사가 만든 WAS, 현재 이름은 와일드플라이(WildFly)로 변경하였고 오픈소스로써 폭 넓은 다양한 서


비스를 제공하고 있음


※ 이외에도 WAS 는 다양함


# WAS에서 사용하는 대표적인 언어 #

-> JSP (Java Server Pages)

- SUN사의 JAVA를 기반으로 웹 환경에 맞게 개발된 동적 웹 프로그래밍 언어


-> PHP (Professional Hypertext Preprocessor)

- 라스무스 러도프(Rasmus Lerdorf)가 개발한 동적 웹 페이지 생성 스크립트 언어

- C,C++,Perl,Java 등의 언어를 기반으로 하여 만들었으며, C언어 문법과 매우 유사함


-> ASP (Active Server Pages)

- MS사에서 개발한 동적 웹 페이지 생성 스크립트 언어


@ DB란?

-> 체계화된 데이터의 모임

-> 구조적으로 데이터를 저장하는 공간

-> 데이터를 효율적으로 처리 및 관리하기 위해 도입됨

-> DBMS를 이용하여 DB를 생성하고 제어함


@ DBMS

-> DataBase Management System의 약자

-> 다수의 컴퓨터, 사용자들이 DB안에 데이터를 기록하거나 사용할 수 

있도록 해주는 프로그램

-> 종류 : MySQL, MSSQL, Oracle, MariaDB, 몽고DB 등등...




@ 웹 어플리케이션 개발 환경 구축하기

-> 웹 어플리케이션 개발 환경을 구축하기 위한 설치 프로그램은

기본적으로 JDK, 톰캣, 이클립스가 설치 되어 있어야 함




=============================================================================================

web_workspace_Back만들기

0. https://tomcat.apache.org/download-80.cgi 에서 톰켓 다운받기

1. 이클립스열어서 Java ee인지 확인하기

2. show view 해가지고

3. Navigator 추가하고, Package Explorer 추가하기

4. Widonws -> Preferences ->  Server->Runtime Environment누르기 ->add한후 tomcat누르기

5. Servers 누르기 -> Server name를 바꿔도 상관은 없다. 이거일경우 내가 사용하는 프로젝트의 이름을 쓰는게좋다.

6. JSP&Servlet 이걸로 Server name을 설정하기

7. 서버 더블클릭하면 Overview가 뜬다.

8. 포트번호 8888로바꾸기

9. Server Options 에서 Serve modules without publishing 이거 체크해놓기 

 -> WAS가 되어있는거 이용하지 않고 임의의 폴더를 만들어 처리하는데 원하는 디렉터리에 저장을 하게하겠다.



-----------------------------------------------------------------------------------------------------------------------------------



아파치+톰캣 : 아파치톰캣



@ 서블릿

-> 서블릿(Servlet)은 Server + Applet 의 합성어

-> 서버에서 실행되는 작은 Applet이란 의미로 자바를 이용하여 웹에서 실행되는 프로그램을 작성하는 기술

-> 서버측에서 사용될 수 있도록 확장시킨 자바 프로그램을 뜻함

-> 서블릿 실행환경을 웹 컨테이너 혹은 서블릿 컨테이너로 불림

※ Applet : Java 언어로 구성되어 웹 브라우저에서 실행되는 간단한 기능의 소규모 프로그램


※ 서블릿 컨테이너 : 서블릿 객체를 보관 및 생성, 삭제 등의 작업을

하는 공간 (WAS가 서블릿 컨테이너)





@ JSP

-> JSP는 Java Server Page의 약자로써 HTML 태그에 자바로 프로그래밍하여 브라우저에 보여주는 페이지


Web Container은  -> Web Server, JSP Container, Servlet Container이 있다.


@ 서블릿 컨테이너

-> 서블릿의 생명주기(라이프 싸이클)를 관리 (생성, 초기화, 소멸)

-> 서블릿 객체 생성 (HttpServletRequest, HttpServletResponse 객체)

-> 통신 커뮤니케이션 지원

- 서블릿(자바코드)과 웹이 서로 통신할 수 있도록 도와줌

- 만약 서블릿 컨테이너가 없었다면 개발자가 직접 웹과의 통신을

위한 ServerSocket 코드를 작성해야 하고, 특정 port를 리스닝

해야하며, 연결 요청이 들어오면 스트림을 만드는 등.. 복잡한

일들을 코딩 해야 하는 번거로움이 발생됨

- 하지만 컨테이너가 웹과의 통신을 개발자가 고민할 필요 없이

알아서 연결하고 처리할 수 있도록 도와줌


-> 멀티스레딩 지원

- 서블릿은 멀티스레딩을 지원하여 요청이 들어올때마다 새로운

자바 스레드를 하나씩 만들어서 처리함

- 클라이언트가 요청하면 HTTP 처리를 위한 메소드를 실행하고

일이 끝나면 스레딩 작업이 자동으로 종료됨

- 즉, 여러명의 클라이언트들이 동시 요청을 하게 될 경우에도 

문제 없이 멀티 스레딩 작업을 통해 안전하게 처리 될 수 

있도록 해줌 (웹 개발자는 멀티스레드를 신경쓸 필요가 없어짐)



@ JSP 컨테이너

-> JSP 파일을 다시 Java 코드(서블릿화)로 변경해주고 class 파일로 전환

하여 메모리 공간에 로드하는 작업을 해줌

-> 처리 결과를 HTML 파일로 만들어주는 작업도 진행



<html>

<head>

</head>

<body>

<%


%>


</body>

</html>


@ 웹 어플리케이션의 흐름


@ 웹 어플리케이션의 흐름


## 자바 웹 초창기 ##

View Page (html, css,Js, jQuery) -> Servlet(서블릿) -> 자바코드 -> DB


# 서비스 동작 원리 #

1. View Page를 통해 Client가 웹에 접근하여 Web Server로 서비스를 요청 (request) 하게됨


2. Client로 받은 요청을 View Page(Web Server)에서 Servlet page로 요청값을 보냄


3. Servlet Page에서 자바코드를 통해 DB에 접근하여 요청에 대한 결과를 가져옴


4. Servlet Page 에서 요청 결과에 따른 동적 처리 (ex. 로그인 실패, 성공)를 위한 코드를 작성하여 Client에게 응


답을 해줌 (Response)


ex) 웹 페이지에서 두 수를 입력 할 수 있는 폼을 제공

입력된 데이터를 바탕으로 서블릿에서 두 수의 합을 출력해주는 서블릿 생성



ex) 웹 페이지에서 두 수를 입력 할 수 있는 폼을 제공

입력된 데이터를 바탕으로 서블릿에서 두 수의 합을 출력해주는 

서블릿 생성



--------------------------------------------------------------------------------

포트 80으로바꾸면 포트번호 안적어도된다.


서버 더블클릭해서 Web Modules로 들어간다.


맵핑할것을 /로바꿀경우 이걸로 뜬다.


client -> index.html로 본다.

그럴경우 폼 2개가 뜬다. 그 후 웹서버로 요청을 보내게 되고 그럼 그 요청을 servlet로보내게된다.


서블릿코드는 수정하고 저장할경우 서버 재시작 해라.






----------------------------------------------------------------------------------------------------------------------------------------------

예제




<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>누구계산기?</title>

</head>

<body>

<span>더하기</span><br>

<form action="/plus.do" method="get">

<!-- method방식은 get과 post방식이있는데 get은 URL로 보내고 post는 숨겨져 보낸다.

plus.do라는 서블릿한테 이 데이터 보내줄께 -->

<input type="text" name="firstValue">+

<input type="text" name="secondValue"/><br>

<input type="submit" value="결과보기"/>

<input type="reset" value="취소"/>

</form>


<span>빼기</span><br>

<form action="/minus.do" method="get">

<!-- method방식은 get과 post방식이있는데 get은 URL로 보내고 post는 숨겨져 보낸다.

plus.do라는 서블릿한테 이 데이터 보내줄께 -->

<input type="text" name="firstValue">-

<input type="text" name="secondValue"/><br>

<input type="submit" value="결과보기"/>

<input type="reset" value="취소"/>

</form>





</body>

</html>



package kr.or.cal;


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 PlusServlet

 */

@WebServlet(name = "Plus", urlPatterns = { "/plus.do" })

public class PlusServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

    /**

     * @see HttpServlet#HttpServlet()

     */

    public PlusServlet() {

        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("호출 되었음");

//서블릿에서 데이터를 처리할때에는 크게 4가지가 있음

//(지금은 3가지만 작업하겠음 - 이유는 나머지 1가지는 비즈니스 로직 처리임(MVC))

//1. 전송값에 한글이 있을 경우를 처리 해야함(인코딩 작업 - UTF-8)

request.setCharacterEncoding("utf-8");

//2. 웹에서 보내준 데이터를 꺼내서 자바 변수에 저장

int firstValue=Integer.parseInt(request.getParameter("firstValue"));

int secondValue=Integer.parseInt(request.getParameter("secondValue"));

int sum = firstValue + secondValue;

//3. 처리 결과 리턴 (사용자에게 결과를 보내주는 페이지)

//사용자에게 결과 리턴을 하려면 Writer 객체를 사용 해야함

response.setContentType("text/html; charset=UTF-8");

PrintWriter out = response.getWriter();

out.println("<html><head><title>결과값</title></head>");//클라이언트한테 주겠다.

out.println("<body>");

out.println(firstValue + " + " + secondValue + " = " + sum);

out.println("<br>");

out.println("<a href='http://192.168.30.5'>메인페이지로이동</a>");

out.println("</body>");

out.println("</html>");

}


/**

* @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);

}


}



package kr.or.cal;

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 MinusServlet
 */
@WebServlet(name = "Minus", urlPatterns = { "/minus.do" })
public class MinusServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MinusServlet() {
        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("호출 되었음");
//서블릿에서 데이터를 처리할때에는 크게 4가지가 있음
//(지금은 3가지만 작업하겠음 - 이유는 나머지 1가지는 비즈니스 로직 처리임(MVC))
//1. 전송값에 한글이 있을 경우를 처리 해야함(인코딩 작업 - UTF-8)
request.setCharacterEncoding("utf-8");
//2. 웹에서 보내준 데이터를 꺼내서 자바 변수에 저장
int firstValue=Integer.parseInt(request.getParameter("firstValue"));
int secondValue=Integer.parseInt(request.getParameter("secondValue"));
int min = firstValue - secondValue;
//3. 처리 결과 리턴 (사용자에게 결과를 보내주는 페이지)
//사용자에게 결과 리턴을 하려면 Writer 객체를 사용 해야함
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head><title>결과값</title></head>");//클라이언트한테 주겠다.
out.println("<body>");
out.println(firstValue + " - " + secondValue + " = " + min);
out.println("<br>");
out.println("<a href='http://192.168.30.5'>메인페이지로이동</a>");
out.println("</body>");
out.println("</html>");
}

/**
* @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);
}

}














'IT일반과목 > JSP' 카테고리의 다른 글

20180902 집공부14 (프로젝트 게시판기능)  (0) 2018.09.02
20180902 집공부13 (프로젝트1)  (0) 2018.09.02
20180902 집공부12 (프로젝트)  (0) 2018.09.02
20180831 집공부11  (0) 2018.08.31
20180831 집공부10  (0) 2018.08.31