퀴즈 피드백
: 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 있는지 확인
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";
}
@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-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>