Spring 파라미터 처리

메타플랫폼대표
|2024. 7. 17. 16:12
반응형

2024_0717_SpringParameter [ADD] Spring Parameter

 

GitHub - chaSunil/FirstProject: 1차 프로젝트

1차 프로젝트. Contribute to chaSunil/FirstProject development by creating an account on GitHub.

github.com

 

 

servlet-context.xml에 추가

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<!-- CSS/Javascript/Image.... -->
	<resources mapping="/resources/**" location="/resources" />
	<resources mapping="/**" location="/" />

 

 

html 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">

	function send1(f) {
		
		// 입력값 체크
		
		f.action = "insert1.do";
		f.submit();
	}

	function send2(f) {
		
		// 입력값 체크
		
		f.action = "insert2.do";
		f.submit();
	}

	function send3(f) {
		
		// 입력값 체크
		
		f.action = "insert3.do";
		f.submit();
	}

</script>
</head>
<body>

<form>
	<table border="1">
		<tr>
			<th>이름</th>
			<td><input name="name" value="홍길동"></td>
		</tr>
		
		<tr>
			<th>나이</th>
			<td><input name="age" value="20"></td>
		</tr>
				
		<tr>
			<th>전화</th>
			<td><input name="tel" value="010-1234-1234"></td>
		</tr>
		
		<tr>
			<td colspan="2" align="center">
				<input type="button" value="낱개로 받기" onclick="send1(this.form);">
				<input type="button" value="객체로 받기" onclick="send2(this.form);">
				<input type="button" value="Map으로 받기" onclick="send3(this.form);">
			</td>
		</tr>
	</table>
</form>

</body>
</html>

 

 

 

 

Controller 작성

package controller;

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

@Controller
public class ParamTestController {
	
	public ParamTestController() {
		// TODO Auto-generated constructor stub
		System.out.println("--ParamTestController()--");
	}
	
	// /insert1.do?name=홍길동&age=20&tel=010-1234-1234
	@RequestMapping("/insert1.do")
	public String insert1(String name, int age, String tel, Model model) {
		
		// 메소드의 인자 : DispatcherServlet에 대한 요구사항
		
		// model통한 request binding
		model.addAttribute("name",name);
		model.addAttribute("age",age);
		model.addAttribute("tel",tel);
		
		
		return "result1";
	}
	

}

 

 

 

 

parameter의 값과 Argument의 변수명과 동일하지 않아도 parameter 값을 넘기는방법

 

parameter명과 수신될 변수명이 틀릴경우 생략(parameter명과 동일한 변수명에 값을 넣어준다

 

 

 

 

 

 

 

 

 

required = 요구하다 true일 시 무조건 있어야한다, false일 경우 parameter 값이 없어도 된다.

defaultValue는 parameter 값이 안넘어올 경우 "한국"으로 출력시켜준다.

	// /insert1.do?name=홍길동&age=20&tel=010-1234-1234
	@RequestMapping("/insert1.do")
	// parameter명과 수신될 변수명이 틀릴경우
	// 생략(parameter명과 동일한 변수명에 값을 넣어준다)
	public String insert1(@RequestParam(name="name") String irum,
			int age,
			String tel,
			@RequestParam(name="nation", required = false, defaultValue = "한국") String nation,
			Model model) {
		
		// 메소드의 인자 : DispatcherServlet에 대한 요구사항
		
		// model통한 request binding
		model.addAttribute("name",irum);
		model.addAttribute("age",age);
		model.addAttribute("tel",tel);
		model.addAttribute("nation",nation);
		
		
		return "result1";
	}

 

 

 

 

Vo로 parameter값 받기(DispatcherServlet이 parameter로 넘긴 데이터를 vo로 포장해준다)

 

 

 

 

살짝 생성해봤어 나

	// /insert2.do?name=홍길동&age=20&tel=010-1234-1234
	@RequestMapping("/insert2.do")
	public String insert2(PersonVo vo, Model model) {
		// 각 parameter를 받기 -> Vo생성후 값을 넣어주고->전달
		// 메소드 인자 : DispatcherServlet에 대한 요구사항
		
		// request.binding
		model.addAttribute("vo",vo);
		
		return "result2";
	}

 

 

 

 

살짝 복붙해봤어 나

<%@ 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>
<hr>
객체(PersonVo)로 받기 결과
<hr>
이름 : ${ requestScope.vo.name }<br>
나이 : ${ requestScope.vo.age }<br>
전화 : ${ vo.tel }<br>
<a href="input.html">다시하기</a>
</body>
</html>

 

 

 

 

Map으로 객체 받기

	// /insert3.do?name=홍길동&age=20&tel=010-1234-1234
	@RequestMapping("/insert3.do")
	public String insert3(@RequestParam Map map, Model model) {
		
		model.addAttribute("map",map);
		
		return "result3";
	}

 

 

 

 

살짝 복사해봤어 나

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr>
Map으로 받기 결과
<hr>
이름 : ${ requestScope.map.name }<br>
나이 : ${ requestScope.map.age }<br>
전화 : ${ map.tel }<br>
<a href="input.html">다시하기</a>

<hr>
	Map forEach이용 출력
<hr>
<c:forEach var="entry" items="${ map }">
	parameter name : ${ entry.key } value: ${ entry.value }<br>
</c:forEach>


</body>
</html>

 

 

 

 

 

 

 

 

ip 넣는방법 ㅋㅋ(HttpServletRequest request)를 Argument로 넣어준다.

request.getRemoteAddr(); 로 ip를 변수값에 저장해준뒤, model.addAttribute("ip",ip) 하여 넘겨준다.

	// /insert3.do?name=홍길동&age=20&tel=010-1234-1234
	@RequestMapping("/insert3.do")
	public String insert3(@RequestParam Map map, Model model, HttpServletRequest request) {
		
		String ip = request.getRemoteAddr();
		
		model.addAttribute("map",map);
		model.addAttribute("ip",ip);
		
		return "result3";
	}

 

 

 

 

매번 이렇게 Argument 값에 HttpServletRequest request를 넣어주는것도 일이다.

@Autowired를 사용해봐!!! 자동엮기기능이 있습니다.

 

 

 

 

 

Session 또한 저렇게 얻어올 수 있다.

 

 

 

 

발생오류 조심

 

 

 

반응형