겉바속촉

[Spring] 폼 만들어서 데이터 받아오기 본문

IT일기(하반기)/SPRING

[Spring] 폼 만들어서 데이터 받아오기

겉바속촉 2020. 6. 26. 14:40
728x90
반응형

우선 전체적인 틀을 이해하고 시작해볼게요

 

index.jsp에서 실행을 하면

우리가 제일 처음 접하는 화면이라고 생각해봅시다

그리고 다음 그림으로 이해해주세요:)

 

 

그럼 index.jsp로 가주세요

다음과 같이 만들었습니다:)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<h1>매핑주소로 이동</h1>
<ul> 
	<li><a href="happy">happy로 이동</a></li>
	<li><a href="hello">hello로 이동</a></li>
	<li><a href="hello.do">hello.do로 이동</a></li>
	<li><a href="nice.do">nice.do로 이동</a></li>
	
</ul>


</body>
</html>

 

그리고 컴파일 해보시면 다음과 같이 뜹니다 ---> 주소창 계속 확인해주세요!!

이제 저기서 각각 눌렀을 때 이동해야하기 때문에

매핑주소들을 각각 넣어준 거에요:)

 

다음 그림에서 표시해준것처럼요!!

 

그리고 폼을 눌렀을 때 실행이 되기 위해 controller를 만들어주셔야 합니다:)

 

Hellocontroller.java

package spring.day0626.ex1;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {
	
	
	@RequestMapping(value = "/happy", method=RequestMethod.GET)
	public String hello(Model model)
	{
		//Model은 request에서 데이터를 저장하기 위한 인터페이스
		//서블릿에서 코딩했던 request.setAttribute와 같다
		model.addAttribute("name", "보라돌이");
		model.addAttribute("addr", "서울구로");
		
		return "result"; //포워드(WEB-INF/day0626/result.jsp)가 생략되어 있는 것
	}
	
	@RequestMapping(value = "/hello", method=RequestMethod.GET)
	//@GetMapping("/hello.do")  --> 이럴 경우 무조건 hello.do만 가능 
	public ModelAndView hello2()
	{
		ModelAndView model=new ModelAndView();
		
		//모델에 데이터 저장
		model.addObject("sangpum","딸기");
		model.addObject("price",10000);
	
		//jsp로 포워드
		model.setViewName("result2");
		
		return model;
				
	}

}

 

Nicecontroller.java

package spring.day0626.ex1;

import java.util.Date;

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 NiceController implements Controller{

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		ModelAndView model=new ModelAndView();
		model.addObject("today",new Date());
		model.addObject("weather", "아주맑음");
		model.setViewName("result3");
		
		return model;
	}

}

 

 

이렇게까지 하신 후에 컴파일해보세요

happy로 이동 클릭

hello로 이동 클릭

hello.do로 이동 클릭

nice.do로 이동 클릭

 

 


이제는 입력폼을 눌렀을 때 폼 여러가지가 뜨도록 해볼게요:)

 

index.jsp에서 아까 만들어둔 부분에 대해서 추가로 만들어주는 것이에요

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<h1>매핑주소로 이동</h1>
<ul> 
	<li><a href="happy">happy로 이동</a></li>
	<li><a href="hello">hello로 이동</a></li>
	<li><a href="hello.do">hello.do로 이동</a></li>
	<li><a href="nice.do">nice.do로 이동</a></li>
	
</ul>

<h1>폼 전송-get방식</h1>
<b><a href="myform">입력폼</a></b>


</body>
</html>

 

우리가 지금 경로에 myform 즉, 대왕폼의 이름을 myform이라고 해주었어요

 

이제 작동하려면

FormDataController를 만들어주세요

 

 

그리고 작업순서는 다음과 같습니다:)

 

1. 가장먼저 @Controller 적용해주기

2. @GetMapping ("대왕폼이름") 해주기 ---> index에서 경로 지정해줄 때 썼던 대왕폼 이름이랑 동일해야함

3. ModelAndView 만들고 @RequestParam으로 받기

4. model 객체 생성한 후에 model.addObject로 넣어주기

5. 포워드로 값 보내기

6. return model;

 

 

src/main/java에서 만들었던 패키지에서 클래스 하나 생성해주시구요

 

다음과 같이 코드 작성해주세요

package spring.day0626.ex1;

import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FormDataController {
	
	@GetMapping("myform") //매핑주소는 index에서 링크하므로 이름이 동일해야 함
	public String form1()
	{
		return "form1";
	}
	
	@GetMapping("/read1")
	//@RequestMapping("/read1") --> 생략하면 get매핑
	//get방식 폼 전송
	public ModelAndView read1(@RequestParam("name") String name,
		 @RequestParam int age,
		 @RequestParam(value="msg",defaultValue = "Happy~")String msg)
	{
		ModelAndView model=new ModelAndView();
		model.addObject("name", name);
		model.addObject("age", age);
		model.addObject("msg", msg);
		
		//포워드
		model.setViewName("process1");	
		return model;
	}
	
	@PostMapping("read2")
	public ModelAndView read2(@ModelAttribute TestDTO dto)  //dto를 한 번에 모두 받아옴=@
	{
		ModelAndView model=new ModelAndView();
		//request받은 값을 dto로 받아온다
			
		model.addObject("dto", dto);
	
		//포워드
		model.setViewName("process2");
		return model;
	}
	
	
	//3번 폼 -> Map으로 폼 데이터 읽기
	@PostMapping(value = "/read3")
	public ModelAndView read3(@RequestParam Map<String, String>map)
	{
		ModelAndView model = new ModelAndView();
		
		String blood=map.get("blood");
		String star=map.get("star");
		
		String data="혈액형은"+blood+", 별자리는"+star+"자리입니다";
		
		
		model.addObject("data", data);
		model.setViewName("process3");
		
		return model;
		
	}
	


}

 

여기서 포인트는

Controller에서 액션을 주실 때 쓰는 이름과 form1에서 액션의 이름과 동일해야하겠죠?

 

그래야 작동이 가능합니다

 

 

 

그리고 컴파일

각각의 input창에다가 데이터 입력하고 전송 버튼을 눌러주면

다음 표시한 부분의 매핑 주소로 값이 출력되는 겁니다:)

 

 

 

 

그리고 각각 포워드 해준 것의 코드는 밑에 작성해두었습니다

 

dto로 해준 경우

 

TestDTO.java

package spring.day0626.ex1;

public class TestDTO {
	
	private String sang;
	private int price;
	public String getSang() {
		return sang;
	}
	public void setSang(String sang) {
		this.sang = sang;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	
	

}

 

 

process1.jsp

 

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<h1>1번 폼에서 전달받은 값-get방식</h1>
<h2>이름: ${name }<br>
나이: ${age }<br>
메세지: ${msg }</h2>

</body>
</html>

 

process2.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<h1>2번폼으로부터 입력받은 값_post방식</h1>
	<h2>상품명: ${dto.sang }<br>
	가격: ${dto.price }<br></h2>
	
</body>
</html>

 

process3.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<h1>3번폼으로부터 입력된값_Map_Post</h1>
<h2>${data }</h2>
</body>
</html>

 

각각 보내고 받는 방식을 3가지로 했기 떄문에

하나씩 살펴봐주세요!^^!

 

 

그리고 post랑 get 방식의 차이점은

다음과 같습니다

 

post는 뒤에 입력값이 노출이 되지않고

get은 입력값까지 모두 주소창에 노출이 됩니다:)

 

 

728x90
반응형

'IT일기(하반기) > SPRING' 카테고리의 다른 글

[spring] MyBatis 깔고 setting해주기  (2) 2020.06.29
[spring] 이미지 띄우기  (0) 2020.06.26
[spring] 확장자 변경해서 이동해보기  (0) 2020.06.26
[spring] 확장자명 연습하기  (0) 2020.06.26
[spring] MVC  (0) 2020.06.26