[Spring] 2.์๋ธ๋ฆฟ
1. ํ๋ก์ ํธ ์์ฑ
๋ฉ๋ด์ผ ๋ณด๊ณ ๋ฐ๋ผํ๊ธฐ
2. Hello ์๋ธ๋ฆฟ
[ServletApplication.class]
ใด hello.servlet
@ServletComponentScan
@ServletComponentScan //์๋ธ๋ฆฟ ์๋ ๋ฑ๋ก @SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
}
- ์คํ๋ง์ด ์๋์ผ๋ก ๋ด ํจํค์ง ํฌํจ ํ์ ํจํค์ง ์๋ธ๋ฆฟ ์ฐพ์์ ์๋์ผ๋ก ๋ฑ๋กํด์ ์ฐพ์์ ์คํํ๋๋ก ์ค์ ํด์ค
[HelloServlet.class]
ใด hello.servlet.basic
@WebServlet
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("HelloServlet.service");
System.out.println("request = " + request);
System.out.println("response = " + response);
String username = request.getParameter("username");
System.out.println("username = " + username);
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("hello " + username);
}
}
- HTTP ์์ฒญ์ ํตํด ๋งตํ๋ URL์ด ํธ์ถ๋๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ๋ค์ ๋ฉ์๋๋ฅผ ์คํํ๋ค.
protected void service(HttpServletRequest request, HttpServletResponse response)
|
- ์๋ธ๋ฆฟ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ก๊ฒ ์ฝ์ ์ ์๋๋ก ์ง์
-> request.getParameter
- http ๋ฉ์์ง ๋ฐ๋์ ๋ฐ์ดํฐ ๋ฃ๊ธฐ
-> reponse.getWriter().write("hello" + username);
* ํธ๋ฆฌํ๊ฒ http ์์ฒญ ๋ฉ์์ง ๋ค ๋ณด๋๋ฒ
-> src - main - resources - application.properties => ์ฌ๊ธฐ์
logging.level.org.apache.coyote.http11=debug
์ถ๊ฐ
* ์ด์์๋ฒ์๋ ๋ชจ๋ ์์ฒญ ์ ๋ณด ๋ค ๋จ๊ธฐ๋ฉด ์ฑ๋ฅ์ ํ
* ๊ฐ๋ฐํ ๋๋ง ์ฌ์ฉํ๊ธฐ
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ๋์ ๋ฐฉ์ ์ค๋ช
- ์คํ๋ง ๋ถํธ๊ฐ ๋ด์ฅ ํฐ์บฃ ์๋ฒ ๋์์ค
ํฐ์บฃ ์๋ฒ๋ ๋ด๋ถ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ๊ธฐ๋ฅ ๊ฐ์ง๊ณ ์์
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ํตํด ์๋ธ๋ฆฟ ์์ฑ (helloServlet)
HTTP์์ฒญ, HTTP ์๋ต ๋ฉ์์ง
- ์น๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ ๋ฉ์์ง ๋ง๋ค์ด์ ์๋ฒ์ ๋์ ธ์ค
๊ทธ๋ฌ๋ฉด
-> request, response ๊ฐ์ฒด ๋ง๋ค๊ณ
-> ์ฑ๊ธํค์ผ๋ก ๋ ์๋ ํฌ๋ก์๋ธ๋ฆฟ ํธ์ถ
-> ์๋น์ค ๋ฉ์๋ ํธ์ถ
-> request, response ๋๊ฒจ์ค
-> ํ์ํ ์์ ํ๊ณ response์ ๋ฐ์ดํฐ ๋ฃ์ด์ค
-> ์ข ๋ฃ๋๊ณ ๋๊ฐ๋ฉด์ WAS ์๋ฒ๊ฐ HTTP ์๋ต ๋ฉ์์ง ๋ง๋ค์ด์ ๋ฐํํด์ค
-> ์น๋ธ๋ผ์ฐ์ ์์ ํ์ธ๊ฐ๋ฅ
* ์ฐธ๊ณ ) HTTP ์๋ต์์ Content-Length๋ ์น์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์๋์ผ๋ก ์์ฑํด์ค
welcome ํ์ด์ง ์ถ๊ฐ
ใดmain - webapp - index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li><a href="basic.html">์๋ธ๋ฆฟ basic</a></li>
</ul>
</body>
</html>
basic ํ์ด์ง ์ถ๊ฐ
ใด main - webapp - basic.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>hello ์๋ธ๋ฆฟ
<ul>
<li><a href="/hello?username=servlet">hello ์๋ธ๋ฆฟ ํธ์ถ</a></li>
</ul>
</li>
<li>HttpServletRequest
<ul>
<li>
<a href="/request-header">๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ, Header ์กฐํ</a>
</li>
<li>HTTP ์์ฒญ ๋ฉ์์ง ๋ฐ๋ ์กฐํ
<ul>
<li><a href="/request-param?username=hello&age=20">GET -์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ</a>
</li> li>
<li><a href="/basic/hello-form.html">POST - HTML Form</a></
<li>HTTP API - MessageBody -> Postman ํ
์คํธ</li> </ul>
</li> </ul>
</li>
<li>HttpServletResponse
<ul>
<li><a href="/response-header">๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ, Header ์กฐํ</a></li> <li>HTTP ์๋ต ๋ฉ์์ง ๋ฐ๋ ์กฐํ
<ul>
<li><a href="/response-html">HTML ์๋ต</a></li>
<li><a href="/response-json">HTTP API JSON ์๋ต</a></li>
</ul> </li>
</ul> </li>
</ul>
</body>
</html>
3. HttpServletRequest ๊ฐ์
HttpServletRequest ์ญํ - ์๋ธ๋ฆฟ์ด ๊ฐ๋ฐ์ ๋์ ์ ์์ฒญ๋ฉ์์ง ํ์ฑ- ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HSR ๊ฐ์ฒด์ ๋ด์์ ์ ๊ณต
- ์์ ์ ์ฅ์ ๊ธฐ๋ฅ
> ์ ์ฅ : request.setAttribute(name, value)
> ์กฐํ : request.getAttribute(name)
์ธ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ
> request.getSession(create: true)
์ค์)
HttpServletRequest, HttpServletResponse๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ์ค์ํ ์ ์ ์ด ๊ฐ์ฒด๋ค์ด HTTP ์์ฒญ ๋ฉ์์ง, HTTP ์๋ต ๋ฉ์์ง๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋๋ก ๋์์ฃผ๋ ๊ฐ์ฒด๋ผ๋ ์ ์ด๋ค.
๋ฐ๋ผ์ ์ด ๊ธฐ๋ฅ์ ๋ํด์ ๊น์ด์๋ ์ดํด๋ฅผ ํ๋ ค๋ฉด HTTP ์คํ์ด ์ ๊ณตํ๋ ์์ฒญ, ์๋ต ๋ฉ์์ง ์์ฒด๋ฅผ ์ดํดํด์ผ ํ๋ค. |
* ๋ฉ์์ง ๋ฐ๋์ JSON์ด ๋ค์ด๊ฐ๊ณ / JSON ํ์ฑํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํด์ผํจ
4. HttpServletRequest ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
HttpServletRequest๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ค
RequestHeaderServlet.class
ใดhello.servlet.basic.request
//http://localhost:8080/request-header?username=hello
@WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
public class RequestHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
printStartLine(request);
printHeaders(request);
printHeaderUtils(request);
printEtc(request);
response.getWriter().write("ok");
}
}
//start line ์ ๋ณด
private void printStartLine(HttpServletRequest request) {
System.out.println("--- REQUEST-LINE - start ---");
System.out.println("request.getMethod() = " + request.getMethod()); //GET
System.out.println("request.getProtocol() = " + request.getProtocol()); //
HTTP/1.1
System.out.println("request.getScheme() = " + request.getScheme()); //http
// http://localhost:8080/request-header
System.out.println("request.getRequestURL() = " + request.getRequestURL());
// /request-header
System.out.println("request.getRequestURI() = " + request.getRequestURI());
//username=hi
System.out.println("request.getQueryString() = " +
request.getQueryString());
System.out.println("request.isSecure() = " + request.isSecure()); //https
์ฌ์ฉ ์ ๋ฌด
System.out.println("--- REQUEST-LINE - end ---");
System.out.println();
}
//Header ๋ชจ๋ ์ ๋ณด
private void printHeaders(HttpServletRequest request) {
System.out.println("--- Headers - start ---");
/*
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println(headerName + ": " + request.getHeader(headerName));
}
*/
request.getHeaderNames().asIterator()
.forEachRemaining(headerName -> System.out.println(headerName + ":
" + request.getHeader(headerName)));
System.out.println("--- Headers - end ---");
System.out.println();
}
Header ํธ๋ฆฌํ ์กฐํ
//Header ํธ๋ฆฌํ ์กฐํ
private void printHeaderUtils(HttpServletRequest request) { System.out.println("--- Header ํธ์ ์กฐํ start ---"); System.out.println("[Host ํธ์ ์กฐํ]"); System.out.println("request.getServerName() = " +
request.getServerName()); //Host ํค๋ System.out.println("request.getServerPort() = " +
request.getServerPort()); //Host ํค๋ System.out.println();
System.out.println("[Accept-Language ํธ์ ์กฐํ]"); request.getLocales().asIterator()
.forEachRemaining(locale -> System.out.println("locale = " +
System.out.println("request.getLocale() = " + request.getLocale());
locale));
System.out.println();
System.out.println("[cookie ํธ์ ์กฐํ]"); if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
System.out.println(cookie.getName() + ": " + cookie.getValue());
} }
System.out.println();
System.out.println("[Content ํธ์ ์กฐํ]");
System.out.println("request.getContentType() = " +
request.getContentType());
System.out.println("request.getContentLength() = " +
request.getContentLength());
System.out.println("request.getCharacterEncoding() = " +
request.getCharacterEncoding());
System.out.println("--- Header ํธ์ ์กฐํ end ---");
System.out.println();
}
locale (์ธ์ด)
5. HTTP ์์ฒญ ๋ฐ์ดํฐ - ๊ฐ์
HTTP ์์ฒญ ๋ฉ์์ง๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
3๊ฐ์ง
1) GET (์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ) /url?username=hello&age=20 - ๋ฉ์์ง ๋ฐ๋ ์์ด URL ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ ์ ๋ฌ - ex) ๊ฒ์, ํํฐ, ํ์ด์ง 2) POST (HTML Form) content-type : application/x-www-form-urlencoded - ๋ฉ์์ง ๋ฐ๋์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์์ผ๋ก ์ ๋ฌ username = hello&age = 20 - ex) ํ์๊ฐ์ , ์ํ ์ฃผ๋ฌธ, HTML Form ์ฌ์ฉ 3) HTTP message body (๋ฐ๋์ ๋ฐ์ดํฐ ์ง์ ๋ด์์ ์์ฒญ) - HTTP API์์ ์ฃผ๋ก ์ฌ์ฉ, JSON, XML, TEXT - ๋ฐ์ดํฐ ํ์์ ์ฃผ๋ก JSON ์ฌ์ฉ - POST, PUT, PATCH |
6. HTTP ์์ฒญ ๋ฐ์ดํฐ - GET ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ
๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ์ก
- ๋ฉ์์ง ๋ฐ๋ ์์ด URL์ [์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ]๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ ์ ๋ฌ
ex) ๊ฒ์, ํํฐ, ํ์ด์ง๋ฑ์์ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ URL์ ๋ค์๊ณผ ๊ฐ์ด '?'๋ฅผ ์์์ผ๋ก ๋ณด๋
- ์ถ๊ฐ ํ๋ผ๋ฏธํฐ๋ '&'๋ก ๊ตฌ๋ถ
http://localhost:8080/request-param?username=hello&age=20
|
์๋ฒ์์๋ 'HttpServletRequest'๊ฐ ์ ๊ณตํ๋ ๋ค์ ๋ฉ์๋๋ฅผ ํตํด ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํ ๊ฐ๋ฅ
[์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์กฐํ ๋ฉ์๋]
String username = request.getParameter("username"); //๋จ์ผ ํ๋ผ๋ฏธํฐ ์กฐํ
Enumeration<String> parameterNames = request.getParameterNames(); //ํ๋ผ๋ฏธํฐ ์ด๋ฆ๋ค ๋ชจ๋ ์กฐํ
Map<String, String[]> parameterMap = request.getParameterMap(); //ํ๋ผ๋ฏธํฐ๋ฅผ Map ์ผ๋ก ์กฐํ
String[] usernames = request.getParameterValues("username"); //๋ณต์ ํ๋ผ๋ฏธํฐ ์กฐํ
[RequestParamServlet]
/**
* 1. ํ๋ผ๋ฏธํฐ ์ ์ก ๊ธฐ๋ฅ
* http://localhost:8080/request-param?username=hello&age=20
* <p>
* 2. ๋์ผํ ํ๋ผ๋ฏธํฐ ์ ์ก ๊ฐ๋ฅ
* http://localhost:8080/request-param?username=hello&username=kim&age=20 */
@WebServlet(name = "requestParamServlet", urlPatterns = "/request-param")
public class RequestParamServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("[์ ์ฒด ํ๋ผ๋ฏธํฐ ์กฐํ] - start");
/*
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String paramName = parameterNames.nextElement();
System.out.println(paramName + "=" + request.getParameter(paramName));
}
*/
request.getParameterNames().asIterator()
.forEachRemaining(paramName -> System.out.println(paramName +
"=" + request.getParameter(paramName))); System.out.println("[์ ์ฒด ํ๋ผ๋ฏธํฐ ์กฐํ] - end");
System.out.println();
System.out.println("[๋จ์ผ ํ๋ผ๋ฏธํฐ ์กฐํ]");
String username = request.getParameter("username"); System.out.println("request.getParameter(username) = " + username);
String age = request.getParameter("age");
System.out.println("request.getParameter(age) = " + age);
System.out.println();
System.out.println("[์ด๋ฆ์ด ๊ฐ์ ๋ณต์ ํ๋ผ๋ฏธํฐ ์กฐํ]");
System.out.println("request.getParameterValues(username)");
String[] usernames = request.getParameterValues("username");
for (String name : usernames) {
System.out.println("username=" + name);
}
resp.getWriter().write("ok");
}
}
* ํ๋์ ํ๋ผ๋ฏธํฐ์ ๊ฐ ์ค๋ณตํด์ ๋ฃ์ ์ ์์
* ๋ณต์ ํ๋ผ๋ฏธํฐ์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๋ฃ์ด์ ํ์ฉ
7. HTTP ์์ฒญ ๋ฐ์ดํฐ - POST HTML Form
HTML Form ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก
์ฃผ๋ก ํ์๊ฐ์ / ์ํ ์ฃผ๋ฌธ ๋ฑ์์ ์ฌ์ฉํ๋ ๋ฐฉ์
[ํน์ง]
- content-type : 'application/x-www-form-urlencoded'
HTTP ๋ฉ์์ง ๋ฐ๋์ ๋ฐ์ดํฐ ํ์์ ์ง์ ํ๋ ๊ฒ
- ๋ฉ์์ง ๋ฐ๋์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ
username=hello&age=20
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/request-param" method="post">
username: <input type="text" name="username" />
age: <input type="text" name="age" />
<button type="submit">์ ์ก</button>
</form>
</body>
</html>
- ์๋ฒ ์ ์ฅ์์๋ ๋์ ํ์์ด ๋์ผํ๋ฏ๋ก 'request.getParameter()'๋ก ํธ๋ฆฌํ๊ฒ ๊ตฌ๋ถ์์ด ์กฐํ๊ฐ๋ฅ
* GET URL ์ฟผ๋ฆฌํ๋ผ๋ฏธํฐ ํ์์ผ๋ก ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌํ ๋ HTTP ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ content-type์ด ์๋ค.
* POST HTML Form ํ์์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌํ๋ฉด HTTP ๋ฉ์์ง ๋ฐ๋์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ํฌํจ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ํ์์ธ์ง content-type์ ๊ผญ ์ง์ ํด์ผํ๋ค -> ํผ์ผ๋ก ๋ฐ์ดํฐ ์ ์ก ํ์์ด 'application/x-www-form-urlencoded'
8. HTTP ์์ฒญ ๋ฐ์ดํฐ - API ๋ฉ์์ง ๋ฐ๋ - ๋จ์ ํ ์คํธ
HTTP message body์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ด์์ ์์ฒญ
- HTTP API์์ ์ฃผ๋ก ์ฌ์ฉ (JSON, XML, TEXT)
- ๋ฐ์ดํฐ ํ์์ ์ฃผ๋ก JSON
- POST, PUT, PATCH
@WebServlet(name = "requestBodyStringServlet", urlPatterns = "/request-body-string")
public class RequestBodyStringServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
response.getWriter().write("ok");
}
}
inputStream์ byte ์ฝ๋๋ฅผ ๋ฐํํ๋ค. byte ์ฝ๋๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฝ์ ์ ์๋ ๋ฌธ์(String)๋ก ๋ณด๋ ค๋ฉด ๋ฌธ์ํ
(Charset)๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. ์ฌ๊ธฐ์๋ UTF_8 Charset์ ์ง์ ํด์ฃผ์๋ค. |
9. HTTP ์์ฒญ ๋ฐ์ดํฐ - API ๋ฉ์์ง ๋ฐ๋ - JSON
HTTP API์์ ์ฃผ๋ก ์ฌ์ฉํ๋ JSON ํ์์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ
[JSON ํ์ ์ ์ก]- POST ( http://localhost:8080/request-body-json )- content-type : 'application/json'- message body : { "username" : "hello", "age" : 20 }- ๊ฒฐ๊ณผ : 'messageBody = { "username" : "hello", "age" : 20 }'
JSON ํ์ ํ์ฑ ์ถ๊ฐ
lombok.Getter; lombok.Setter;ใด importํด์ getter setter ์๋ ์์ฑ
@Getter @Setter
public class HelloData {
private String username;
private int age;
}
์๋ธ๋ฆฟ
/**
* http://localhost:8080/request-body-json
*
* JSON ํ์ ์ ์ก
* content-type: application/json
* message body: {"username": "hello", "age": 20} *
*/
@WebServlet(name = "requestBodyJsonServlet", urlPatterns = "/request-body-json")
public class RequestBodyJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
System.out.println("messageBody = " + messageBody);
HelloData helloData = objectMapper.readValue(messageBody,HelloData.class);
System.out.println("helloData.username = " + helloData.getUsername());
System.out.println("helloData.age = " + helloData.getAge());
response.getWriter().write("ok");
}
}
์ฐธ๊ณ )
JSON ๊ฒฐ๊ณผ๋ฅผ ํ์ฑํด์ ์ฌ์ฉํ ์ ์๋ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํํ๋ ค๋ฉด Jackson, Gson ๊ฐ์ JSON ๋ณํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ ์ฌ์ฉํด์ผ ํ๋ค. ์คํ๋ง ๋ถํธ๋ก Spring MVC๋ฅผ ์ ํํ๋ฉด ๊ธฐ๋ณธ์ผ๋ก Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ( ObjectMapper )๋ฅผ ํจ๊ป ์ ๊ณตํ๋ค. |
์ฐธ๊ณ )
HTML form ๋ฐ์ดํฐ๋ ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์ ์ก๋๋ฏ๋ก ์ง์ ์ฝ์ ์ ์๋ค. ํ์ง๋ง ํธ๋ฆฌํ ํ๋ฆฌ๋ฏธํฐ ์กฐํ
๊ธฐ๋ฅ( request.getParameter(...) )์ ์ด๋ฏธ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ํ๋ผ๋ฏธํฐ ์กฐํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋๋ค. |
10. HttpServletResponse - ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
HttpServletResponse ์ญํ
HTTP ์๋ต ๋ฉ์์ง ์์ฑ
- HTTP ์๋ต์ฝ๋ ์ง์
- ํค๋ ์์ฑ
- ๋ฐ๋ ์์ฑ
ํธ์ ๊ธฐ๋ฅ ์ ๊ณต
- Content-Type, ์ฟ ํค, Redirect
HttpServletResponse - ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
@WebServlet(name = "responseHeaderServlet", urlPatterns = "/response-header")
public class ResponseHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//[status-line]
response.setStatus(HttpServletResponse.SC_OK); //200
//[response-headers]
response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("my-header","hello");
//[Header ํธ์ ๋ฉ์๋]
content(response);
cookie(response);
redirect(response);
//[message body]
PrintWriter writer = response.getWriter();
writer.println("ok");
}
}
Content ํธ์ ๋ฉ์๋
private void content(HttpServletResponse response) {
//Content-Type: text/plain;charset=utf-8
//Content-Length: 2
//response.setHeader("Content-Type", "text/plain;charset=utf-8");
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
//response.setContentLength(2);
//(์๋ต์ ์๋ ์์ฑ)
}
์ฟ ํค ํธ์ ๋ฉ์๋
private void cookie(HttpServletResponse response) {
//Set-Cookie: myCookie=good; Max-Age=600;
//response.setHeader("Set-Cookie", "myCookie=good; Max-Age=600");
Cookie cookie = new Cookie("myCookie", "good");
cookie.setMaxAge(600); //600์ด
response.addCookie(cookie);
}
redirect ํธ์ ๋ฉ์๋
private void redirect(HttpServletResponse response) throws IOException {
//Status Code 302
//Location: /basic/hello-form.html
//response.setStatus(HttpServletResponse.SC_FOUND); //302
//response.setHeader("Location", "/basic/hello-form.html");
response.sendRedirect("/basic/hello-form.html");
}
11. HTTP ์๋ต ๋ฐ์ดํฐ - ๋จ์ ํ ์คํธ, HTML
HTTP ์๋ต ๋ฉ์์ง๋ ์ฃผ๋ก ๋ค์ ๋ด์ฉ์ ๋ด์์ ์ ๋ฌ
- ๋จ์ ํ ์คํธ ์๋ต
'writer.println("ok");'
- HTML ์๋ต
- HTTP API - MessageBody JSON ์๋ต
HttpServletResponse - HTML ์๋ต
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Content-Type: text/html;charset=utf-8
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter(); writer.println("<html>");
writer.println("<body>");
writer.println(" <div>์๋
?</div>");
writer.println("</body>");
writer.println("</html>");
}
}
- HTTP ์๋ต์ผ๋ก HTML ๋ฐํํ ๋ content-type์ text/html๋ก ์ง์ ํด์ผํจ
์คํ
- http://localhost:8080/response-html
12. HTTP ์๋ต ๋ฐ์ดํฐ - API JSON
/**
* http://localhost:8080/response-json
*
*/
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json")
public class ResponseJsonServlet extends HttpServlet {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Content-Type: application/json
response.setHeader("content-type", "application/json");
response.setCharacterEncoding("utf-8");
HelloData data = new HelloData();
data.setUsername("kim");
data.setAge(20);
//{"username":"kim","age":20}
String result = objectMapper.writeValueAsString(data);
response.getWriter().write(result);
}
}
HTTP ์๋ต์ผ๋ก JSON์ ๋ฐํํ ๋๋ content-type์ application/json ๋ก ์ง์ ํด์ผ ํ๋ค.
Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ objectMapper.writeValueAsString() ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์๋ก ๋ณ๊ฒฝํ ์ ์๋ค. |
์ฐธ๊ณ )
application/json ์ ์คํ์ utf-8 ํ์์ ์ฌ์ฉํ๋๋ก ์ ์๋์ด ์๋ค.
๊ทธ๋์ ์คํ์์ charset=utf-8๊ณผ ๊ฐ์ ์ถ๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ํ์ง ์๋๋ค. ๋ฐ๋ผ์ application/json ์ด๋ผ๊ณ ๋ง ์ฌ์ฉํด์ผ์ง > application/json;charset=utf-8 ์ด๋ผ๊ณ ์ ๋ฌํ๋ ๊ฒ์ ์๋ฏธ ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ ๊ฒ์ด ๋๋ค. > response.getWriter()๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํด๋ฒ๋ฆฐ๋ค. ์ด๋๋ response.getOutputStream()์ผ๋ก ์ถ๋ ฅํ๋ฉด ๊ทธ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค. |
'๐จโ๐ป Web Development > Spirng - MVC ํจํด l' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] 6.์คํ๋ง MVC - ๊ธฐ๋ณธ ๊ธฐ๋ฅ (0) | 2023.03.15 |
---|---|
[Spring] 5.์คํ๋ง MVC - ๊ตฌ์กฐ ์ดํด (0) | 2023.03.14 |
[Spring] 4.MVC ํ๋ ์์ํฌ ๋ง๋ค๊ธฐ (0) | 2023.03.13 |
[Spring] 3.์๋ธ๋ฆฟ, JSP, MVC ํจํด (0) | 2023.03.13 |
[Spring] 1.์น ์ ํ๋ฆฌ์ผ์ด์ ์ดํด (0) | 2023.03.11 |
์ต๊ทผ๋๊ธ