Day 84

dokiru·2023년 5월 26일
0

학원

목록 보기
45/51

퀴즈 피드백

  • spring 초기 세팅할 때 폴더 구조 제대로 설정했는지 확인

: WEB-INF 아래에 lib, spring, views, web.xml
: spring 아래에 root-context.xml, appServlet
: appServlet 아래에 servlet-context.xml
: src/main/java안에 com.app.controller, com.app.dto 있는지 확인

  • 오타!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Controller

1. parameter값 받아오기

1-1. Request에서 가져오기 (getParameter)
ex. https://localhost:8080/case1?p1=A&p2=B&p3=C&p4=D&p4=E

@RequestMapping("case1")
	public String paramCase1(HttpServletRequest request) {
		// Request에서 추출
		
		System.out.println(request.getParameter("p1"));
		System.out.println(request.getParameter("p2"));
		System.out.println(request.getParameter("p3"));
		// 값 여러개 (ex. 여러개의 checkbox 같은 name)
		for (String s : request.getParameterValues("p4")) {
        //request.getParameterValues("p4")가 String[]를 리턴
			System.out.println("p4" + " " + s);
		}
		
		return "param_result";
	}

1-2. request에서 받는데, 키값과 할당해줄 변수 이름을 다르게 설정하는 경우 (@RequestParam)

@RequestParam("가져올 데이터의 이름") [데이터타입][가져온데이터를 담을 변수]

ex. https://localhost:8080/case2?ppp=A&kk=B&p3=C&p4=D&p4=E

@RequestMapping("case2")
	// 이 경로로 요청이 들어와서 매핑을 시켜줄때 p1의 이름으로 들어온 param이 있는지 확인하고 값 저장
	// @RequestParam(value="ppp") => ppp로 들어오면 그 값을 p1이라는 변수에 저장해서 사용을 하겠다
	public String paramCase2(@RequestParam(value="ppp") String p1, 
							 @RequestParam(value="kk") String p2,
							 @RequestParam String p3,
							 @RequestParam String[] p4) {
		// RequestParam으로 받기
		
		System.out.println(p1);
		System.out.println(p2);
		System.out.println(p3);
		
		for (String s : p4) {
			System.out.println(s);
		}
		
		
		return "param_result";
	}

+ 1-3. parameter값이 필수로 들어와야하는 값인지 (= required), 값이 안들어온 경우 기본값을 설정해줄 수 있는 속성 (= defaultValue)

@RequestMapping("case3")
	// not null같은.. false면 꼭 있지 않아도 됨
	public String paramCase3(@RequestParam(value="ppp", required = false ) String p1,
																		// 입력이 안되어 있을때의 기본값
							 @RequestParam(value="kk", required = false, defaultValue = "default" ) String p2 ) {
		// RequestParam으로 받기
		System.out.println(p1);
		System.out.println(p2);
		
		return "param_result";
	}
  • required가 true여도 defaultValue가 있으면 값을 넣어주지 않아도 예외가 발생하지 않음
@RequestMapping("case3")
	public String quizReq2(@RequestParam(name="item", required=true, defaultValue="아아아메") String p1,
						   @RequestParam(name="type") String p2) {
		System.out.println(p1);
		System.out.println(p2);
		return "NewFile";
	}

1-4. 요청이 들어온 URI에서 파라미터 값을 전달받는 경우 (@PathVariable)

@RequestMapping("case4/{path1}/{path2}") // URL Path URL경로 요청한 주소 경로							
	public String paramCase4(@PathVariable(name = "path1") String path1,
							 @PathVariable(name = "path2") String path2 ) {
		// PathVariable
		System.out.println("case4 요청 경로 PathVariable로 전달받음");
		
		System.out.println(path1);
		System.out.println(path2);
		// path1 어떤 테이블
		// path2 특정 식별자 where id = ? (path2)
		// path1의 테이블에서 id가 path2인 값만 불러오겠다!!는 식으로 활용 가능
		
		return "param_result";
	}

1-5. 여러개의 파라미터를 Map으로 받아오는 경우 (키값 - value)

@RequestMapping("case5")	
						// 여러개의 값을 가지는 경우
public String paramCase5(@RequestParam Map<String, String> map,
						 @RequestParam List<String> p3) {
		System.out.println("case5 파라미터 Map으로 전달받음");
		
		System.out.println(map.get("p1"));
		System.out.println(map.get("p2"));
		
		for (String s : p3) {
			System.out.println(s);
		}
		
		return "param_result";
	}

1-6. dto에 담아서 여러 파라미터값을 객체로 전달해주는 경우 (@ModelAttribute)

memberDto

package com.app.dto;

public class MemberDto {
	String id;
	String pw;
	String name;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "MemberDto [id=" + id + ", pw=" + pw + ", name=" + name + "]";
	}
}

controller에서의 활용

@RequestMapping("case6")
	// dto의 경우는 ModelAttribute라는 어노테이션 사용
	public String paramCase6(@ModelAttribute MemberDto memberDto) {
		// 파라미터 값이 여러개가 넘어오는 경우
		// ex. 회원 가입 - 아이디 이름 주소 전화번호 비밀번호..
	
		// memberDto라는 객체에 담아서 보내줌
		// 객체를 만들어서 넣는게 아니라 내가 가지고 있는 데이터를 파라미터 형태에 맞게 넣어주는 것..
		System.out.println(memberDto.toString()); // 객체 자체 toString() 불러서 그냥 출력
		// 키값이랑 memberDto의 필드 변수 값이랑 같으면 맞게 매칭해줌
		
		return "param_result";
	}

2. View로 데이터 전달하기

2-1. request에 값 담아서 전달하기

	@RequestMapping("return1")
	public String return1(HttpServletRequest request) {
		
		// request를 활용해서 화면으로 값 전달하기
		request.setAttribute("attr1", "전달하는 값 1");
		request.setAttribute("attr2", "전달하는 값2222");
		
		// 리턴은 뷰이름 (.jsp 파일이름)
		return "return_result";
	}
	

-> 뷰에서 활용 : return_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>return_result.jsp 페이지</h1>
	
	<p>${attr1}</p>
	<p>${attr2}</p>
</body>
</html>

2-2. Model에 데이터 저장해서 전달

@RequestMapping("return2")
	public String return2(Model model) {
		// 모델 활용해서 화면에 값 전달하기
        // request영역에 저장되어서 뷰 단에서 데이터 활용 가능
		
		model.addAttribute("m_attr1", "모델로 주입한 값 1");
		model.addAttribute("m_attr2", "모델로 주입한 값 2");
		
		// 리턴은 뷰이름 (.jsp 파일이름)
		return "return_result";
	}

-> 뷰에서 활용 : return_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>return_result.jsp 페이지</h1>
	
	<p>${m_attr1}</p>
	<p>${m_attr2}</p>
</body>
</html>

2-3. ModelAndView를 활용해서 아예 데이터를 담고 있는 view 자체를 넘겨주는 경우

@RequestMapping("return3")
	public ModelAndView return3() {
		ModelAndView mv = new ModelAndView();
		
        // 뷰의 경로를 정해줌
		mv.setViewName("return_result");
		
      	// model은 addAttribute, modelAndView는 addObject
		mv.addObject("mv_attr1", "모델앤드뷰에서 추가한 값!!");
		mv.addObject("mv_attr2", "모델앤드뷰에서 추가한 값222222222222222!!");
		
		return mv;
	}

-> 뷰에서 활용 : return_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>return_result.jsp 페이지</h1>
	
	<p>${mv_attr1}</p>
	<p>${mv_attr2}</p>
</body>
</html>

2-4. ModelAndView를 받아와서 값을 저장하고 뷰를 전달하는 경우

@RequestMapping("return5")
	public ModelAndView return5(ModelAndView mv) {
			
		mv.setViewName("return_result");
			
		mv.addObject("attr1", "모델앤드뷰에서 추가한 값~!~!~!~@1`!!");
		mv.addObject("attr2", "모델앤드뷰에서 추가한 값56896826!!");
			
		return mv;
	}

2-5. Dto에 데이터를 저장하고 그 객체를 model에 저장해서 뷰에 전달하는 경우

// memberDto 객체 활용
@RequestMapping("return6")
	public String return6(Model model) {
			
		MemberDto memberDto = new MemberDto();
			
		memberDto.setId("dto에 주입한 Id");
		memberDto.setPw("dto에 주입한 Pw");
		memberDto.setName("dto에 주입한 Name");
			
		// MemberDto 객체를 model에 저장
        // 화면 단에서 attribute의 키 값으로 데이터 접근 가능
		model.addAttribute("memberItem", memberDto);
			
		// 보여줄 view 이름 리턴
		return "member_info";
	}

-> 뷰에서 활용 : return_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>return_result.jsp 페이지</h1>
	
	<p>${memberItem.id}</p>
	<p>${memberItem.pw}</p>
    <p>${memberItem.name}</p>
</body>
</html>

2-6. request로 dto값이 들어온 경우
: @ModelAttribute를 통해 Model에 값 저장해서 뷰로 전달

// request로 들어올때..
// 객체는 넘어왔는데 model이 없음
@RequestMapping("return7")
	public String return7(@ModelAttribute("memberItem") MemberDto memberDto) {
		// model attribute 형태로 화면에 값 전달하기
        
		memberDto.setId("modelAttribute의 Id");
		memberDto.setPw("modelAttribute의 Pw");
		memberDto.setName("modelAttribute의 Name");
			
		return "member_info";
	}

-> 뷰에서 활용 : return_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>return_result.jsp 페이지</h1>
	
	<p>${memberItem.id}</p>
	<p>${memberItem.pw}</p>
    <p>${memberItem.name}</p>
</body>
</html>
profile
안녕하세요!

0개의 댓글