03. Spring Basic

농담곰·2023년 6월 19일

Spring

목록 보기
3/3

1. home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>home.jsp</title>
</head>
<body>
	<div class="container">
		<h1>인덱스 페이지 입니다</h1>
		<ul>             <!--          Spring01/        -->
			<li><a href="${pageContext.request.contextPath }/member/insertform">파라미터 추출테스트 </a></li>
			<li><a href="${pageContext.request.contextPath }/fortune">오늘의 운세보기 1</a></li>
			<li><a href="${pageContext.request.contextPath }/fortune2">오늘의 운세보기 2</a></li>
			<li><a href="${pageContext.request.contextPath }/fortune3">오늘의 운세보기 3</a></li>
			<li><a href="${pageContext.request.contextPath }/member/delete?num=1">작업후 리다일렉트 응답받기1</a></li>
			<li><a href="${pageContext.request.contextPath }/member/delete?num=2">작업후 리다일렉트 응답받기2</a></li>
			<li><a href="${pageContext.request.contextPath }/test/json1">JSON 응답받기1</a></li>
			<li><a href="${pageContext.request.contextPath }/test/json2">JSON 응답받기2</a></li>
			<li><a href="${pageContext.request.contextPath }/test/json3">JSON 응답받기3</a></li>
			<li><a href="${pageContext.request.contextPath }/test/json4">JSON 응답받기4</a></li>
			<li><a href="${pageContext.request.contextPath }/test/json5">JSON 응답받기5</a></li>
			<li><a href="${pageContext.request.contextPath }/test/json6">JSON 응답받기6</a></li>
		</ul>
		<h2>공지사항</h2>
		<ul>
			<c:forEach var="tmp" items="${requestScope.noticeList }">
				 <li>${tmp }</li>
			</c:forEach>
		</ul>
	</div>
</body>
</html>

  • JSTL 사용을 위해 정의를 선언
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  • ${pageContext.request.contextPath } 은 웹에서 상대적인 경로를 나타낸다.

2. Controller

2-1. HomeController

package com.gura.step01;


import java.util.List;
import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;

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

@Controller
public class HomeController {
	
	//이 프로젝트의 최상위 경로 요청이 오면
	@RequestMapping("/")
	public String home(HttpServletRequest request) {
		List<String> noticeList = new ArrayList<String>();
		noticeList.add("공지사항 1번");
		noticeList.add("공지사항 2번");
		noticeList.add("공지사항 2번");
		
	    request.setAttribute("noticeList", noticeList);

		return "home";
	}
	
	
}
  • @Controller 라는 Annotation 사용하여 해당 클래스가 Controller의 역할을 한다고 명시
  • home.jsp 페이지에서 필요한 모델 (data)를 HttpServletRequest 객체에 담아두기
  • view page 에 전달할 Model(data) 을 request 영역에 담기
return "home";
  • WEB-INF/views/home.jsp 페이지로 forward 이동해서 응답하겠다는 의미
  • "home" 이라는 문자열을 리턴하면 앞에 "/WEB-INF/views/" 뒤에 ".jsp" 가 자동으로 붙는다

2-2. FortuneController

package com.gura.step01;

import javax.servlet.http.HttpServletRequest;

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

@Controller
public class FortuneController {
	@RequestMapping("/fortune")
	public String fortune(HttpServletRequest request) {
		//오늘의 운세
		String fortune="오늘 운세는 최고네요";
		
		//request scope에 응답에  필요한 데이터를 담는다
		request.setAttribute("fortuneToday",fortune);
		
		// /WEB-INF/views/fortune.jsp 페이지로 forward 이동해서 응답하기
		return "fortune";
	}
	
	@RequestMapping("/fortune2")
	public ModelAndView fortune2() {
		//오늘의 운세
		String fortuneToday="오늘 운세는 보통이네요";
		
		//HttpServletRequest 객체 대신에 ModelAndView 객체를 생성해서 
		ModelAndView mView =new ModelAndView();
		//view page에 전달할 내용을 담는다
		mView.addObject("fortuneToday", fortuneToday);
		//view page 의 위치도 담는다
		mView.setViewName("fortune");
		//모델과 view page의 정보가 모두 담겨있는 ModelAndView 객체를 리턴해주면 똑같이 동작한다
		return mView;
	}
	
	//ModelAndView 를 매개 변수로 선언하면 스프링 프레임워크가 알아서 객체 생성후 참조값을 넣어준다
	@RequestMapping("/fortune3")
	public ModelAndView fortune3(ModelAndView mView) {
		//오늘의 운세
		String fortuneToday="오늘 운세는 안좋아요";
		
		//view page에 전달할 내용을 담는다
		mView.addObject("fortuneToday", fortuneToday);
		//view page 의 위치도 담는다
		mView.setViewName("fortune");
		//모델과 view page의 정보가 모두 담겨있는 ModelAndView 객체를 리턴해주면 똑같이 동작한다
		return mView;
	}
}

2-3. TestController

package com.gura.step01;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import com.gura.step01.member.MemberDto;


/*
 *  JSON 문자열 응답하는 방법
 *  
 *   1. pom.xml에 jac
 */


@Controller
public class TestController {
	
	//문자열을 응답하기 위한 annotation = @ResponseBody
	@ResponseBody
	@RequestMapping ("/test/json1")
	public String json1() {
		return "{\"num\" : 1 ,\"name\" : \"김구라\", \"addr\" : \"노량진\"}";
	}
	
	@ResponseBody
	@RequestMapping("/test/json2")
	public MemberDto json2() {
		//DB에서 읽어온 화원정보라고 가정하자
		MemberDto dto = new MemberDto();
		dto.setNum(2);
		dto.setName("해골");
		dto.setAddr("원숭이");
		
		return dto;
	}
	
	@ResponseBody
	@RequestMapping("/test/json3")
	public Map<String, Object> json3(){
		Map<String, Object> map = new HashMap<>();
		map.put("num", 1);
		map.put("writer", "김구라");
		map.put("isMan", true);
		return map;
	}
	
	@ResponseBody
	@RequestMapping("/test/json4")
	public List<String> json4(){
		List<String> names = new ArrayList<String>();
		names.add("김구라");
		names.add("해골");
		names.add("원숭이");
		return names;	
	}
	
	@ResponseBody
	@RequestMapping("/test/json5")
	public List<MemberDto> json5(){
		List<MemberDto> list = new ArrayList<>();
		list.add(new MemberDto(1, "김국라", "노량진"));
		list.add(new MemberDto(2, "해골", "노량진"));
		list.add(new MemberDto(3, "원숭이", "노량진"));
		return list;
	}
	
	@ResponseBody
	@RequestMapping("/test/json6")
	public List<Map<String,Object>> json6(){
		List<Map<String,Object>> list = new ArrayList<>();
		
		Map<String, Object> map1 = new HashMap<>();
		map1.put("num", 1);
		map1.put("name", "김구라");
		map1.put("addr", "노랭진");
		
		Map<String, Object> map2 = new HashMap<>();
		map2.put("num", 2);
		map2.put("name", "해골");
		map2.put("addr", "노랭진");
		
		Map<String, Object> map3 = new HashMap<>();
		map3.put("num", 3);
		map3.put("name", "원숭이");
		map3.put("addr", "노랭진");
		
		list.add(map1);
		list.add(map2);
		list.add(map3);
		
		return list;
	}
}

2-4. MemberController

package com.gura.step01;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import com.gura.step01.member.MemberDto;



@Controller
public class TestController {
	
	//문자열을 응답하기 위한 annotation = @ResponseBody
	@ResponseBody
	@RequestMapping ("/test/json1")
	public String json1() {
		return "{\"num\" : 1 ,\"name\" : \"김구라\", \"addr\" : \"노량진\"}";
	}
	
	@ResponseBody
	@RequestMapping("/test/json2")
	public MemberDto json2() {
		//DB에서 읽어온 화원정보라고 가정하자
		MemberDto dto = new MemberDto();
		dto.setNum(2);
		dto.setName("해골");
		dto.setAddr("원숭이");
		
		return dto;
	}
	
	@ResponseBody
	@RequestMapping("/test/json3")
	public Map<String, Object> json3(){
		Map<String, Object> map = new HashMap<>();
		map.put("num", 1);
		map.put("writer", "김구라");
		map.put("isMan", true);
		return map;
	}
	
	@ResponseBody
	@RequestMapping("/test/json4")
	public List<String> json4(){
		List<String> names = new ArrayList<String>();
		names.add("김구라");
		names.add("해골");
		names.add("원숭이");
		return names;	
	}
	
	@ResponseBody
	@RequestMapping("/test/json5")
	public List<MemberDto> json5(){
		List<MemberDto> list = new ArrayList<>();
		list.add(new MemberDto(1, "김국라", "노량진"));
		list.add(new MemberDto(2, "해골", "노량진"));
		list.add(new MemberDto(3, "원숭이", "노량진"));
		return list;
	}
	
	@ResponseBody
	@RequestMapping("/test/json6")
	public List<Map<String,Object>> json6(){
		List<Map<String,Object>> list = new ArrayList<>();
		
		Map<String, Object> map1 = new HashMap<>();
		map1.put("num", 1);
		map1.put("name", "김구라");
		map1.put("addr", "노랭진");
		
		Map<String, Object> map2 = new HashMap<>();
		map2.put("num", 2);
		map2.put("name", "해골");
		map2.put("addr", "노랭진");
		
		Map<String, Object> map3 = new HashMap<>();
		map3.put("num", 3);
		map3.put("name", "원숭이");
		map3.put("addr", "노랭진");
		
		list.add(map1);
		list.add(map2);
		list.add(map3);
		
		return list;
	}
}

0개의 댓글