본문 바로가기

JSP

[JSP] Servlet

Servlet 이란?

JSP 표준이 나오기전에 만들어진 표준으로 자바로 웹 어플리케이션을 개발할 수 있도록 하기 위해 만들어짐.

서블릿을 이용하면 자바 클래스를 이용해서 웹 어플리케이션을 개발할 수 있다.

반드시 매핑을 해야한다!! (경로명 및 보안상의 문제) 

동적 웹 어플리케이션 컴포넌트

.java 확장자

클라이언트의 요청에 동적으로 작동하고, 응답은 html을 이용

java thread를 이용하여 동작(가장 큰 장점) - thread pool을 이용하면 서버의 부하를 줄일 수 있다.

MVC 패턴에서 Contoroller로 이용된다.(View - JSP, Model)

 

 

GenericServlet 추상 클래스는 Servlet과 ServletConfig 인터페이스를 구현함(반쪽 완성 설계도)

HttpServlet은 GenericServlet 추상클래스를 상속받음!! (오버라이딩으로 재정의 해야함)

 

Servlet 상속 계층도

 

 

Servlet 문서 작성하기

 

서블릿 파일은 HttpServlet 파일을 상속받아야 비로서 서블릿 파일이 된다!!

서블릿 파일을 만들고 나서, URL 매핑을 해주어야 하는데 두 가지 방법이 있다.

매핑은 클래스명을 대신해서 닉네임이라고 생각하면 편할 것이다.

 

 

Servlet URL 매핑하기

 

1. Servlet  파일을 생성할 때, 입력하는 방법

 

임포트를 해줘도 문제가 생긴다.

JRE 파일과 연동이 안되어서 임포트 오류가 생긴다!!

 

Build Path 들어가서 연동을 시켜주자

 

톰캣 들가서 jsp-api, servlet-api를 넣어주자!

 

잘 들어간 모습 ㅎㅎ

// javax.servlet 패키지에 예외가 발생한다면,jre 연동이 안되있으니깐, 프로젝트 우클릭 => Build Path
// => add external JARs => tomcat 폴더 이동 => servlet-api.jar, jsp-api.jar 파일 추가해주기

// URL 매핑코드가 @WebServlet 어노테이션에 명기되어 있다.
// Servlet 파일이 되면 HttpServlet 클래스를 자동으로 상속받는다.
@WebServlet("/Hssam")
public class HelloSsambbong extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	// 기본 생성자
    public HelloSsambbong() {
    	
    }
	// doGet(), doPost() => Servlet 파일이 처리하는 부분이다.
    // 이 서블릿을 호출할 때 클라이언트에서 요청이 들어올 때, get 방식이냐, post 방식이냐에 따라서 호출되는게 다르다.
    // doGet() 메서드는 폼을 그냥 출력하는 형태로 많이 쓰이고, doPost() 메서드는 데이터를 가공하거나 처리코드를 실행할 때 많이 사용된다.
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("Hello SSAMBBONG");
		System.out.println("doGet() 호출");
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("Hello SSAMBBONG");
		System.out.println("doPost() 호출");
	}
}

 

 

정리

JSP 파일: HTML 파일내에 JSP 코드를 넣는 것

SERVLET 파일: 자바 파일이고, 반드시 URL 매핑을 해서 사용해야 한다.

 

 

2. Web.xml 파일에서 태그로 직접 지정해주는 방법

너무 URL 주소가 길고, 보안에 노출되어 있는 경로를 간단하게 맵핑하는 것이다.

<servlet-name>: 임의의 이름을 만들어 준다.

<servlet-class>: 매핑할 클래스 파일명을 패키지명을 포함하여 정확하게 입력한다.

<url-pattern>: servlet-class의 클래스를 매핑할 임의의 이름을 입력한다. (' / '로 시작해야 한다.)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Practice_Chap02</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  <!-- 매핑해야될 서블릿 파일을 지정함 -->
  <servlet>
  	<servlet-name>아무렇게 넣어도 됨</servlet-name>
  	<servlet-class>sec01_exam.HelloSsambbong</servlet-class>
  </servlet>
  <!-- 위에서 지정한 매핑할 서블릿 파일을 아래 url-pattern 태그를 이용 -->
    <!-- servlet-name은 위 아래가 똑같아야 한다. -->
  
  <servlet-mapping>
  	<servlet-name>아무렇게 넣어도 됨</servlet-name>
  	<url-pattern>/ssambbong</url-pattern>
  </servlet-mapping>
</web-app>

 

 

response 객체와 HTML 열거, Java 코드를 이용해 동적 웹 프로그램을 만들었다.

@WebServlet("/NowTime")
public class NowTime extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public NowTime() {
        super();
    }

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 문자셋 지정
		response.setContentType("text/html; charset=utf-8");
		
		// 서블릿은 JSP 표준 이전에 등장한 표준이다. 
		// 지금까지 살펴본 web.xml 맵핑과 어노테이션 매핑 방법이 있는데,
		// 어노테이션 매핑을 하게 되면 프로그램 개발을 완성한 후 릴리즈를 했는데 갑자기 수정 시 자바소스파일을
		// 수정을 해야되고 아울러 재컴파일을 계속 하게 될 것이다. <= 유지보수가 힘들다.
		
		PrintWriter out = response.getWriter();
		LocalDate nowDt = LocalDate.now();
		out.println("<HTML>");
		out.println("<HEAD><TITLE>현재시간</TITLE></HEAD>");
		out.println("<BODY>");
		out.println("오늘 날짜는");
		out.println(nowDt);
		out.println("입니다.");
		out.println("</BODY>");
		out.println("</HTML>");
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}

 

3. 어노테이션을 서블릿 매핑하기

@WebServlet("/SSAMBBONG"): 매핑명(SSAMBBONG)을 java 소스에 직접 입력한다.

중요한 점은 어느테이션을 통한 매핑보다는 web.xml 파일로 매핑을 해두면 그것이 더 우선 순위가 높다.

하지만 어노테이션을 이용하는게 편하다는 것은 부정 못한다.

 

 

 

 

 

 

 

 

 


톰캣 연동하느라 너무 힘들었다....

 

docBase:

컨텍스트에 대한 실제 웹 애플리케이션이 위치한 경로를 말한다. WEB-INF 상위 폴더까지의 경로를 나타냅니다.

 

path:

웹 애플리케이션의 컨텍스트 이름입니다. 웹 애플리케이션 이름과 다를 수도 있으며, 웹 브라우저에서 실제 웹 애플리케이션을 요청하는 이름입니다.

 

reloadable:

실행 중 소스코드가 수정될 경우 바로 갱신할지  설정합니다. 만약에 false로 되어있다면 코드반영을 할 때 톰캣을 매번 재시작 해줘야 합니다.

 

<% %>: 스크립트릿

JSP 파일에서 자바코드를 삽입할 때 반드시 표기를 해야 한다.

<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%-- (<% %>): 스크립트릿 JSP 파일에서 자바코드를 삽입할 때 반드시 표기를 해야 한다.--%>
<%
	Calendar cal = Calendar.getInstance();
	int hour = cal.get(Calendar.HOUR);
	int minutes = cal.get(Calendar.MINUTE);
	int second = cal.get(Calendar.SECOND);
%>
</head>
<body>
<%-- (<%= %>): 스크립트릿 일종으로 표현식(expression)이다. 
단, 값을 나타내고자 할 때 사용한다. (;) 식별자를 붙이지 않는다.--%>
<h1>현재 시간: <%=hour %>시 <%=minutes %>분 <%=second %>초</h1>
</body>
</html>

신기하다!! 정말 새로고침을 할 때마다 동적으로 페이지가 바뀌고 있다.

 

 

 

 

 

'JSP' 카테고리의 다른 글

[JSP] Servlet 파라미터 값 받기  (0) 2024.05.09
[JSP] Form 태그로 Get, Post 메서드 사용해보기  (0) 2024.05.09
[JSP] JSP 특징, 동작 원리  (0) 2024.05.09