1. Servlet 그리고 JSP와 관련된 시험을 친다. 아직 SPRING은 시작도 안한 상태다. 시작은 서블릿과 JSP다.
- servlet이 뭐지? 자바 웹 서버로 웹 페이지를 제공할 때, 동적인 데이터를 제공하는 것을 도와주는 친구.
HTTP 요청 → 서블릿(서버 로직) → HTTP 응답
기존에 CGI의 단점을 보완하는 프로그램이다. CGI는 브라우저에서 웹서버에 요청이갔을 때, 각각에 대한 프로세스를 각각 만들어냈기에 대량의 트래픽을 처리하기에 무리가 있었다. 서블릿은 대량의 요청이 들어와도 안정적이다.
서블릿은 프로세스 1개가 있고 그 내부에 스레드 풀이라는 스레드들이 생성될 수 있는 공간을 스레드로 처리했다는데
스레드란 긴 실을 조각 조각 나눠서 따로 사용할 수 있게 한 것이다. 코딩에서 스레드를 하는 이유는 빠르게 번갈아 처리하기 위해서다.
- JSP가 뭐지?
2. 시험문제 내용
1) 인사말과 함께 요청을 처리한 서블릿의 이름을 출력하는 웹 애플리케이션을 만드시오.
2) 사용자의 이름을 전송하면, 그 이름으로 인사말을 작성하는 기능을 구현하시오.
3) 모든 서블릿은 HttpServlet 클래스를 상속 받아 작성한다.
4) 서블릿 컨테이너로부터 request와 response 객체를 받아 프로그램을 수행하는 service() 메서드를 재정의 하시오.
5) 서블릿과 URL(/super-simple)을 연결하시오. 연결 방법으로 애노테이션을 서블릿 클래스에 선언하시오.
6) 웹 브라우저로 요청시 name 변수에는 본인의 이름(문자열값)이 들어가도록 하시오
7) 본인의 한국어 이름(문자열값)을 올바르게 보여주기위해 ‘UTF-8’ 인코딩 설정을 추가 //SuperSimpleServlet에다가
8) request 객체에 웹 브라우저로 요청시 입력한 이름과 서블릿 이름을 저장하시오. //setAttribute
9) JSP(helloearth.jsp)에서 HTML을 출력하기 위해 서블릿에서 RequestDispatcher를 사용하여
request와 response를 전달하시오. //forward를 어디다가 하는거지? JSP로 해라. 서블릿에서 JSP로 path 설정하기.
10) JSP(helloearth.jsp)에서 표현식 언어(expression language, EL)로 본인의 이름과 서블릿 이름을 출력. //API참고?
// HttpServlet은 GenericServlet을 상속받음. GenericServlet은 GetServletName을 사용할 수 있음. 상속받고 있음.
11) 자바 웹 애플리케이션의 구조는 아래와 같이 작성하시오.
mvc구조가 아니다. 웹 서블릿을 써라. http서블릿을 상속받아서 구현하라는 문제임. request를 사용함.
3. class파일과 JSP파일을 연결시켰다. 정확한 원리는 이해를 아직 못하고 있지만 흐름은 알겠다.
Class파일(SuperSimpleServlet)
package com.earth.jsh;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
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("/super-simple")
public class SuperSimpleServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 요청 처리
String name = request.getParameter("name"); // request 객체에서 parameter 값 가져오기
request.setAttribute("servletName", getServletName()); // 서블릿 이름 저장
request.setAttribute("name", name); // 이름 저장
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/views/helloearth.jsp");
dispatcher.forward(request, response);
}
@Override
public void init() throws ServletException {
// 서블릿 초기화 코드 작성
}
@Override
public void destroy() {
// 서블릿 종료시 처리할 코드 작성
}
}
JSP파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>${param.name}님 안녕하세요.</h1>
<h1>저는 ${servletName} 입니다.</h1>
</body>
</html>
4. 시험치면서 알게 된 것들