웹 프로그래밍이란?
- 웹 어플리케이션을 만드는 것.
웹 어플리케이션이란?
- 웹을 기반으로 동작하는 프로그램.
웹이란?
- 인터넷 서비스의 형태.
인터넷이란?
- 하나 이상의 네트워크가 연결되어 있는 형태
웹 서버란?
- 각 클라이언트에게 서비스를 제공하는 컴퓨터.
- 웹 서버는 정적인 컨텐츠(HTML, CSS, JS)를 제공하는 서버.
웹 어플리케이션 서버(WAS)?
- DB조회나, 어떤 로직을 처리해야 하는 동적인 컨텐츠를 제공하는 서버를 말함.
클라이언트란?
- 네트워크로 서버에 접속한 후 서버로 부터 서비스를 제공받는 컴퓨터.
HTTP 프로토콜?
- Hyper Text Transfer Protocol의 약자로 www 서비스를 제공하는 통신규약.
- HTML을 비롯해서 이미지, 동영상, XML 문서 등 다양한 데이터를 주고받을 때 사용하는 일종의 규칙.
- 즉, 웹 서버와 클라이언트는 이 프로토콜을 이용하여 정보를 주고 받음.
동적 웹 프로그래밍?
- 클라이언트의 요청이 있을 때마다 DB에 접근해서 실시간으로 정보를 클라이언트에 제공하는 기능을 처리하는 방식.
*CGI 방식과 어플리케이션 서버 방식의 차이.
- 동시에 여러 명의 접속자가 접속하여 프로그램을 실행하는 경우
**CGI 방식
==> 클라이언트의 요청에 독립된 프로세스를 생성하기 때문에 점유하는 메모리가 많아져서 시스템에 부하를 주게 됨.
요청이 발생할 때마다 매번 메모리에 프로그램을 로딩하기 때문에 동시 접속자 수가 많아질수록 이에 비례하여 프로그램 실행을 위한 메모리도 증가하게 됨.
주로 사용되는 언어: C++
*어플리케이션 서버 방식은 동시에 여러 명의 접속자가 동일한 프로그램의 처릴르 요청해도 한 개에 해당하는 메모리만 사용하기 때문에(*스레드 방식) CGI 방식에 비해서 메모리 사용량이 적음.
주로 사용되는 언어: ASP, PHP, JSP
#Servlet?
- 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스.
- 서블릿은 자바로 작성되어 있기 때문에 자바의 일반적 특징을 모두 가지고 있음.
- 서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에게 결과를 전송.
- 서버에서 실행되기 때문에 보안과 관련된 기능도 훨씬 안전하게 수행가능.
#Servlet Life Cycle
**init()
- 단 한번만 호출됨.
- 서블릿이 서비스하기 위해 필요한 초기화 작업을 수행
**service()
- init() 메서드가 service() 메서드를 호출함.
- 사용자의 요청에 따라 스레드 단위로 실행되는 메서드임.
- 각각 service() 메서드를 통해서 doGet(), doPost() 메서드가 호출됨.
- 파라메터인 HttpServletRequest 객체와 HttpServletResponse 객체를 통해서 사용자의 요청을 처리함.
**destroy()
- 서블릿 종료 요청이 오면 한 번만 호출되는 메서드.
- 서블릿이 종료되면서 정리할 작업이 있으면 destroy() 메서드를 오버라이딩해서 구현.
#Servlet 동작 과정
- 클라이언트가 요청하면 요청하는 서블릿이 메모리에 로딩되어 있는지 확인.
- 최초의 요청이면 init() 메서드를 호출하여 요청하는 클래스의 인스턴스(객체)를 메모리에 로딩함.
- 그런 다음 doGet()이나 doPost() 메서드를 호출하여 서비스함.
- 클라이언트가 다시 동일한 서블릿을 요청하면 톰캣은 요청하는 서블릿이 메모리에 로딩이 되어 있는지 확인.
- 이번에는 메모리에 로딩이 되어 있는 것이 확인이 되므로 바로 doGet()이나 doPost() 메서드를 호출.
#Servlet 방식
- 웹 개발 표준이 되는 클래스
- 웹 브라우저의 요청을 스레드 방식으로 처리
- 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공.
- 처리해야 할 일들을 기술하는 곳.
- 서블릿은 일반 자바 프로그램과 다르게 독자거으로 실행되지 못하고 톰캣 등의 서버에서 실행됨.
**서블릿의 특징
- 서버 쪽에서 실행되면서 기능을 수행함.
- 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능을 제공함.
- 스레드 방식으로 실행됨. *중요 특징
- 클라이언트의 요구를 처리하는 기능이 최초 한 번만 메모리로 로딩됨.
- 클라이언트가 동일기능을 요구하면 기존에 사용한 기능을 재사용.
- 자바로 만들어져서 자바의 특징(객체지향)을 가지고 있음.
- 보안 기능을 적용하기 쉬움.
- 웹 브라우저에서 요청 시 기능을 수행함.
**서블릿의 기본 기능.
- 클라이언트로부터 요청 받기.
- 데이터베이스 연동과 같은 비즈니스 로직을 수행.
- 처리된 결과를 클라이언트에게 돌려줌.
##JSP 방식
- Java Server Page의 약자로 자바 Servlet 기술을 확장시켜 웹 환경 상에서 100%자바만으로 개발하기 위한 기술.
- 동적인 웹 페이지를 생성하기 위한 서버 측 스크립트 언어.
- 디자이너 입장에서 화면으ㅢ 수월한 기능 구현과 개발 후 화면의 편리한 유지관리를 목적으로 도입됨.
예시)
.JSP 안에는 HTML 코드가 들어가 있다.
form 태그 안의 method로 doGet()을 쓸지 doPost()를 쓸지 결정.
action의 값은 서블릿의 urlmapping이다.
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
31
32
33
34
35
36
37
38
39
40
41
42
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<hr width="50%" color="blue">
<h2>로그인 페이지</h2>
<hr width="50%" color="blue">
<br> <br>
<form method="post" action="login">
<table border="1" cellspacing="0">
<tr>
<th>아이디</th>
<td>
<%--
텍스트 박스에 입력된 아이디를 userId라는 변수에 저장하여 서블릿으로 전송하라는 의미
만약 폼 창에서 아이디에 "hong"이라고 입력하면 String userId = "hong"이라고 저장되어
login이라는 서블릿으로 넘어가게 된다.
--%>
<input type="text" name="userId">
</td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" name="userPwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="전송">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
|
cs |
위의 jsp에 대응하는 servlet 코드
@WebServlet("/login")
이렇게 폼 태그의 action값을 연결해줘야 함.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package com.sist;
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;
/*
* 요청과 관련된 API : javax.servlet.http.HttpServletRequest 인터페이스
* 응답과 관련된 API : javax.servlet.http.HttpServletResponse 인터페이스
*
* 1. 클라이언트가 서블릿에 요청하면 먼저 톰캣 서버가 해당 요청을 받음.
* 2. 그런 다음 사용자의 요청이나 응답에 대한 HttpServletRequest 객체와 HttpservletResponse 객체를 생성함.
* 3. 그 후 Servlet의 doGet() 메서드나 doPost() 메서드를 호출하면서 이 객체들을 전달함.
* 4. 톰캣이 사용자의 요청에 대한 정보를 모든 HttpServletRequest객체의 속성으로 담아 메서드로 전달함.
* 제공하는 메서드들은 매개변수로 넘어온 객체들을 이용하여 사용자가 전송한 데이터를 받아오거나 응답을 할 수 있음.
*
* 서블릿에서 클라이언트의 요청을 얻는 방법.
* - HttpServletRequest 객체에서 <form> 태그로 전송된 데이터를 받아오는데 사용이 되는 메서드
* * getParameter(String name): <form>태그의 name 속성에 들어간 변수명을 받아 사용. 반환형은 String 타입
* * getParameterValues(String name): <form> 태그의 같은 name에 대하여 여러 개의 값을 얻을 때 사용함. 반환형은 String[] 배열 타입.
*
* 서블릿에서 요청 받은 내용을 처리하여 클라이언트에 보내는 방법
* 1. HttpServletResponse 객체를 이용하여 응답함.
* 2. doGet()이나 doPost() 메서드 안에서 처리함.
* 3. javax.servlet.http.HttpServletResponse 객체를 이용함.
* 4. setContentType() 메서드를 이용하여 클라이언트에 전송할 데이터의 종류를 지정함
* 5. 클라이언트(웹 브라우저)와 서블릿의 통신은 자바 I/O의 스트림을 이용함.
*
* 웹 브라우저에서 서블릿으로 데이터를 전송하는 방법 -2가지
* 1. get 방식
* -서블릿에 데이터를 전송할 때는 데이터가 url뒤에 name=value 형태로 전송됨.
* -여러 개의 데이터를 전송할 때는 "&"로 구분하여 전송됨.
* -보안이 취약함.
* -전송할 수 있는 데이터는 최대 255자.
* -기본 전송 방식이고 사용이 쉬움.
* -웹 브라우저에 직접 입력해서 전송할 수도 있음.
* -서블릿에서는 doGet() 메서드에서 전송된 데이터를 처리함.
*
* 2. post 방식
* -서블릿에 데이터를 전송할 때는 TCP/IP 프로토콜 데이터의 head 영역에 숨겨진 채 전송됨.
* -보안에 유리함.
* -전송 데이터의 용량이 무제한.
* -처리 속도가 get방식보다 느림.
* -서블릿에서는 doPost()메서드에서 전송된 데이터를 처리함.
*
* */
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() { //기본 생성자
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// form 태그에서 method="get"인 경우
// request
// - 첫 번째 매개변수, 사용자(클라이언트)의 요청에 대한 정보를 처리.
// response
// - 두 번째 매개변수, 사용자의 요청 정보에 대한 처리 결과를 클라이언트에 응답 처리.
//1단계: 클라이언트에서 넘어온 데이터 받기
//요청은 HttpServletRequest request를 이용한다.
String id = request.getParameter("userId");
String pwd = request.getParameter("userPwd");
//클라이언트로 응답 시 한글을 작성하면 깨짐.
response.setContentType("text/html; charset=UTF-8"); //이 코드를 통해 깨짐 방지.
//응답은 HttpServletResponse response를 이용한다.
PrintWriter out = response.getWriter();
//2단계: 처리한 결과를 클라이언트 웹 브라우저에 출력하는 작업.
//클라이언트에 응답하기
out.println("<html>");
out.println("<head></head>");
out.println("<body>");
out.println("<h2>아이디 : " +id+"<br>");
out.println("비밀번호 : " +pwd+"</h2>");
out.println("</body>");
out.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// url에 입력 내용이 출력되지 않는 방식.
doGet(request, response);
}
}
|
cs |
'국기훈련과정 > JSP' 카테고리의 다른 글
06. JSP와 DB 연동하기 2 (0) | 2021.10.22 |
---|---|
05. JSP와 JDBC 연동하기 (0) | 2021.10.19 |
04. 쿠키와 세션 (0) | 2021.10.18 |
03. JSP_02 (0) | 2021.10.15 |
02. JSP_01 (0) | 2021.10.15 |