spring/spring
Step02_RequestParam
bono.html
2022. 8. 30. 21:01
@ 어노테이션을 많이 사용할 에정이다.
어노테이션에 대한 이해
- 어노테이션을 붙은 클래스는 그 모양 그대로 사용되지 않고 런타임시에 변형되어서 사용된다. 특정 클래스를 상속받기도 하고, 특정 인터페이스를 구현하기도 하고 없던 메소드가 만들어지기도 하고, 없던 필드가 추가 되기도 하는 등의 작업이 자동화 되어 있다.
RequestMethod
form으로 보낼 수 있는 방법은 post, get이 있으며
ajax를 활용하여 다른 방법도 있긴하다.
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>/views/home.jsp</title>
</head>
<body>
<div class="container">
<h1>인덱스 페이지 입니다.</h1>
<form action="${pageContext.request.contextPath }/send.do" method="post">
<input type="text" name="msg" placeholder="할말 입력..."/>
<button type="submit">전송</button>
</form>
<form action="${pageContext.request.contextPath }/send2.do" method="post">
<input type="text" name="msg" placeholder="할말 입력..."/>
<button type="submit">전송</button>
</form>
<h2>post 방식 요청</h2>
<form action="${pageContext.request.contextPath }/add.do" method="post">
<input type="text" name="content" placeholder="내용입력..."/>
<button type="submit">추가</button>
</form>
<h2>get 방식 요청</h2>
<form action="${pageContext.request.contextPath }/add.do" method="get">
<input type="text" name="content" placeholder="내용입력..."/>
<button type="submit">추가</button>
</form>
<ul>
<li><a href="${pageContext.request.contextPath }/member/insertform.do">회원 추가하러 가기</a></li>
</ul>
<h2>공지사항</h2>
<ul>
<c:forEach var="tmp" items="${requestScope.noticeList }">
<li>${tmp }</li>
</c:forEach>
</ul>
</div>
</body>
</html>
HomeController
package com.gura.step02;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/home.do")
public String home(HttpServletRequest request) {
// DB 에서 읽어온 공지사항 이라고 가정하자
List<String> noticeList=new ArrayList<>();
noticeList.add("Spring Framework 시작입니다.");
noticeList.add("화이팅!");
noticeList.add("어쩌구...");
noticeList.add("저쩌꾸...");
// view page 에 전달할 Model(data) 을 request 영역에 담기
request.setAttribute("noticeList", noticeList);
// /WEB-INF/views/home.jsp 페이지로 forward 이동해서 응답
return "home";
}
}
result.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>Insert title here</title>
</head>
<body>
<p>form 전송 잘 받았어 클라이언트야</p>
<a href="${pageContext.request.contextPath}/">인덱스로</a>
</body>
</html>
SendController
package com.gura.step02;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
// CONTROLLER 어노테이션을 import 해서 붙인다.
@Controller
public class SendController {
// post 방식 /add.do 요청을 처리할 메소드
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(String content) {
System.out.println("post 방식 요청 : "+content);
return "result";
}
// get 방식 /add.do
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add2(String content) {
System.out.println("get 방식 요청 : "+content);
return "result";
}
/*
* 요청 파라미터 추출하는 방법 1
*
* 메소드의 인자로 HttpServletRequest 객체를 전달 받은다음
* 해당 객체의 getParameter() 메소드를 이용해서 추출한다.( 서브릿 or jsp 하던 방식 그대로)
*/
@RequestMapping("/send")
public String send(HttpServletRequest request){
// msg 라는 파라미터 명으로 전송되는 문자열 추출하기
String msg=request.getParameter("msg");
// 콘솔창에 출력하기
System.out.println("msg:"+msg);
// 응답하기
return "result";
}
/*
* 요청 파라미터 추출하는 방법 2
*
* 파라미터 명과 동일한 이름의 매개 변수를 선언하면 자동으로 추출되어서 전달된다.
*
* <input name="msg"> => String msg
* <input name="num"> => int num or String num
* xxx.do?msg=xxx => String msg
* xxx.do?msg=xxx => int num or String num
*/
@RequestMapping("/send2")
public String send2(String msg) {
// 콘솔창에 출력하기
System.out.println("msg:"+msg);
// 응답하기
return "result";
}
}
insertform.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>/views/member/insertform.jsp</title>
</head>
<body>
<h1>회원추가 폼 입니다.</h1>
<form action="${pageContext.request.contextPath }/member/insert.do" method="post">
번호 <input type="text" name="num"/> <br />
이름 <input type="text" name="name"/> <br />
주소 <input type="text" name="addr"/> <br />
<button type="submit">추가</button>
</form>
<form action="${pageContext.request.contextPath }/member/insert2.do" method="post">
번호 <input type="text" name="num"/> <br />
이름 <input type="text" name="name"/> <br />
주소 <input type="text" name="addr"/> <br />
<button type="submit">추가</button>
</form>
<form action="${pageContext.request.contextPath }/member/insert3.do" method="post">
번호 <input type="text" name="num"/> <br />
이름 <input type="text" name="name"/> <br />
주소 <input type="text" name="addr"/> <br />
<button type="submit">추가</button>
</form>
</body>
</html>
MemberDto
package com.gura.step02.member;
public class MemberDto {
//필드
private int num;
private String name;
private String addr;
//디폴트 생성자
public MemberDto() {}
public MemberDto(int num, String name, String addr) {
super();
this.num = num;
this.name = name;
this.addr = addr;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
MemberController
package com.gura.step02.member;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MemberController {
@RequestMapping("/member/insertform")
public String insertform() {
// /WEB-INF/views/member/insertform.jsp 페이지에서 응답하기
return "member/insertform";
}
@RequestMapping("/member/insert")
public String insert(HttpServletRequest request) {
//HttpServletRequest 객체의 메소드를 이용해서 파라미터 추출하기
int num=Integer.parseInt(request.getParameter("num"));
String name=request.getParameter("name");
String addr=request.getParameter("addr");
System.out.println(num+"|"+name+"|"+addr);
return "member/insert";
}
//컨트롤러 메소드의 매개변수를 이용해서 파라미터 추출하기
@RequestMapping("/member/insert2")
public String insert2(int num, String name, String addr) {
System.out.println(num+"|"+name+"|"+addr);
return "member/insert";
}
//컨트롤러 메소드의 매개변수에 dto 를 선언해도 된다.
@RequestMapping("/member/insert3")
public String insert3(MemberDto dto) {
System.out.println(dto.getNum()+"|"+dto.getName()+"|"+dto.getAddr());
return "member/insert";
}
}
/views/member/insert.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>/views/member/insert.jsp</title>
</head>
<body>
<p>회원 정보 전송 잘 받았어 클라이언트야</p>
<p>${param.num } | ${param.name } | ${param.addr } </p>
<a href="${pageContext.request.contextPath }/">인덱스로 가기</a>
</body>
</html>