티스토리 뷰

Servlet JSP

서블릿 출력 형식이 없는 경우

Programmers 2021. 4. 21. 20:21
반응형

서블릿을 출력해보자!

package com.newlecture.web;

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("/hello")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		PrintWriter out = resp.getWriter();
		
		for(int i=0; i<100; i++)
		{
			out.println((i+1)+": Hello Servlet!!");
		}
		
	
	}
	
}

여기 위의 코드를 보면 out.println으로 한 줄씩 내려쓰게 코드가 짜여있다.
자 출력 화면을 보자!

 

크롬 출력화면

 

먼저 크롬은 잘 출력된다!

 

explorer 출력화면

 

뭐지 이거? 왜 옆으로 출력되고 그러지? 자 이유는 간단하다
브라우저들 마다 출력한 형식을 자의적으로 해석했기 때문이다.
자, 크롬의 경우는 text형식으로 해석했고, explorer의 경우 html로 해석했기 때문이다.
그렇기 때문에 우리는 서블릿의 형식을 지정해줄 필요가 있다.

이번엔 한글도 입력해보자! 그리고 한글을 쓸 거니깐 코드도 추가해주고~

package com.newlecture.web;

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("/hello")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setCharacterEncoding("UTF-8");
		
		PrintWriter out = response.getWriter();
		
		for(int i=0; i<20; i++)
		{
			out.println((i+1)+": 안녕 Servlet!!");
		}
		
	
	}
	
}

response.setCharacterEncoding("UTF-8");
-> 브라우저야, 내가 charter를 이걸로 보낼거다! 한글로 쓰려고 UTF-8도 추가했어!

 

크롬 출력화면
explorer 출력화면

 

왜 이러냐 이제, 그런데 크롬에서는 explorer에서 출력 결과도 다르네?
한글이 깨지는 이유는 바로 브라우저마다 읽어 들이는 charter 형식이 다르기 때문에 출력 결과도 다르다.

자 그러면 이제 다시! 코드 하나를 더 추가해보자!

package com.newlecture.web;

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("/hello")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		
		for(int i=0; i<20; i++)
		{
			out.println((i+1)+": 안녕 Servlet!!");
		}
		
	
	}
	
}

response.setContentType("Text/html; charset=UTF-8");
-> 브라우저야, chater를 이걸로 읽어라! 그리고 이건 html문서야~
이제 출력해보자!

 

크롬 출력화면
explorer 출력화면

 

한글은 정상적으로 나온다! 드디어 디디어! 하지만; 왜 또 옆으로 나오는 거시냐???
브라우저 입장에서 보는 html 코드를 한번 보자.

안녕 Servlet!!
안녕 Servlet!!
안녕 Servlet!!
안녕 Servlet!!

여기 보면 줄 바꿈을 표시해주는 코드가 없다.

브라우저 입장에서 보는 html 코드는 아래와 같이 되어야 한다.

안녕 Servlet!!<br>
안녕 Servlet!!<br>
안녕 Servlet!!<br>
안녕 Servlet!!<br>

그러면 html에서 줄 바꿈을 하려면 이렇게 <br>을 추가해주자!

자~ 진짜 코드는! 아래에 뚜둥

package com.newlecture.web;

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("/hello")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		
		for(int i=0; i<20; i++)
		{
			out.println((i+1)+": 안녕 Servlet!!<br>");
		}
		
	
	}
	
}

 

ㄱ코드는 완성되었다. 그렇다면 이제 한번 실행해보자! 

 

크롬 출력화면
explorer 출력화면

 

드디어 됬다!
이번 글은 브라우저와 서블릿의 개념에 대한 이해를 위한 공부였습니다.

이상.

반응형
댓글
공지사항