위의 그림과 같이 사용자 요청 → WS → WAS(동적처리) → WS → 사용자 응답 순으로 이루어진다.
3. Container
Servlet의 생명 주기를 관리하고 JSP를 Servlet으로 변환하는 기능을 수행한다.
Servlet container : 표준 API에서 제공하는 추상 클래스와 인터페이스를 구현한 클래스 제공한다.
JSP : JSP를 Servlet으로 변환하는 역할을 한다.
4. Servlet
자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술이다.
자바 코드 내에 HTML이 들어가있는 형태로서 코딩이 어렵다.
비즈니스적으로서 있어 JSP와는 달리 계산적인 요소가 있다.
계산식 예시
HttpServlet 클래스를 무조건 상속한다.
public 으로 클래스 선언을 한다.
doGet 혹은 doPost 메소드를 선언하고 Request, Response 매개 변수 값을 받는다.
Servlet 클래스 작성 예시
서블릿 예제
Servlet 예시
어노테이션을 이용하여 Mapping을 한다.
PrintWriter는 자바 프로그램에서 파일로 텍스트 출력할 때 사용한다.
response.getWriter 메소드를 사용하여 PrintWriter의 웹 브라우저 데이터를 출력한다. 여기서 out 변수에 넣으면 response에 들어가게 된다.
out.println();으로 HTML코드를 입력하여 출력한다.
5. JSP
자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술이다.
Servlet과는 반대로 HTML문서에 자바 코드가 삽입되는 구조를 가지고 있다.
${} 문법은 익스프레션 언어로 데이터 이름, 간단한 식을 사용
<% %> 태그를 가지는 문법을 사용한다.(지시자, 스크립팅)
XML 태그 문법은 복잡한 자바 문법을 단순하게 만들어준다.
문법 요소
지시자 1
위의 지시자는 사전에 설정해야하는 부분이다.
스크립틀릿 안에는 자바 코드가 들어간다.
익스프레션은 total값을 나타내야 할 때 ${total}로도 나타낼 수 있다.
지시자 2
JSP 페이지를 서블릿 클래스로 변환할 때 필요한 정보들을 기술하기 위해 사용하는 문법이다.
<%@ %> 태그로 나타내는 지시자이다.
<%@지시자이름 애트리뷰트%> 순으로 작성한다.
Page 지시자는 JSP 페이지 전체에 적용되는 정보를 기술하기 위해 사용한다. (contentType : text/html, XML 생성 가능 | import 사용)
Include 지시자는 다른 JSP 페이지나 HTML 문서를 불러 현재 JSP 페이지의 일부로 만들기 위해 사용한다.(file 애트리뷰트를 사용할 수 있다.)
Taglib 지시자는 JSP문법 중 하나인 액션을 사용할 때 필요하고 기존의 액션태그가 아닌 사용자 지정 태그를 사용한다.
스크립팅 문법 ! 예시
<%! %> 사이에 변수와 메소드 선언이 가능하고 선언된 요소들은 멤버 변수로 선언이 된다.
내장 변수
JSP 페이지의 내의 변수를 선언하지 않고 바로 사용가능한 변수이다.
request
서블릿 클래스에 있는 doGet, doPost 메소드의 첫 번째 파라미터와 동일한 역할을 한다.
sendRedirect 메소드는 URL의 메시지를 웹 브라우저로 보낸다.
out
서블릿 클래스 안에서 getWriter 메소드를 호출해서 얻은 PrintWriter 객체의 역할을 한다.
HTML 문서를 만들 수 있기 때문에 println, print, printf 를 하기 위해 사용한다.
application
웹 애플리케이션에 관련된 여러 가지 기능을 제공한다.
getContextPath : URL 경로 리턴
getRealPath : 파일 경로명을 파일시스템 전체 경로로 바꾼다.
내장 변수 종류별 기능
파일 입출력
파일을 읽기 위한 기능으로 자바의 FileReader, FileInputStream을 사용한다.
파일 입출력 예제
page로 import하여 FileReader를 선언한다.
path로 경로를 txt 파일로 지정해주고 application 내장 변수로 getRealPath하여 파일 시스템 전체 경로를 파악한다.
해당 파일의 내용을 br에 담고 str을 빈 값으로 초기화 한 후, while문을 사용하여 readLine()으로 null값이 아니라면 str에 넣는다.
다른 JSP페이지 호출
Forward JSP 페이지 안에서 다른 JSP 페이지를 호출할 때 사용하는 메소드이다.
RequestDispatcher 인터페이스에 속하기 때문에 객체가 있어야 한다.
Result.jsp 호출 예시
forward 예시
객체를 구한 후 객체에 대해서 forward 메소드 호출 가능하고 request, response 변수를 파라미터로 넘겨준다.
request.setAttribute(“데이터 이름”, 데이터 값)라는 메소드로 JSP 페이지를 넘겨주기 전 request 변수 안에 데이터를 저장해야한다. 그리고 값을 가져오려면 캐스트연산자 변수명 = (캐스트 연산자)request.getAttribute(“데이터 이름"); 를 선언하여 가져온다.
Include JSP 페이지 안에서 다른 JSP 페이지를 호출할 때 사용하는 메소드이지만, 호출된 JSP가 끝나면 실행 흐름의 제어가 다시 본래의 JSP페이지로 되돌아온다.
Forward와 마찬가지로 RequestDispatcher 객체가 필요하다.
Today.jsp 호출 예시
include 예시
setAttribute로 데이터 저장, getAttribute로 데이터 가져오는 과정은 Forward와 동일하다.
JSP 예제
JSP, Servlet숫자 2개 더하기 예제 1
setCharacterEncoding메소드를 통해 utf-8로 변환시켜준다.
Integer.parseInt로 getParameter로 가져온 매개변수 값을 정수로 형변환 해준 후 result값에 담는다.
setAttribute(“데이터 이름", 데이터 값); 으로 result값을 가져온다.
RequestDispatcher로 jsp파일로 경로의 객체를 생성하고 forward로 이동한다.
JSP, Servlet 숫자 2개 더하기 예제 2
form 태그를 생성하여 action에 Servlet으로 경로를 선언하고 메소드는 post로 선언한다.
각 숫자(num1, num2)를 입력하고 계산 submit을 한다.
JSP, Servlet 숫자 2개 더하기 예제 3
결과를 익스프레션 언어로 하여 단순하게 호출한다.
JSP 숫자 2개 더하기 예제 결과
JSP 숫자 2개 더하기 예제 1
forward 액션을 통해 해당 JSP에서 다른 JSP로 보내준다.
이 때 <% %> 안에 자바코드를 작성한다.
여기서 HTML body에 작성된 결과 2로 나올지 고민해본다.
JSP 숫자 2개 더하기 예제 2
form 태그에서 action을 forward를 선언한 JSP 파일로 선언하고 출력한다.
JSP 숫자 2개 더하기 예제 결과
결과는 2가 나오지 않고 1이 나오는 것을 알 수 있다.
JSP 예시 1
각 파일별 내용을 나타낸다.
JSP 예시 2
body에 parameter값을 body를 선언하여 body가 null값이면 body = main.jsp로 선언해준다. 그래서 null값이 아닐 때 body 값이 바뀌게 된다.
JSP 예시 3
header 태그와 footer 태그에 include를 통해 jsp 파일을 가져온다.
ul, li 태그 선언을 하고 a태그로 URL을 생성하고 template.jsp에 ?를 사용하여 body=main.jsp, join.jsp를 담아간다.
그래서 a태그를 클릭 시 body에 main.jsp, join.jsp의 내용이 표시되게 된다.