#13 JSP (Java Server Pages)
by JiwonDev# Web Server
์น ํ์ค ํ๋กํ ์ฝ(HTTP)๋ฅผ ์ฌ์ฉํ์ฌ Clinet-Server ๊ตฌ์กฐ๋ก ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ ์ ์ ์ธ ๋ฐ์ดํฐ (HTML, CSS, JS, ์ด๋ฏธ์ง ๋ฆฌ์์ค ๋ฑ)๋ฅผ ์๋ตํ๋ค. ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ์ถ์ด๋ HTML, JS๋ก๋ ๊ตฌํํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
์ฅ? ์์ฆ ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ ๊ฐ๋ฅํ์ง ์๋์? SPA๋ผ๊ณ ๋ถ๋ฆฌ๋๋ฐ?
ECMA6 (2015)์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ธ์ด๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ์ ๋ฏผ๋งํ ์์ค์ ๊ตฌ๋ฆฐ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ์๋ค. ์์ฆ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์งํ์ด ๋ง์ด ๋ฐ์ ํ๊ณ ๋ค์ํ ํ๋ ์์ํฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ค๋ฉด์ WAS(์น์ฑ, MPA๋ฐฉ์, Java) ๋์ SPA(Single page App, Js)๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ๋ ๋ง์๋ฐ ์ํฉ์ ๋ฐ๋ผ ์ฅ๋จ์ ์ด ์๋ค.
1. ๊ธฐ์กด์ ์น ์ฑ(WAS, Java)๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ
= ์ดํ๋ฆฌ์ผ์ด์ ์ [๊ฐ๋จํ ์ฝ๊ธฐ ์ ์ฉ ํด๋ผ์ด์ธํธ]๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ ์ ํ๋ค.
ํด๋ผ์ด์ธํธ ์ชฝ ๋์์ด ๊ฑฐ์ ์๋ ์ฝ๊ธฐ ์ ์ฉ ์ฝํ ์ธ ์ ๊ฒฝ์ฐ ๊ธฐ์กด์ ์น ์ฑ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค. ๋๋ถ๋ถ์ ๋ก์ง์ ์๋ฒ ์ชฝ์์ ์ฒ๋ฆฌ๋๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ์ง ์๋๋ผ๋ ์๋๊ฐ๋ฅํ๋ค๋ ์ด์ ์ด ์๋ค. ํ์ง๋ง ํ์ด์ง ์ด๋์ ์ ์ฒด ๋ฆฌ๋ก๋ฉ๋์ด ํ๋ฉด์ด ๊น๋นก์ด๊ฑฐ๋ ๋ถํ์ํ ํ ํ๋ฆฟ์ ์ค๋ณตํด์ ๋ก๋ฉํ๋ ๋จ์ ์ด ์๋ค.
ํด๋ผ์ด์ธํธ ์ธก์๋ ๋ ๋๋ง์ด ์๋ฃ๋ ์ ์ ์ธ HTML ํ์ผ์ ๋ฐ๊ธฐ์ ๊ฒ์์์ง์ต์ ํ(SEO)๊ฐ ์ฝ๊ณ ์๋ฒ์ธก์์ ๋ชจ๋ ๋ก์ง์ ๋ค ์ฒ๋ฆฌํ ์ํ๋ก ๋ณด๋ด์ฃผ๊ธฐ์ ์ฒซ ํ์ด์ง ๋ก๋ฉ์ด ๋งค์ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
(์ฌ์ค SPA ๊ฐ๋ ์ด ๋์จ๊ฒ ๋น๊ต์ ์ต๊ทผ์ด๊ธฐ์ ๋๋ถ๋ถ์ ์ ์น์ฌ์ดํธ๋ค์ ํด๋ผ์ด์ธํธ์์ ๋ก์ง์ ๊ฑฐ์ ์ฒ๋ฆฌํ์ง์๊ณ , ์๋ฒ์์ ์ฒ๋ฆฌํ๊ณ ํ์ด์ง๋ฅผ ์ ์กํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์๋ค.)
2. SPA (Single page app, ์๋ฐ์คํฌ๋ฆฝํธ)๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ
= ์ดํ๋ฆฌ์ผ์ด์ ์์ฒด์์ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ์ ํ๋ค.
์ด๋ฅผ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ) ๊ด์ ์์ ๋ค์ ๋งํ์๋ฉด WAS์ ๋ฌ๋ฆฌ ์๋ฒ ์ชฝ์์ ์ ์ฒด HTML๋ฅผ ๋ฐ์์ค๋๊ฒ ์๋๋ผ ์ต์ด์ HTML์ ๊ฐ์ง๊ณ ์ดํ ํ์ด์ง ๋ฆฌ๋ก๋ฉ ์์ด ํ์ํ ๋ฐ์ดํฐ(.json)๋ง ์๋ฒ๋ก ๋ถํฐ ๋ฐ์์ ํ๋ฉด์ ๊ฐฑ์ ํ๋ ๊ฒ์ด๋ค. ํ์ํ ๋ถ๋ถ๋ง ๊ฐฑ์ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ดํฐ๋ธ ์ฑ์ ๊ฐ๊น์ด ์์ฐ์ค๋ฌ์ด ํ์ด์ง ์ด๋๊ณผ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ์ ๊ณตํ ์ ์๋ค.
๋จ์์ด ์ค๋ช ๋ง ์ฝ์ด๋ณด๋ฉด ๊ธฐ์กด์ WAS๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ (* MPA, Multi Page App)๋ณด๋ค ์ฅ์ ๋ฐ์ ์๋ ๊ฒ ๊ฐ์ง๋ง ๊ทธ๋งํผ ๊ธฐ์กด์ ์๋ฒ์์ ์ฒ๋ฆฌํ๋ ๋ก์ง๋ค์ด ํด๋ผ์ด์ธํธ(JS)์ ์ถ๊ฐ๋์ด ์ฝ๋๊ฐ ์๋นํ ๋ณต์กํด์ง๊ณ HTML์ฝ๋๊ฐ ๋ณต์กํด์ ธ ๊ฒ์์์ง์ต์ ํ(SEO)์ ์ทจ์ฝํ๋ฉฐ ์ต์ด ์คํ ์ ์ด๊ธฐ๋ ๋๋ง ์๋๊ฐ ๋๋ ค์ง๋ค๋ ๋จ์ ์ด ์๋ค.
์ฌ์ค ๊ธฐ์กด์ WAS๋ฅผ ์ฌ์ฉํ๋ [MPA ๋ฐฉ์] ์ด๋ผ๋ ์ฉ์ด๋ SPA๊ฐ ๋ฑ์ฅํ๋ฉด์ ๊ตฌ๋ถ์ง๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ฉ์ด์ด๊ธฐ๋ ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์งํ์์๋ ์ด๋ฌํ SPA์ ๋จ์ ๋ค์ ๊ทน๋ณตํ๋ ค๊ณ ํ๋ก์ ํธ ์ฝ๋๋ฅผ ๋ฒ๋ค๋งํด์ฃผ๋ ๋๊ตฌ (webpack), SPA๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ด์ฉํด MPA์ฒ๋ผ ์ฌ์ฉํ๋ Next.js(React), Nuxt.js(Vue) ๊ฐ์ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง, [SSR ํ๋ ์์ํฌ]๊ฐ ๋ฑ์ฅํ๊ณ ์๋ค.
# WAS (Web App Server)
Servlet, JSP๋ฅผ ์คํ ํ ์ ์๋ ์ํํธ์จ์ด๋ฅผ ์น์ปจํ ์ด๋ ๋๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ธ๋ฆฟ์ด ๋ญ์ฃ ?
Server + let (์น ์๋ฒ์์ ์คํ๋๋ ์์ ํ๋ก๊ทธ๋จ)
์๋ฐ์์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด ๋์ ์ผ๋ก ์๋ํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ์ด๋ค. ์ข ๋ ์ฝ๊ฒ๋งํ๋ฉด ์๋ฐ์์ ์น ํ๋ก๊ทธ๋๋ฐ์ ์ํด ์ ๊ณตํ๋ Servlet Class ๊ตฌํ ๊ท์น์ ์งํจ ์๋ฐ ์ฑ์ ๋งํ๋ค.
- html์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์๋ตํ๋ค.
- Java Thread๋ฅผ ์ด์ฉํ์ฌ ๋์ํ๋ค.
- MVC ํจํด์์ Controller๋ก ์ด์ฉ๋๋ค.
- HTTP ํ๋กํ ์ฝ ์๋น์ค๋ฅผ ์ง์ํ๋ javax.servlet.http.HttpServlet ํด๋์ค๋ฅผ ์์๋ฐ๋๋ค.
- UDP๋ณด๋ค ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ๋ค.
- HTML ๋ณ๊ฒฝ ์ Servlet์ ์ฌ์ปดํ์ผํด์ผ ํ๋ ๋จ์ ์ด ์๋ค.
์ด๋ฌํ ์๋ธ๋ฆฟ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ธ๋ฆฟ ํ๋ก๊ทธ๋จ์ ์์ฒญ์ ๋ฐ๋ผ ์ค๋ ๋๋ฅผ ์์ฑํด์ฃผ๋ ์ํํธ์จ์ด๋ฅผ ์น ์ปจํ ์ด๋๋ผ๊ณ ํ๋ค. ์น ์ปจํ ์ด๋์์๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ(Requset)๋ฅผ ๋ฐ์ ์น ์๋ฒ์ ํต์ ํ๊ณ , ์์ฒญ์ ํ์ํ ์๋ธ๋ฆฟ์ ์ด์ฉํด ๊ฒฐ๊ณผ(Response)๋ฅผ ๋ฐํ๋ฐ์ ๋ค์ ์น ์๋ฒ์ ์ ๋ฌํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํด์ค๋ค.
[์น ์๋ฒ]์ [์น ์ปจํ ์ด๋]๋ฅผ ํฉ์ณ์ WAS๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ผ์ข ์ ๋ฏธ๋ค์จ์ด๋ก์ ์น ์๋ฒ ๋จ๋ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ DB์ ๊ทผ์ด๋ ๋ณต์กํ ๋ก์ง์ด ํฌํจ๋ ๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํ๋ค. ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ ๋ค์ํ ์ฒ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ํด๋ผ์ด์ธํธ(์ฌ์ฉ์) → Web Server → DB
- ํด๋ผ์ด์ธํธ(์ฌ์ฉ์) → WAS → DB
- ํด๋ผ์ด์ธํธ(์ฌ์ฉ์) → Web Server → WAS → DB
# ์น ์ปจํ ์ด๋ (์๋ธ๋ฆฟ ์ปจํ ์ด๋)
์น ์ปจํ ์ด๋๋ ๊ธฐ์กด์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์๋ฒ Socket์ ๋ง๋ค๊ณ , ํฌํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋คํธ์ํฌ ์คํธ๋ฆผ์ ์์ฑํ๋ ๋ณต์กํ ์์ ์ ๋์ ๋งก์์ ์ฒ๋ฆฌํด์ฃผ๋ ์ํํธ์จ์ด์ด๋ค. ์น ์ปจํ ์ด๋๋จ์์ ํต์ API๋ฅผ ์ฌ์ฉํด ์น ์๋ฒ์ ์ฐ๊ฒฐ์์ผ์ฃผ๋ฏ๋ก ๊ฐ๋ฐ์๋ ์๋ธ๋ฆฟ์ ๊ตฌํํ ๋น์ฆ๋์ค ๋ก์ง ์ฝ๋๋ง ์์ฑํ๋ฉด ๋๋ค.
- ์น ์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ Servlet ์์ฒญ์ ๋ฐ๋๋ค.
- Container๋ ์๋ธ๋ฆฟ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ต๊ฐ์ฒด (HttpServletRequest, HttpServletResponse)๋ฅผ ์์ฑํ๋ค.
Container๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ url์ ๋ถ์ํ์ฌ ์ด๋ค ์๋ธ๋ฆฟ ์์ฒญ์ธ์ง ํ๋จํ๊ณ web.xml(๋ฐฐํฌ์ ๋ณด)๋ฅผ ์ฐธ์กฐํ์ฌ ํด๋น ์๋ธ๋ฆฟ ์ค๋ ๋๋ฅผ ์์ฑ ํ ๋ง๋ค์ด์ง Response, Requset ๊ฐ์ฒด๋ฅผ ์ค๋ ๋์ ์ ๋ฌํ๋ค. - Container๋ ์ค๋ ๋์ ๊ฐ์ฒด ์์ฑ์ด ์๋ฃ๋๋ฉด Servlet์ .service() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ํธ์ถ๋ Servlet์ ์ค๋ ๋์ ์์ฒญ์ ๋ฐ๋ผ doGet() ์ด๋ doPost()๋ฅผ ํธ์ถํ๋ค. (๊ธฐ๋ณธ๊ฐ์ doGet()์ผ๋ก ๊ฐ์ฃผ)
- ํธ์ถ๋ doGet() doPost() ๋ฉ์๋๋ ๋์ ํ์ด์ง ์์ฑํ๊ณ Response ๊ฐ์ฒด์ ์ค์ด Container์ ๋ฐํํ๋ค.
- Conainer๋ ์ ๋ฌ๋ฐ์ Response ๊ฐ์ฒด๋ฅผ HttpResponseํํ๋ก ์ ํํ์ฌ ์น ์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค. ์์ ์ด ์๋ฃ๋๋ฉดํด๋น ์ค๋ ๋๋ฅผ ์ข ๋ฃํ๊ณ ํ์์์ด์ง ์์ฒญ ๋ฐ ์๋ต ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํจ๋ค.
// ์๋ธ๋ฆฟ ์ฝ๋ ์์
package myServletTest;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/myServlet/*")
public class MyServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
String msg = "default";
// The servlet is initialized by calling the init() method.
public void init() throws ServletException {
msg = "init ๋ฉ์๋ Call";
}
// The servlet calls service() method to process a client's request.
// service () ๋ฉ์๋๋ HTTP ์์ฒญ ์ ํ (GET, POST, PUT, DELETE ๋ฑ)์ ํ์ธํ๊ณ
// ์ ์ ํ๊ฒ doGet, doPost, doPut, doDelete ๋ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถ
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
String text = "Service ๋ฉ์๋ Call";
if(!"default".equals(msg)){
text = msg +"<br>"+text;
msg = "default";
}
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(text);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String text = "doGet ๋ฉ์๋ Call";
commonMethod(text, response);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String text = "doPost ๋ฉ์๋ Call";
commonMethod(text, response);
}
// The servlet is terminated by calling the destroy() method.
@Override
public void destroy() {
// Finalization code...
System.out.println("destroy method call");
}
private void commonMethod(String text, HttpServletResponse response)
throws ServletException, IOException{
if(!"default".equals(msg)){
text = msg +"<br>"+text;
msg = "default";
}
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(text);
}
}
# Servlet์ ์๋ช ์ฃผ๊ธฐ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ปจํ ์ด๋๋ ํด๋น ์๋ธ๋ฆฟ์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ํ์ธํ๊ณ , ์์ ๊ฒฝ์ฐ init() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ค. init() ๋ฉ์๋๋ ์ฒ์ ํ๋ฒ๋ง ์คํ๋๋ค.
- ์คํ๋์ค ํด๋น ์๋ธ๋ฆฟ์ด ๋ณ๊ฒฝ ๋ ๊ฒฝ์ฐ, ๊ธฐ์กด ์๋ธ๋ฆฟ์ ์๋ฉธ์ํค๊ณ init() ๋ฉ์๋๋ฅผ ๋ค์ ํธ์ถํ์ฌ ์๋ก์ด ๋ด์ฉ์ ๋ด์ ์๋ธ๋ฆฟ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ์ปจํ ์ด๋๋ ํด๋น ์๋ธ๋ฆฟ์ sevice() ๋ฉ์๋๋ฅผ ์คํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ธ๋ฆฟ์๊ฒ HttpServletRequest, HttpServletResponse ๋ฅผ ํตํด ์๋ต ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค.
- ์์ ์ ๋ง์น๋ฉด ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ์ destroy() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. init() ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ฒ๋ง ์คํ๋๋ฉฐ ์ข ๋ฃ์์ ์ฒ๋ฆฌํด์ผํ๋ ์์ ๋ค์ ํด๋น ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ค.
# JSP (Java Server Pages)
Java ์ฝ๋๊ฐ ๋ค์ด๊ฐ์๋ ์น (HTML) ์ฝ๋๋ฅผ ์๋ฏธํ๋ค.
๊ธฐ์กด์๋ ์นํ์ด์ง๋ฅผ '๊ฐ๋ฐ์'๊ฐ ๋ง๋ค์๋๋ฐ, ์ ์ ์นํ์ด์ง๊ฐ ๋ณต์กํด์ง๊ณ ๊ณ ๋ํ๋๋ฉฐ ๊ฐ๋ฐ์์ ๋์์ด๋๊ฐ ๋ถ์ ํ ๋๊ธฐ ์์ํ๋ค. ๊ธฐ์กด์ ์๋ธ๋ฆฟ ๋ฐฉ์์ ์ ๋ถ ์๋ฐ์ฝ๋๋ก HTML์ด ์ ์ก๋๊ธฐ ๋๋ฌธ์ ๋์์ด๋๊ฐ ์์ ํ๊ธฐ ์ด๋ ค์ ๋๋ฐ, ์ด๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ ๋ฑ์ฅํ ๊ฐ๋ ์ด JSP์ด๋ค.
์๋ธ๋ฆฟ์ด ์๋ฐ ์์ค ์ฝ๋์์ HTML ์ฝ๋๋ฅผ ๋ฃ์ด ์์ฑํ๋ค๋ฉด, JSP๋ ์ด์ ๋ฐ๋๋ก HTML์ ์๋ฐ ์ฝ๋๋ฅผ ๋ฃ๋ ๊ตฌ์กฐ์ด๋ค. ์ฝ๊ฒ๋งํด ๋จ์ํ HTML ์ฝ๋์ <% ์์ค์ฝ๋ %> , <%=์์ค์ฝ๋=%> ์ ๊ฐ์ ํํ๋ก ์๋ฐ์ฝ๋๋ฅผ ์ฝ์ ํ ๊ฒ ๋ฟ์ด๋ค.
< JSP ํ์>
์ง์์ด : <%@ ... %>
์ ์ธ : <%! ... %>
์(ํํ) : <%= ... %>
scriplet : <% ... %>
์ก์
ํ๊ทธ : <jsp: ... />
<%@page import="java.util.Date"%>
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Test</title>
</head>
<body>
jsp ์ฐ์ต
<script type="text/javascript">
var a = 10; // ๊ธฐ์กด์ HTML script ํ๊ทธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ.(Js์ฝ๋)
document.write("a:", a);
</script>
<%
int b = 10; // JSP ๋ฐฉ์ (Java์ฝ๋)
out.println("b:" + b);
%>
<%
int a = 0, sum = 0; // ์ง์ญ ๋ณ์ ์ ์ธ
do{
a++;
sum += a;
}while(a <10);
out.println("ํฉ์" + sum);
%>
<br>
<%= "ํฉ์ " +sum %>
<%= ir + "๋์ ์ ํ๋ฒํธ:" + tel %>
<%! String tel = "111-1111"; %> <!-- ํด๋์ค์ ๋ฉค๋ฒ ํ๋ ์ ์ธ (=์ ์ญ ์ ๊ทผ) -->
<%!
public int add(int m, int n) { // ํด๋์ค์ ๋ฉค๋ฒ ๋ฉ์๋ ์ ์ธ
return m + n;
}
%>
<br>
<% out.println(add(10,20)); %>
<br>
<%= add(100, 200) %>
</body>
</html>
HTML ๋ด๋ถ์ ์ฝ์ ๋์ด์ง ์๋ฐ์ฝ๋๋ WAS์ ์ํด ์๋ธ๋ฆฟ ํด๋์ค๋ก ๋ณํ๋์ด ์ฌ์ฉ๋์ด์ง๋ค. ์ฆ JSP์ ์์ฑ๋ Java ์ฝ๋์์ฒด๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด์ง๋ ๊ฒ์ด ์๋๋ผ ์น ์ปจํ ์ด๋์์ ํด๋น Java ์ฝ๋๋ฅผ ์๋ธ๋ฆฟ์ผ๋ก ์ปดํ์ผํ์ฌ (ํน์ ์ด๋ฏธ ์ปดํ์ผ ๋ ์๋ธ๋ฆฟ์ ๋ก๋ํ์ฌ) HTML์ ์์ฑํ๋ค.
์๋ ์๋น์ค ๋์์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋ธ๋ฆฟ ํด๋์ค๋ฅผ ์์ ํ๊ณ ์๋ฐ์ฝ๋๋ฅผ ๋ค์ ์ปดํ์ผ ํด์ผ ํ์ง๋ง JSP๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง๋ค์ด์ง [JSP ํ์ด์ง]๋ฅผ ์๋ฒ ๋๋ ํ ๋ฆฌ์ ์ถ๊ฐ์ํค๊ธฐ๋ง ํ๋ฉด WAS์์ ํด๋น Java ์ฝ๋๋ฅผ ์๋ธ๋ฆฟ(.class)์ผ๋ก ๋ง๋ค์ด์ค๋ค. ์ฆ ์น ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ ๋ง ์ฝ๊ฒ ๋ณ๊ฒฝ ํ ์ ์๊ฒ ๋ฐ๋์๋ค. ๋ํ ์ฒ์์๋ ์ธ๊ธํ์ง๋ง, JSP๋ฅผ ์ฌ์ฉํจ์ผ๋ก์ ๋์์ด๋์ ๊ฐ๋ฐ์์ ์์ญ์ ๋ถ๋ฆฌ์ํฌ ์ ์๋ ์ฅ์ ๋ ์๋ค.
# Tomcat (์ํ์น WAS)
์ํ์น ์ฌ๋จ์ ์น ์ปจํ ์ด๋. JSP์ ์๋ฐ Servlet์ ์น ์๋ฒ์ ์ฐ๋ํ์ฌ ์คํ ํ ์ ์๋ ์๋ฐ ๋ฐํ์ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
ํฐ์บฃ์ ์น ์๋ฒ(HTTP ์๋ฒ)๋ฅผ ๋ด์ฅํ๊ณ ์๊ณ , ์ฌ์ฉํ๊ธฐ ์ํด์ ์๋ฐ ํ๊ฒฝ(JRE 1.1 ์ด์ ์ค์น)๋ฅผ ํ์๋ก ํ๋ค.
Apache ์น์๋ฒ์ ํฐ์บฃ์ ์ฐจ์ด์ ์ ๋ญ์ฃ ?
์ํ์น(apache) ์น์๋ฒ
์ํ์น ์ฌ๋จ์์ ๋ง๋ HTTP ์น ์๋ฒ๋ก ๊ตฌ์ถ์ด ์ฝ๊ณ ์ค์๊ธฐ์ ๋ค์๊ฒ ๋ฌด๋ฃ๋ก ์ ๊ณตํด์ฃผ์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
ํฐ์บฃ(Tomcat)
์์ฐจํผ ์ฌ๋จ์์ ๋ง๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ(WAS)๋ก ์๋ฐ ์๋ธ๋ฆฟ์ ์คํ์ํค๊ณ JSP ์ฝ๋๊ฐ ํฌํจ๋์ด ์๋ ์น ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ค๋ค. WAS ๋ด๋ถ์ ์น ์๋ฒ๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์น ์๋ฒ์์ ๋์ด์จ ๋์ ์ธ ํ์ด์ง๋ฅผ ์ฝ์ด ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HTML๋ก ๋ง๋ค์ด ์ํ์น ์น ์๋ฒ์ ๋๋ ค์ค๋ค.
'๐ฑBackend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#15 JSP ์ฟ ํค์ ์ธ์ (0) | 2021.07.16 |
---|---|
#14. JSP์ ์น ํ๋ก๊ทธ๋๋ฐ (0) | 2021.07.16 |
#12. Optional API (Null๊ฐ ์ฒ๋ฆฌ) (0) | 2021.07.12 |
#11 Stream API (0) | 2021.07.12 |
#10 Modern Java (Java8~) (0) | 2021.07.12 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev