KOSTA 교육 39일차(JSP, WS, WAS,Container, Servlet)
18.12.27(목)
배운 내용
- WS(Web Server)
- WAS(Web Application Server)
- Container
- Servlet
- JSP
1. WS(웹 서버 / Web Server)
클라이언트의 요청을 받아 정적인 페이지를 HTTP 프로토콜을 통해 전송한다.
- 클라이언트의 요청 중 자체적으로 처리가 불가능한 정보는 WAS에 처리를 요청한다.
- 대표적인 웹 서버의 종류로는 아파치(Apache)와 IIS(Internet Information Server)를 들 수 있다.
2. WAS(웹 어플리케이션 서버 / Web Application Server)
웹 서버에서 처리할 수 없는 동적인 정보를 처리하여 웹 서버에 정적인 정보를 제공한다.
- 요청한 페이지의 로직이나 데이터베이스와의 연동을 처리한다.
- 대표적인 WAS로는 BEA사의 웹로직(WebLogic), IBM의 웹스파이어(WebSphere), SUN사의 iPlanet, Oracle 9iAS, 국산으로는 제우스(jeus) 등이 있다.
- 위의 그림과 같이 사용자 요청 → WS → WAS(동적처리) → WS → 사용자 응답 순으로 이루어진다.
3. Container
Servlet의 생명 주기를 관리하고 JSP를 Servlet으로 변환하는 기능을 수행한다.
- Servlet container : 표준 API에서 제공하는 추상 클래스와 인터페이스를 구현한 클래스 제공한다.
- JSP : JSP를 Servlet으로 변환하는 역할을 한다.
4. Servlet
자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술이다.
- 자바 코드 내에 HTML이 들어가있는 형태로서 코딩이 어렵다.
- 비즈니스적으로서 있어 JSP와는 달리 계산적인 요소가 있다.
- HttpServlet 클래스를 무조건 상속한다.
- public 으로 클래스 선언을 한다.
- doGet 혹은 doPost 메소드를 선언하고 Request, Response 매개 변수 값을 받는다.
서블릿 예제
- 어노테이션을 이용하여 Mapping을 한다.
- PrintWriter는 자바 프로그램에서 파일로 텍스트 출력할 때 사용한다.
- response.getWriter 메소드를 사용하여 PrintWriter의 웹 브라우저 데이터를 출력한다. 여기서 out 변수에 넣으면 response에 들어가게 된다.
- out.println();으로 HTML코드를 입력하여 출력한다.
5. JSP
자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술이다.
- Servlet과는 반대로 HTML문서에 자바 코드가 삽입되는 구조를 가지고 있다.
- ${} 문법은 익스프레션 언어로 데이터 이름, 간단한 식을 사용
- <% %> 태그를 가지는 문법을 사용한다.(지시자, 스크립팅)
- XML 태그 문법은 복잡한 자바 문법을 단순하게 만들어준다.
문법 요소
- 위의 지시자는 사전에 설정해야하는 부분이다.
- 스크립틀릿 안에는 자바 코드가 들어간다.
- 익스프레션은 total값을 나타내야 할 때 ${total}로도 나타낼 수 있다.
- 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 인터페이스에 속하기 때문에 객체가 있어야 한다.
- 객체를 구한 후 객체에 대해서 forward 메소드 호출 가능하고 request, response 변수를 파라미터로 넘겨준다.
- request.setAttribute(“데이터 이름”, 데이터 값)라는 메소드로 JSP 페이지를 넘겨주기 전 request 변수 안에 데이터를 저장해야한다. 그리고 값을 가져오려면 캐스트연산자 변수명 = (캐스트 연산자)request.getAttribute(“데이터 이름"); 를 선언하여 가져온다.
Include
JSP 페이지 안에서 다른 JSP 페이지를 호출할 때 사용하는 메소드이지만, 호출된 JSP가 끝나면 실행 흐름의 제어가 다시 본래의 JSP페이지로 되돌아온다.
- Forward와 마찬가지로 RequestDispatcher 객체가 필요하다.
- setAttribute로 데이터 저장, getAttribute로 데이터 가져오는 과정은 Forward와 동일하다.
JSP 예제
- setCharacterEncoding메소드를 통해 utf-8로 변환시켜준다.
- Integer.parseInt로 getParameter로 가져온 매개변수 값을 정수로 형변환 해준 후 result값에 담는다.
- setAttribute(“데이터 이름", 데이터 값); 으로 result값을 가져온다.
- RequestDispatcher로 jsp파일로 경로의 객체를 생성하고 forward로 이동한다.
- form 태그를 생성하여 action에 Servlet으로 경로를 선언하고 메소드는 post로 선언한다.
- 각 숫자(num1, num2)를 입력하고 계산 submit을 한다.
- 결과를 익스프레션 언어로 하여 단순하게 호출한다.
- forward 액션을 통해 해당 JSP에서 다른 JSP로 보내준다.
- 이 때 <% %> 안에 자바코드를 작성한다.
- 여기서 HTML body에 작성된 결과 2로 나올지 고민해본다.
- form 태그에서 action을 forward를 선언한 JSP 파일로 선언하고 출력한다.
- 결과는 2가 나오지 않고 1이 나오는 것을 알 수 있다.
- 각 파일별 내용을 나타낸다.
- body에 parameter값을 body를 선언하여 body가 null값이면 body = main.jsp로 선언해준다. 그래서 null값이 아닐 때 body 값이 바뀌게 된다.
- header 태그와 footer 태그에 include를 통해 jsp 파일을 가져온다.
- ul, li 태그 선언을 하고 a태그로 URL을 생성하고 template.jsp에 ?를 사용하여 body=main.jsp, join.jsp를 담아간다.
- 그래서 a태그를 클릭 시 body에 main.jsp, join.jsp의 내용이 표시되게 된다.
오늘 교육 간 느낀점
오늘은 Sevlet과 JSP를 배웠다. 이제 본격적으로 배운 것들을 연동하고 웹에 대해 더욱 접근할 수 있게 되었다. 오늘은 JSP끼리만 연동을 하였지만 내일은 Java, DB와 연동을 한다고 하니 지금까지 각각 배웠던 것을 내일 본격적으로 연동하여 사용할 수 있을 것 같다.
오늘 예제들을 완벽하게 이해 못했지만 내일 수업 전에 다시 복습하여 숙지하고
내일 꼭 완벽하게 이해해서 JSP를 적극 활용해보겠다!