Spring

[Spring] @Controller ๊ธฐ์ดˆ ๋ฐ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ํ•˜๊ธฐ

developer of the night sky 2023. 11. 25. 09:45

๐Ÿ”ปController

  • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋ฐ ์š”์ฒญ์„ ๋ฐ›์•„ ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ฃผ์š”ํ•œ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋“ค ๊ฐ„์— ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.

 

๐Ÿ”ปController ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

1. Controller ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

2. @Controller ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ > ํŽธ์˜์„ฑ, ๊ฐ„๊ฒฐํ•˜๋‹ค

 

1. Controller ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

package com.test.spring.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class Ex03Controller implements Controller{
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		return null;
	}
}

 

 

2. @Controller ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ

package com.test.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value="/ex03.do")	//@WebServlet("/ex03.do")์™€ ๋™์ผํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.
public class Ex03Controller {
	
	@RequestMapping
	public String test() {
		//์—…๋ฌด ์ฝ”๋“œ
		return "ex03";
	}
	
	//์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ
	public int sum(int a, int b) {
		return a + b;
	}
}

 

 

@Controller์„ ์‚ฌ์šฉํ•˜๋ฉด 'implements Controller'๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„๋œ๋‹ค.

 

์—…๋ฌด ์ฝ”๋“œ ๋‹ค์Œ JSP ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ModelAndView๋ฅผ ์„ ์–ธํ•˜์˜€๋Š”๋ฐ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ModelAndView ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ViewResolver ๊ฐ€ ๋™์ž‘๋œ๋‹ค. ๊ทธ๋ž˜์„œ return ๋ฌธ์— ๊ฐ€์ƒ์ฃผ์†Œ ๋งŒ ์ ์–ด๋„ ex03.jsp ํŒŒ์ผ๋กœ ์ด๋™๋œ๋‹ค.

 

ํ•ธ๋“ค๋Ÿฌ(์š”์ฒญ ๋ฉ”์„œ๋“œ) ๋ฉ”์„œ๋“œ๋Š” ์ตœ์†Œํ•œ์˜ ์•ฝ์†์œผ๋กœ @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ๋‹ค. Controller ํด๋ž˜์Šค์•ˆ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์–ด @RequestMapping ์œผ๋กœ ํด๋ž˜์Šค ํ˜ธ์ถœ ์‹œ ์‹คํ–‰ํ•  ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ณ„ํ•œ๋‹ค.

 

package com.test.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class Ex04Controller {
	@RequestMapping(value="/ex04.do")
	public String ex04() {
		
		return "ex04";
	}
	
	@RequestMapping("/ex04_1.do")
	public String ex04_1() {
		
		return "ex04_1";
	}
}

 

์ปจํŠธ๋กค๋Ÿฌ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ€์ƒ ์ฃผ์†Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ ์•ˆ์—์„œ ๋ฉ”์„œ๋“œ์˜ @RequestMapping์—๊ฒŒ ์ฃผ์†Œ๋ฅผ ์ฃผ์–ด ์‚ฌ์šฉํ•œ๋‹ค.

์œ„ ์Šคํƒ€์ผ์—์„œ ์ปจํŠธ๋กค๋Ÿฌ ์ „์ฒด์— @RequestMapping๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฉ”์„œ๋“œ์—๊ฒŒ ๋ถ™์ด๋Š” ๊ฒƒ์ด ๋ณดํŽธ์ ์ธ ์Šคํƒ€์ผ์ด๋ฉฐ value ์†์„ฑ์€ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋ ‡๊ฒŒ @Controller ์‚ฌ์šฉํ•˜๋ฉด jsp๋งŒ ํ˜ธ์ถœํ•˜๋Š” ์šฉ๋„์˜ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐฏ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 


๐Ÿ”ป@Controller์˜ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  

 

1. req, resq, @PostMapping

    @PostMapping(value="/ex05ok.do")
	public String ex05ok(HttpServletRequest req, HttpServletResponse resp) {
		
		//๋ฐ์ดํ„ฐ ์ˆ˜์‹ 
		// Servlet&JSP : req.getParameter(), req.getParameterValues()
		// req๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด HttpServletRequest ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ค€๋‹ค.
		
		System.out.println(req == null);
		System.out.println(resp == null);
		System.out.println();
		
		String data = req.getParameter("data");
		req.setAttribute("data", data);
		
		return "ex05ok";
	}

 

Servlet&JSP ์—์„œ๋Š” req.getParameter(), req.getParameterValues()๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ–ˆ๋‹ค. Controller์—์„œ๋Š” HttpServletRequest, HttpServletResponse๊ฐ€ ์„ ์–ธ์ด ๋˜์–ด ์žˆ์ง€์•Š์•„ ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

๋˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Post ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ–ˆ์„ ๋•Œ @PostMapping ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ตํ•œ๋‹ค. 

 

 

2. @RequestParam, Model

	@PostMapping(value="/ex05ok.do")
	//<div><input type="text" name="data"></div> ์˜ name๊ณผ ์—ฐ๊ฒฐ
	public String ex05ok(@RequestParam(name = "data") String data, Model model) {
		
		//req.setAttribute("data", data) ์™€ ๋™์ผ
		model.addAttribute("data", data);
		
		return "ex05ok";
	}

 

@RequestParam HTTP ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.
์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„๊ณผ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๋™์ผํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜๋ฉฐ, ์ด๋ฆ„์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ์— ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ JSP์˜ ํ…์ŠคํŠธ๋ฐ•์Šค name="data"๋ฅผ @RequestParam(name = "data")๋กœ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ String data์— ๋‹ด์•˜๋‹ค.

๋˜ํ•œ ์•ž์„œ ๋ฐฐ์šด ModelAndView์˜ Model ๊ฐ์ฒด์€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.  model ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ data ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ƒˆ๋‹ค.

 

	@PostMapping(value="/ex05ok.do")
	public String ex05ok(String data, Model model) {
		model.addAttribute("data", data);
		return "ex05ok";
	}

 

ํ…์ŠคํŠธ ๋ฐ•์Šค name๊ณผ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๊ฐ™๋‹ค๋ฉด @RequestParam  ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

3. ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ์ˆ˜์‹ 

	@PostMapping(value="/ex05ok.do")
	public String ex05ok(@RequestParam("name") String name, @RequestParam("age") String age, @RequestParam("address") String address, Model model) {
		
		SpringDTO dto = new SpringDTO();
		dto.setName(name);
		dto.setAddress(address);
		dto.setAge(age);
		
		SpringDAO dao = new SpringDAOImpl();
		
		int result = dao.add(dto);
		
		model.addAttribute("result", result);
		
		return "ex05ok";
	}

 

์„ธ ๊ฐœ์˜ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ(name, age, address)๋ฅผ ๋ฐ›์•„์™€์„œ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ DTO์— ๋‹ด์•„ DAO๋กœ DB ์ž‘์—…์„ ํ•œ๋‹ค. ์„ฑ๊ณต์—ฌ๋ถ€๋ฅผ result์— ๋‹ด์•„ model๋กœ ์ „์†กํ–ˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ์˜ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ๋ฐฉ๋ฒ•์ด๋‹ค.

 

	@PostMapping(value="/ex05ok.do")
	public String ex05ok(SpringDTO dto, String seq, Model model) {
		
		SpringDAO dao = new SpringDAOImpl();
		
		int result = dao.add(dto);
		
		System.out.println(seq);
		
		model.addAttribute("result", result);
		
		return "ex05ok";
	}

 

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ DTO์— ์žˆ์„ ๋•Œ, dto๋กœ ์ˆ˜์‹  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ DTO์— ์—†๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ(seq)๋ผ๋ฉด ๋”ฐ๋กœ ๊ธฐ์žฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

4. ๋‹ค์ค‘๊ฐ’ ์ˆ˜์‹ 

โ‘  Model , HttpServletRequest

	@PostMapping(value="/ex05ok.do")
	public String ex05ok(Model model, HttpServletRequest req) {
		
		String[] cb = req.getParameterValues("cb");
		
		System.out.println(Arrays.toString(cb));
		
		return "ex05ok";
	}

 

์ฒดํฌ๋ฐ•์Šค์ฒ˜๋Ÿผ ๋‹ค์ค‘๊ฐ’์„ ์ˆ˜์‹ ๋ฐ›์„ ๋•Œ๋„ ์žˆ๋‹ค.

์ด๋ฒˆ์—๋Š” Model ๊ฐ์ฒด์™€ HttpServletRequest ๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค. 

HttpServletRequest์˜ getParameterValues ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒดํฌ๋ฐ•์Šค์˜ ๊ฐ’๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฐ›์•„์˜จ๋‹ค.
(์—ฌ๊ธฐ์„œ "cb"๋Š” HTML ํผ์—์„œ ์ฒดํฌ๋ฐ•์Šค์˜ name ์†์„ฑ ๊ฐ’์ด๋‹ค.)

 

 

โ‘ก Model, @RequestParam

	@PostMapping(value="/ex05ok.do")
	public String ex05ok(Model model, @RequestParam("cb") String[] cb) {
		
		System.out.println(Arrays.toString(cb));
		
		return "ex05ok";
	}

 

@RequestParam ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ค‘์—์„œ "cb"๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š”๋ฐ, ์ด ๊ฐ’์€ ๋ฌธ์ž์—ด ๋ฐฐ์—ด(String[])๋กœ ๋งคํ•‘์„ ํ•ด์ค€๋‹ค.

์œ„ HttpServletRequest ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

โ‘ข @ModelAttribute

	@PostMapping(value="/ex05ok.do")
	public String ex05ok(@ModelAttribute(name="data") String data) {
		
		return "ex05ok";
	}

 


๊ฒŒ์‹œํŒ ์˜ˆ์ œ

ํŒŒ์ผ ์ƒ์„ฑ

ํŒจ์ง€ํ‚ค๋ช… ํŒŒ์ผ๋ช… ์—ญํ• 
com.test.spring.controller    
  BoardController.java  
view/board    
  listjsp ๊ฒŒ์‹œํŒ ๋ชฉ๋ก ์กฐํšŒ
  add.jsp ๊ฒŒ์‹œ๋ฌผ ์ถ”๊ฐ€
  addok.jsp ๊ฒŒ์‹œ๋ฌผ ์ถ”๊ฐ€ ๊ฒฐ๊ณผ
  view.jsp ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ธ๋ณด๊ธฐ

 


BoardController.java

package com.test.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class BoardController {

	//doGet() ์—ญํ• 
	@RequestMapping(value="/board/list.do", method=RequestMethod.GET)
	public String list() {
		// ๊ฒฝ๋กœ : "WEB-INF/views/board/list.jsp"
		return "board/list";
	}
	
	//doGet() ์—ญํ• 
	@RequestMapping(value="/board/add.do" , method=RequestMethod.GET)
	public String add() {
		return "board/add";
	}
	
	//doPost() ์—ญํ• 
	@RequestMapping(value="/board/addok.do", method=RequestMethod.POST)
	public String addok() {
		return "board/addok";
	}
	
	//doGet() ์—ญํ• 
	@RequestMapping(value="/board/view.do", method=RequestMethod.GET)
	public String view() {
		return "board/view";
	}
	
}

 

 

@RequestMapping - value

 

@RequestMapping ์†์„ฑ value์—๋Š” ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ ์–ด๋‘๋Š”๋ฐ ์œ„์น˜์— ๋”ฐ๋ผ ๊ฒฝ๋กœ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ ์„ ์ˆ˜ ์žˆ๋‹ค.

์ค‘์ฒฉ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด ํด๋ž˜์Šค ์ƒ๋‹จ์— ์„ ์–ธํ•ด์ฃผ๊ณ  ๋‚˜๋จธ์ง€ ๊ฒฝ๋กœ๋ฅผ ๋ฉ”์†Œ๋“œ ์œ„์— ์„ ์–ธํ•œ๋‹ค. ์ด๋Ÿฌ๋ฉด ์ค‘์ฒฉ๋˜๋Š” ๊ฒฝ๋กœ๋Š” ํ•œ๋ฒˆ๋งŒ ์ ์œผ๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„์ด ์•„๋‹Œ ๋ณธ์ธ ์Šคํƒ€์ผ์— ๋งž์ถฐ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

package com.test.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping(value="/board")
public class BoardController {
	
	//doGet() ์—ญํ• 
	@RequestMapping(value="/list.do", method={RequestMethod.GET, RequestMethod.POST})
	public String list() {
		return "board/list";
	}
	
	//doGet() ์—ญํ• 
	@RequestMapping(value="/add.do" , method=RequestMethod.GET)
	public String add() {
		return "board/add";
	}
	
	//doPost() ์—ญํ• 
	@RequestMapping(value="/addok.do", method=RequestMethod.POST)
	public String addok() {
		return "board/addok";
	}
	
	//doGet() ์—ญํ• 
	@RequestMapping(value="/view.do", method=RequestMethod.GET)
	public String view() {
		return "board/view";
	}
}

 

 

 

@RequestMapping - RequsetMethod.XXX

 

๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹์ธ GET, POST ์„ @RequestMapping์˜ ์†์„ฑ์ธ RequsetMethod.XXX์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.

๋งŒ์•ฝ ์š”์ฒญ ๋ฐฉ์‹์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ–ˆ๋‹ค๋ฉด, 405์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

@RequestMapping(value="/board/list.do", method={RequestMethod.GET, RequestMethod.POST})

GET, POST ๋ฐฉ์‹ ๋‘˜ ๋‹ค ๋ฐ›์•„์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋ฐฐ์—ด๋กœ GET, POST ๋ฐฉ์‹ ๋‘˜ ๋‹ค ์ „๋‹ฌ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

addok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://me2.do/5BvBFJ57">
</head>
<body>
	<!-- addok.jsp  -->
	<script src="https://code.jquery.com/jquery-1.12.4.js" ></script>
	
	<script>
		alert('๊ธ€์“ฐ๊ธฐ ์™„๋ฃŒ');
		location.href='/spring/board/list.do';
	</script>
</body>
</html>

 

 

ํŽ˜์ด์ง€ ์ด๋™์€ location.href๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋™ํ•œ๋‹ค.  ๊ฒฝ๋กœ๋Š” Servlet&JSP ๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ 'contextroot/ํด๋”๋ช…/๊ฐ€์ƒ์ฃผ์†Œ'๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ด์™ธ ํŒŒ์ผ์€ Servlet&JSP ๋•Œ์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ฏ€๋กœ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค.