1.Client 요청.
2.Web Server 접속.
web.xml
생성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;
@WebServlet("/Hellogood")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String name;
// 초기화 함수.
public void init() {
name = "김남규";
}
// doGEt, doPost 등의 메소드가 있음.
// https://docs.oracle.com/javaee/7/api/toc.htm
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. data get
// - 단순히 출력하는 예시이므로 패스.
// 2. logic
// - 단순히 출력하는 예시이므로 패스.
// 3. reponse page => html
// 한글이 깨지지 않게 설정.
response.setContentType("text/html;charset=utf-8");
// response.setContentType("text/html");
// response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println(" <body>");
out.println(" <h2>Hello Servlet!!!</h2>");
out.println(" <h2>"+ name + "님 안녕하세요!</h2>");
out.println(" </body>");
out.println("</html>");
}
}
자바
를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양Servlet
: 최상위 인터페이스GenericServlet
: service()를 구현해야하는 추상 클래스.HttpServlet
: Get, Post 구분을 위한 의미상을 추상 클래스.init()
: 서블릿이 로드될 때 한번 호출.doGet()
: GET 방식으로 data 전송 시 호출.doPOST()
: POST 방식으로 data 전송 시 호출.service()
: 모든 요청은 service()를 통해 doXXX()메서드로 이동.destroy()
: 서블릿이 메모리에서 해제되면 호출.URI = URL + Query String
- URL ? parameter1=value1 & parameter2=value2
- ? : Query String Begin
- & : Query String Separator
<%! %>
: 멤버 변수 선언이나 메소드를 선언하는 영역.<%!
String name;
public void init(){
name = "Test";
}
%>
<% %>
: Client 요청시 매번 호출 영역. Servlet으로 변환시 service() 에 해당하는 영역. request, response에 관련된 코드 구현.for(int dan = 2; dan < 10; dan++){
out.println("<tr>";
String classname = dan % 2 == 0 ? "color1" : "color2";
for(int i = 1; i < 10; i++){
out.println("<td class=\"" + classname + "\">" + dan + " * " + i + " = " + dan * i + "</td>");
}
out.println("</tr>");
}
<%= %>
: 데이터를 브라우저에 출력할 때 사용.<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Hello JSP!!!</h2>
<h2>안녕 <%= name %>제이에스피 </h2>
</body>
</html>
<%-- >
: 코드 상에서 부가 설명 작성.<!-- HTML 주석 -->
<%-- JSP 주석 -->
<%@ page attr1="val1" attr2 = "val2" ... %>
<%@ include file="/template/header.jsp %>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core %>
속성 | 기본값 | 설명 |
---|---|---|
language | java | 스크립트에서 사용할 언어 지정 |
info | 현재 JSP 페이지에 대한 설명 | |
contentType | text/html;charset=ISO-8859-1 | 브라우저로 내보내는 내용의 MIME 형식 지정 및 문자 집합 지정 |
pageEncoding | ISO-8859-1 | 현재 JSP 페이지 문자 집합 지정 |
import | 현재 JSP 페이지에 사용할 Java 패키지나 클래스 지정. | |
session | true | 세션의 사용 유무 설정 |
errorPage | 에러가 발생할 때에 대신 처리될 JSP 페이지 설정. | |
isErrorPage | false | 현재 JSP 페이지가 에러 핸들링 하는 페이지인지 지정하는 요소. |
buffer | 8KB | 버퍼 크기. |
autoflush | true | 버퍼의 내용을 자동으로 브라우저로 보낼지 설정. |
isThreadsafe | true | 현재 JSP 페이지가 멀티 쓰레드로 동작해도 안전한지 여부 설정. |
extends | javax.servlet.jsp.HttpJspPage | 현재 JSP페이지를 기본적인 클래스가 아닌 다른 클래스로부터 상속하도록 변경. |
기본 객체명 | Type | 설명 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | HTML 폼 요소의 선택 값 등 사용자 입력 정보 읽을 때 사용. |
response | javax.servlet.http.HttpServletResponse | 사용자 요청에 대한 응답 처리. |
pageContext | javax.servlet.jsp.Page.Context | 각종 기본 객체를 얻거나 forward 및 include 기능 활용 |
session | javax.servlet.http.HttpSession | 클라이언트에 대한 세션 정보 처리. page directive의 session = "false"일 경우 생성 X |
application | javax.servlet.ServletContext | 웹 서버의 애플리케이션 처리와 관련된 정보 레퍼런스. |
out | javax.servlet.jsp.JspWriter | 사용자에게 전달하기 위한 output 스트림 처리할 때 사용. |
config | javax.servlet.ServletConfig | 현재 JSP에 대한 초기화 환경 처리. |
page | java.lang.Object | 현재 JSP페이지에 대한 참조 변수. |
exception | java.lang.Exception | Error를 처리하는 JSP에서 isErrorPage 속성을 true로 설정하면 exception 내장 객체 사용 가능. 기본은 false. 전달된 오류 정보를 담고 있음. |
기본 객체 | 설명 |
---|---|
pageContext | 하나의 JSP페이지를 처리할 때 사용되는 영역. 한 번의 클라이언트 요청에 대하여 하나의 JSP 페이지 호출. (단 한 개의 page객체만 대응) 페이지 영역에 저장한 값은 페이지를 벗어나면 사라진다. 커스텀 태그에서 새로운 변수를 추가할 때 사용. |
request | 하나의 HTTP 요청을 처리할 때 사용되는 영역 웹 브라우저가 요청을 할 때마다 새로운 request객체 생성 request영역에 저장한 속성은 그 요청에 대한 응답이 완료되면 사라짐. |
session | 하나의 웹 브라우저와 관련된 영역 같은 웹브라우저 내에서 요청되는 페이지들은 같은 session 공유. 로그인 정보 등 저장. |
application | 하나의 웹 어플리케이션과 관련된 영역 웹 어플리케이션당 1개의 application 객체 생성. 같은 웹 어플리케이션에서 요청되는 페이지들은 같은 application 객체 공유. |
method | 설명 |
---|---|
void setAttribute(String name, Object value) | 문자열 name이름으로 Object형 데이터 저장. Object이므로 어떤 Java 객체라도 저장 가능. |
Object getAttribute(String name) | 문자열 name에 해당하는 속성값이 있다면 Object형태로 반환. 없다면 null 반환. 적절한 형 변환 필요. |
Enumeration getAttributeNames() | 현재 객체에 저장된 속성들의 이름들을 Enumeration형태로 반환. |
void removeAttribute(String name) | 문자열 name에 해당하는 속성 삭제. |
forward(request, response) | sendRedirect(location) | |
---|---|---|
사용 방법 | RequestDispatcher dispatcher = request/getRequestDispatcher(path); dispatcher.forward(request, response); | response.sendRedirect(location); |
이동 범위 | 동일 서버(project)내 경로 | 동일 서버 포함 타 URL 가능. |
location bar | 기존 URL유지(실제 이동되는 주소 확인 불가) | 이동하는 page로 변경. |
객체 | 기존의 request와 response 그대로 전달. | 새로운 request와 response 생성 |
속도 | 비교적 빠름 | forward()에 비해 느림. |
데이터 유지 | request의 setAttribute(name, value)를 통해 전달. | request로는 data 저장 불가능. session이나 cookie 이용. |