본문 바로가기

JSP/기본다지기

JSP 1일차 필기 (서블릿의 이해)

패키지명을 설정하는 이유.


클래스의 이름을 고유하게 설정해주기 위해서 도메인 이름으로 패키지명을 설정한다.

(도메인명은 고유하기 때문)


클래스명 = 패키지명 + 클래스명


새로운 프로젝트 L01HelloServlet을 생성.

(생성 시 web.xml을 같이 생성해주겠다고 체크한다.)


web.xml 파일을 굳이 생성하지 않더라도 Tomcat 서버에 web.xml이 존재하기 때문에 실행에는 문제가 없다.


프로젝트의 아래에 Java Resources/src에


com.jsp.servlet 패키지를 생성하고 HelloWorld.java 클래스를 생성한다.


기본적인 설정은 이전에 포스팅한 JSP 맛보기 게시글에서 확인할 수 있다.


Hello를 띄워보는 것이 중요한 이유는 처음 환경설정이 제대로 되었는지 확인하는 의미가 있기 때문이다.


일단은 servlet으로 생성하지 않고 class로 생성하여 servlet처럼 웹에서 HelloServlet을 띄워보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.jsp.servlet;
 
import java.io.IOException;
 
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("/hello")
public class HelloWorld extends HttpServlet{
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().append("<h1>Hello Servlet</h1>");
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
    }
 
}
 
cs


위 예제에 main함수가 없는 이유


servlet은 서버 환경에서 돌아가기 때문에 main을 실행하지 않기 때문. (서버 == main)


HelloWorld 클래스가 서블릿이 되기 위해서는 HttpServlet을 상속 받아야 하며, 이 HttpServlet은 아파치 톰캣 라이브러리이다.


@WebServlet은 어노테이션 이라고 하며, 보통 클래스 상단에 붙는다.

이 어노테이션은 밀접해있는 클래스의 주소를 생성해준다.

(주의할 점. 주소는 중복을 허용하지 않는다.)


서버가 구동될 때 가장 처음으로 web.xml에 등록된 주소를 살피는데 @WebServlet에 작성한 주소는 web.xml에 등록이 된다.


이때, 주소가 중복이 되면 서버는 치명적인 오류로 판단하여 구동을 멈춘다.


doGet, doPost 메소드를 구현(Override를 통해)하는 이유는 Client의 요청을 받기 위함이다.


HTTP 통신도 말 그대로 통신이므로, 입출력이 발생하며, 이 때 혹시 모를 예외에 대비하여 예외처리를 해 주어야 한다.


doGet 메소드


브라우저에 URL로 요청을 하면 doGet 메소드가 요청을 받는다.


이 때, 요청을 받는 것이 doGet 메소드의 HttpServletRequest이다.


이것을 줄여서 request 객체 라고 한다.


서버가 브라우저에 정보를 전달하는 행위는 응답(response)라고 하며,


이 때 응답을 하는 객체는 HttpServletResponse 이고 줄여서 response 객체라고 부른다.


/hello 페이지는 url로 페이지 요청이 오면 Hello Servlet 이라는 메세지를 보내는 것이 목표이다.


이 때의 과정은 아래와 같다


1. 브라우저에 ./hello라는 페이지를 요청한다.


2. 서버는 ./hello로 Mapping된 서블릿을 찾는다.


3. url 요청이기 때문에 /hello로 Mapping 된 HelloWorld 서블릿에 doGet()을 호출한다.



servlet 만들어보기.


com.jsp.servlet 패키지에 서블릿 L01WebXml.java 생성.


서블릿을 생성해보고, 웹페이지에 시간을 띄워보는 간단한 예제.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.jsp.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class L01WebXml extends HttpServlet{
    private static final long serialVersionUID = 1L;
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        //out 객체에 담기 전에 charset을 해야한다.
        
        //현재 시간을 화면에 출력
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss");
        response.getWriter().append("<h1>"+sdf.format(new Date())+"</h1>");
        
        PrintWriter out = response.getWriter();
        out.print("<html>");
        out.print("<body>");
        out.print("<h1>오늘의 날짜 출력</h1><hr>");
        out.print("<h1>"+sdf.format(new Date())+"</H1>");
        out.print("</body>");
        out.print("</html>");
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
 
cs


doGet의 response가 응답하는 페이지의 default 형식은 html이다.


문서 형식을 바꾸고 싶다면 response.setContentType()에 문서 형태를 지정하면 된다.

예를들어 xml 파일을 주고받고 싶다면 setContentType()에 xml파일을 지정하면 된다.


현재 많이 사용하는 문서 형식은 JSON이며, xml과의 차이는 다음과 같다


 

xml 

JSON 

형식 

태그(xml문서 형식)

문자열 

데이터의 견고성

견고하다 

변하기 쉽다(오염되기 쉽다) 

데이터 교환 속도

상대적으로 느리다. 

상대적으로 빠르다 


JSON의 또다른 장점으로는 문자열로 이루어져 있기 때문에 플랫폼에 독립적이라는 점이 있다.

(이식성, 범용성)


이러한 장점으로 인하여 현재 xml을 대체하는 주요 데이터 포맷으로 떠오르고 있으며, 치명적인 약점이 될 수 있는 데이터가 오염되기 쉬운 부분은 최근 웹의 발전과 동시에 상당부분 보완이 이루어졌기 때문에 크게 문제될 일이 없다.


server charset 설정하기.


1. servers/server.xml을 연다.


2. Connector tag 중에 protocol = "HTTP/1.1"로 설정되어 있는 곳에 URIEncoding = "UTF-8"을 추가한다.


이 방법은 응답하는 페이지의 charset을 설정하는 것이 아니라 parameter를 주고 받을때의 형식을 설정하는 것이다.





'JSP > 기본다지기' 카테고리의 다른 글

JSP 2일차 필기 (get방식, post방식으로 호출하기)  (0) 2016.10.19
JSP 2일차 필기 (JSP 들어가기)  (0) 2016.10.19
JSP 맛보기 3일차  (1) 2016.09.19
JSP 맛보기 2일차  (0) 2016.09.19
JSP 맛보기 1일차  (0) 2016.09.09