관련서적: 뇌를 자극하는 JSP&Servlet
1. JSP & Servlet
1) about Servlet, JSP
웹서버(Tomcat) <- Request, Response -> 웹브라우저(IE, FF)
Servlet: 자바를 기반으로 하는 웹 애플리케이션 프로그래밍 기술(Servlet Specification)
- 플랫폼 독립성, 네트워크 보안이 용이, 멀티스레드 기능 지원, 자바의 풍부한 라이브러리
JSP(Java Server Page): HTML 문서에 자바 코드가 삽입되는 구조
2) JDK Install
Site: http://java.sun.com
3) Tomcat Install
Site: http://tomcat.apache.org
4) HTML, JSP Test
HTML Test
http://localhost:8080/hello.htm
brain - Web Application Directory
http://localhost:8080/brain/hello.htm
JSP Test
http://localhost:8080/brain/first.jsp
2. Servlet
1) Servlet Class
Servlet Class --Instantiation--> Servlet Object --Initialization--> Servlet
Multi Thread Model, Single Thread Model
서블릿 클래스를 작성할때 지켜야 할 규칙 세가지
- 서블릿 클래스는 javax.servlet.http.HttpServlet 클래스를 상속하도록 만들어야 한다.
- doGet 또는 doPost 메서드 안에 웹 브라우저로부터 요청이 왔을 때 해야 할 일을 기술해야 한다.
- HTML 문서는 doGet, doPost 메서드의 두번째 파라미터를 이용해서 출력해야 한다.
J2EE(Java Platform Enterprise Edition) - API
Compile
javac -cp "d:\tomcat\lib\servlet-api.jar" HundredServlet.java
Copy
java/jer/lib/ext - servlet-api.jar
javac HundredServlet.java
Hudred Servlet Class Setup
brain/WEB-INF/classes/
brain/WEB-INF/web.xml
Adder Servlet
http://localhost:8080/brain/adder.htm
Memo Servlet
http://localhost:8080/brain/memo.htm
3. Basic of JSP
1) JSP Process
JSP --(Converting)-->
Servlet Class Source Code --(Compile)-->
Servlet Class File --(Instantiation)-->
Servlet Object --(Initialization)--> Servlet
2) JSP Scripting Elements
선언부(Declaration)
스크립틀릿(Scriptlet)
< %로 시작해서 %>로 끝나고, 그 사이에 자바 명령문(들)이 들어간다.
익스프레션 언어(Expression Language)
< %=로 시작해서 %>로 끝나고, 그 사이에 자바 식이 들어갈 수 있다.
* 액션(Action)
int arr[] = new int[5];
Random random = new Random();
for (int i=0; i<arr.length; i++)
arr[i] = random.nextInt(100000000);
request.setAttribute("ARR", arr);
RequestDispatcher rd = request.getRequestDispatcher("Winners.jsp");
rd.forward(request, response);
<c:forEach var="num" items="${ARR}">
${num} <br>
< /c:forEach>
3) Directive
page directive: 페이지 정보의 기술
http://localhost:8080/brain/page.jsp
attribute list
- contentType, import, buffer, autoFlush, isThreadSafe, session, errorPage
- isErrorPage, isElignored, pageEncoding, info, extends, language
- deferredSyntaxAllowedAsLiteral, trimDirectiveWhitespaces
include directive: 페이지 삽입
http://localhost:8080/brain/include.jsp
taglib directive: 액션을 사용할 떄 필요
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Comment
< !-- HTML의 주석 -->
/* Java의 주석 */
// Java의 주석
< %-- JSP의 주석 --%>
4) implicit variable(내장변수)
내장변수: JSP 페이지에서 선언하지 않고도 사용할 수 있는 변수
- request, response, out, application, config, pageContext, session, page, exception
request, response, application
http://localhost:8080/brain/name.jsp
http://localhost:8080/brain/hi.jsp
5) File I/O
File Write
http://localhost:8080/brain/txt_form.jsp
http://localhost:8080/brain/txt_proc.jsp
File Read
http://localhost:8080/brain/txt_list.jsp
http://localhost:8080/brain/txt_view.jsp
6) forward, include Method
request.setAttribute("SUM", new Integer(num1+num2));
RequestDispatcher dispatcher = request.getRequestDispatcher("FourRulesResult.jsp");
dispatcher.forward(request, response);
request.getAttribute("SUM");
dispatcher.include(request, response);
4. Cookie, Session
1) Cookie
http://localhost:8080/brain/cookie.jsp
- 쿠키 데이터의 저장
Cookie cookie = new Cookie("name", "son");
response.addCookie(cookie);
- 쿠키 데이터의 조회
Cookie cookies[] = request.getCookies();
String name = cookie.getName();
String value = cookie.getValue();
- 쿠키 데이터의 삭제
Cookie cookie = new Cookie("name", "");
- 쿠키의 수명
cookie.setMaxAge(3600); // 초단위, 0: 바로삭제, -1: 웹브라우저 끝날때
- 특정 경로명에 전송
cookie.setPath("/brain/");
cookie.setDomain(".data.pe.kr");
2) Session
http://localhost:8080/brain/session.jsp
- 세션 데이터의 저장
HttpSession session = request.getSession();
session.setAttribute("id", "js5017");
- 세션 데이터의 조회
HttpSession session = request.getSession();
String str = (String) session.getAttribute("id");
- 세션 데이터의 삭제
session.removeAttribute("id");
session.invalidate();
- 세션 데이터의 수명
session.setMaxInactiveInterval(300); // 초단위
5. Exception
try { }
catch (NumberFormatException e) {
RequestDispather dispatcher = request.getRequestDispatcher("DataError.jsp");
dispatcher.forward(request, response);
}
- page 지시자의 사용
<%@page errorPage="DataError.jsp"%>
- exception 내장변수의 사용
<%@page isErrorPage="true"%>
response.setStatus(200);
String message = exception.getMessage();
- Erroe Page 등록(Sub Element)
< error-page>
<exception-type>java.lang.NumberFormatException</exception-type>
<location>/NumberFormatError.jsp</location>
< /error-page>
- 상태코드에 따른 에러 페이지
<error-page>
<error-code>404</error-code>
<location>/NotFoundPage.jsp</location>
< /error-page>
6. Life Cycle of Servlet
Servlet Class Load --> Servlet Class --(Instantiation)-->
Servlet Object --(Initialization)--> Servlet --(Finish)--> Destroy Servlet
- 서블릿의 초기화 파라미터 등록
<init-param>
<param-name>FILE_NAME</param-name>
<param-value>agreement.txt</param-value>
< /init-param>
jspInit Method, jspDestroy Method
config 내장변수
String filename - config.getInitParameter("FILE_NAME");
서블릿의 환경정보
ServletContext context = getServletContext();
String str = context.getServerInfo();
int ver = context.getMajorVersion();
7. Expression Language
EL식: 연산자와 피연산자의 조합을 다음과 같이 ${와 }로 둘러싸서 표현한다.
- setAttribute
request.setAttribute("result", sum);
${result}
- Expression Object
pageScope, requestScope, sessionScope, applicationScope
param, paramValues, header, headerValues, cookie, initParam, pageContext
- ArrayList
ArrayList<String> items = new ArrayList<String>();
items.add("first"); // ${fruit[0]}
items.add("second"); // ${fruit[1]}
items.add("third"); // ${fruit[2]}
request.setAttribute("fruit", items);
- HashMap
HashMap<String, String> map = new HashMap<String, String>();
map.put("Edgar", "Boston");
map.put("Thomas", "Ohaio");
map.put("John", "Washington");
request.setAttribute("addr", map);
TLD(Tag Library Descriptor)
12. Use Database
- MySql
http://dev.mysql.com
- use MySql
mysqladmin -u root -p
- Connector/J Setup
http://dev.mysql.com -> MySql Connector/J
Copy files to /lib
http://localhost:8080/brain/dbconn.jsp
- Database Board
Schema: t_board.sql
List: http://localhost:8080/brain/db_list.jsp
Form: http://localhost:8080/brain/db_form.jsp
Proc: http://localhost:8080/brain/db_proc.jsp
View: http://localhost:8080/brain/db_view.jsp
Del: http://localhost:8080/brain/db_del.jsp
- DB Connection Pool
http://apache.org -> Commons Project -> DBCP, Pool, Collections Module
Copy files to /lib
http://localhost:8080/brain/connPool.jsp
- DB Connection Pool(JOCL)
http://localhost:8080/brain/pool.jsp