# 서블릿(servlet)과 JSP(Java Server Page)
서블릿 : 서버쪽에서 동작하는 자바 프로그래밍
applet : 웹브라우저상에서 동작하는 자바 프로그래밍
동적인 웹 프로그래밍인 최초의 기술 CGI(Common Gateway Interface) :처리 속도 느림, 많은 메모리 요구, 멀티 스레드 지원안함, 요청들어오면 새로운 프로세서 실행 시킴
=> php, asp와 같은 서버 스크립트 언어 등장(스크립트- 요약)
정적인 웹 프로그래밍 : HTML
# JSP의 특징
- 자바의 모든 기능 사용 가능
- 서블릿으로 컴파일된 후 메모리에서 처리 => 스레드를 발생시켜서 처리하기때문에 많은 사용자의 접속 처리 가능
- JSP, 다른 서블릿 간의 데이터 공유 쉬움
- 빈즈라는 자바 컴포넌트 사용 가능(두가지 메소드 가짐)
- 커스텀 태그(사용자가 정의한 태그 사용 가능), JSTL(태그 라이브러리) 이용 가능
- 스트러츠, 스프링등 다양한 프레임워크 결합 가능
# JSP 학습에 필요한 기술
- HTML : 클라이언트 기술, 시작적인 부분 담당, FORM 관련 태그, HTML5 기본 구조
- 자바스크립트 : 웹 화면, 사용자와의 상호작용, 동적 웹 페이지 구현, 객체와 메서드, 내장 객체, 이벤트 핸들링
- CSS : 웹 화면의 레이아웃, 디자인 요소 구현할 때 필요, 스타일시트, 셀렉터, DOM연동에 의한 동적 스타일 제어
- 자바 : 객체지향 개념, 상속, 오버로딩, 오버라이딩, 인터페이스 구현, java.util, java.io 패키지, 스레드, 예외 핸들링
- JDBC : 데이터베이스 프로그래밍, 세팅, ResultSet, PreparedStatement, 데이터 핸들링, SQL문
- 서블릿 : 자바 기반의 웹 프로그래밍, request, response, GET/POST 처리
# JSP 전체 동작 과정
- HTML과 유사 : JSP는 서버에서 프로그램이 실행된 결과를 웹 브라우저로 전달, HTML은 단순 서버 파일을 브라우저로 전송
웹 브라우저에서 URL 입력 -> DNS 서버에 가서 요청한 URL의 IP주소를 받음 -> 웹브라우저가 JSP 페이지 요청
-> JSP 서블릿 내부 처리 -> 서블릿 컨테이너에서 직접 실행 -> 실행 결과를 HTML형태로 요청한 클라이언트에서 전송
# 서블릿 컨테이너 내부 과정
- JSP는 HTML과 같은 텍스트 파일
- 서블릿은 자바 소스, 클래스 파일 구조
- JSP는 서블릿 컨테이너에 의해 서블릿 형태의 자바 소스로 변환되어 클래스로 컴파일 됨
- 클래스 파일은 JVM 위에서 실행됨
# 서블릿 컨테이너
- 서블릿(자바 클래스)을 실행하고 JSP를 서블릿 코드로 변환함
- 변환된 JSP의 서블릿 클래스를 실행하고 사용자 요청에 따라 실행
- 항상 HTML 형태로 클라이언트에게 전달
# JSP 처리 과정
- JSP 파일은 텍스트, HTMl 코드, 특수태그, 자바 코드 포함
- 서블릿으로 변환된 JSP는 컨테이너에 의해 생명주기 관리, jspInit() 메서드에 의해 실행되고 ready상태가 되며 jspService() 메서드가 쓰레드 형태로 호출되어 실행
- 컨테이너에 의해 JSP 서블릿이 종료될 때 jspDestry() 메서드 자동 실행
- 클래스가 존재하지 않으면 자바 소스로 변환
- 메모리에 존재하지 않으면 자바 클래스로 컴파일 : jspInit() - 서블릿 실행
- 사용자 요청 대기 : 요청이 오면 jspService()
- 컨테이너 종료 : jspDestroy()
# JSP 프로그램 기술 변천
- 서블릿 문제점 대두
- JSP 등장
- JSP 스클립팅 기술의 한계
- MVC 패턴이 주목받음
- 오픈소스 프레임워크 등장
- 웹 2.0 등장
- 스마트 디바이스 보금
# 계산기 (calc1.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
// 변수설정
int result = 0;
// 웹페이지 요청이 post 인 경우에만 수행 즉 form 을 통해 전달된것만 수행
// 초기 로딩시 오류방지
if(request.getMethod().equals("POST")) {
// 연산자를 가지고 옴.
String op = request.getParameter("operator");
// 문자열 형태로 전달된 인자들을 int 로 변환함.
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
// 각 연산자별 처리
if(op.equals("+")) {
result = num1+num2;
}
else if(op.equals("-")) {
result = num1-num2;
}
else if(op.equals("*")) {
result = num1 * num2;
}
else if(op.equals("/")) {
result = num1 / num2;
}
}
%>
<HTML>
<HEAD>
<TITLE>ch03 : 계산기 </TITLE>
</HEAD>
<BODY>
<div align="center">
<H3>계산기</H3>
<HR>
<form name=form1 method=post>
<INPUT TYPE="text" NAME="num1" width=200 size="5">
<SELECT NAME="operator">
<option selected>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</SELECT>
<INPUT TYPE="text" NAME="num2" width=200 size="5">
<input type="submit" value="계산" name="B1"> <input type="reset" value="다시입력" name="B2">
</form>
<HR>
계산결과 : <%=result %>
</div>
</BODY>
</HTML>
# 현재 날짜와 시간
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>전유정</title>
</head>
<body>
현재 날짜와 시간은 : <%=new java.util.Date() %>
</body>
</html>
* 새로고침 하면 날짜와 시간 새로고침됨
# 주석 (comment)
- 텍스트로 된 간단한 설명
- HTML 주석 : 클라이언트로 전달되는 주석 <!-- 주석입니다. --> , 소스 보기하면 보임
- JSP 주석 : 클라이언트로 전달되지 않는 주석 <%-- 주석 --%> , 소스 보기해도 보이지 않음
<%@ 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>
<!-- 이 주석은 클라이언트에서 볼 수 있습니다. -->
<h2> JSP 주석 테스트</h2>
<%-- 이 주석은 클라이언트에서는 볼 수 없습니다. --%>
<%
//java comment
/** comment test */
%>
</body>
</html>
# 브라우저에서 소스보기
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 이 주석은 클라이언트에서 볼 수 있습니다. -->
<h2> JSP 주석 테스트</h2>
</body>
</html>
# 지시어 (Directives)
- 해당 페이지를 어떻게 처리해야 하는지 전달하기 위한 내용
- JSP 페이지 맨 앞에 위치
- <%@ page 속성1="속성값1" 속성2="속성값2" ...%>
- 여러 줄에 나와도 됨
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- http의 비연결성을 보완하기 위해 만들어진게 session, 세션 정보는 서버에 저장
- cookie 도 세션과 마찬가지로 http의 비연결성을 보완해줌, 쿠키 정보는 클라이언트(내 컴퓨터)에 저장
# JSP의 한글 처리
- server.xml 파일에서 정의
- 각 JSP 파일, page 지시어의 pageEncoding 속성에서 정의
- 각 JSP 파일, page 지시어의 contentType 속성에서 정의
# import
- ","로 구분
- 자바 클래스를 사용하는 경우 해당 크래스의 패키지에 대해 import
# buffer
- JSP 페이지 데이터를 출력하기 위해 JspWriter, out 내장객체의 버퍼 크기 지정
# autoFlush
- 버퍼를 자동으로 비울 것인지 지정
# isThreadSafe
- 스레드로 인한 동기화 문제를 해결하기 위한 옵션
# info
- 현재 JSP 페이지에 대한 설명
# errorPage, isErrorPage
- errorPage : 현재 페이지에 오류 발생시 호출할 페이지를 지정하는 속성 => 효과적으로 페이지 오류 관리
- isErrorPage : 오류 처리를 위한 전용 페이지임을 알리는 속성, 오류 처리 파일에만 사용
# contentType
- 현재 JSP 페이지를 클라이언트에서 처리하기 위한 콘텐츠 유형을 지정
# include
- 현재 JSP 파일에 다른 HTML이나 JSP 문서를 포함하기 위한 기능 제공
- 베너 화면 구성, 네이버 서비스, 뉴스캐스트, 쇼핑
# taglib
- 커스텀 태그 라이브러리를 사용하기 위함
# 스크립트릿 <% %>
# URI 와 URL
- URI : 닉네임 (서버안에서만 위치와 경로 알고있음)
- URL : 풀네임
'전공 공부 > 웹서버프로그래밍' 카테고리의 다른 글
웹서버프로그래밍 4주차 강의 (0) | 2021.04.03 |
---|---|
웹서버프로그래밍 1차 과제 (0) | 2021.03.25 |
웹서버프로그래밍 3주차 강의 (0) | 2021.03.22 |
웹서버프로그래밍 1차 과제 (0) | 2021.03.10 |
웹서버프로그래밍 1주차 (0) | 2021.03.08 |