ABOUT ME

Today
Yesterday
Total
  • 파라미터 추출하기
    웹페이지 제작을 위한 스프링공부 2020. 5. 2. 14:29

    클라이언트 요청 발생 시 전달하는 파라미터 데이터를 손쉽게 주입 받을 수 있도록 다양한 방식을 제공하고 있습니다.

     

    spring mvc는 servlet/jsp처럼 요청 방식에 따라 파라미터 추출하는 방식이 달라지지는 않습니다.

     

    HttpServletRequest 사용하기

     

    spring mvc는 필요한 객체나 데이터는 주입을 받아 사용하게 됩니다.

    servlet/jsp에서 파라미터 데이터를 추출할 때 HttpServletRequest 객체를 통하게 되는데 Spring mvc에서 이 객체를 주입 받아 사용할 수 있습니다.

    파라미터 추출 뿐만 아니라 HttpServletRequest객체가 필요할 경우 사용하면 됩니다

     

     

     

     

    1.test1이라는 클라이언트의 요청이 들어오면 test1이라는 메소드가 호출이 된다

    2.개발자가 test1메소드 안에서 사용하고 싶은 객체가 있다.

    3.그 객체의 클래스 타입의 매개변수를 정의해주면 spring이 웹개발에 사용하는 객체들을 쫙 놓아두고 해당 클래스 타입과 동일한 클래스 타입의 객체 주소값을 주입해줌.

     

     

    index.jsp파일에서 data값을 전달해보겠다.

    <%@ 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>
    	<a href='test1?data1=100&data2=200'>test1 get</a><br/>
    </body>
    </html>

    servlet/jsp에서 어떠한 요청이 발생하게되면 해당 요청에 대한 정보는 전부 HttpServletRequest 객체에 담기게된다.

    이를 이용하여 파라미터를 뽑아내면 된다. spring도 동일한 방식

     

    package kr.co.softcampus.controller;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    public class TestController {
    
    	@GetMapping("/test1")
    	public String test1(HttpServletRequest request) {// 브라우저가 요청한 정보정보가 담긴 request객체를 여기서 주입받을수 있다.
    
    		String data1 = request.getParameter("data1");
    		String data2 = request.getParameter("data2");
    
    		System.out.println("data1:" + data1);
    		System.out.println("data2:" + data2);
    
    		return "result";
    	}
    
    }
    

     

    주입받은 request 객체를 사용하여 data값을 불러와 String 타입에 넣어준다( data값은 문자열로 넘어오기 때문)

     

    출력값

    data1:100
    data2:200

     

    데이터값을 2개 동시에 보낼때

    <%@ 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>
    	<a href='test1?data1=100&data2=200&data3=100&data3=200'>test1 get</a><br/>
    </body>
    </html>

     

    	@GetMapping("/test1")
    	public String test1(HttpServletRequest request) {// 브라우저가 요청한 정보정보가 담긴 request객체를 여기서 주입받을수 있다.
    
    		String data1 = request.getParameter("data1");
    		String data2 = request.getParameter("data2");
    		String [] data3 = request.getParameterValues("data3");
    
    		System.out.println("data1:" + data1);
    		System.out.println("data2:" + data2);
    		
    		for(String str1:data3) {//data3에서 차례대로 객체를 꺼내서 str1에 넣겠다는 뜻 언제까지? data3에 더이상 꺼낼 객체가 없을때 까지
    			System.out.println("data3:"+str1);
    		}
    
    		return "result";
    	}

    getParameterValues를 사용하여 둘다 받을수 있음

     

    form태그로 데이터 전달하기

    <%@ 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>
    	
    	<form action='test2' method='post'>
    		data1:<input type='text' name='data1'/><br/>
    		data2:<input type='text' name='data2'/><br/>
    		data3:<input type='checkbox' name='data3' value='100'/>value=100
    			  <input type='checkbox' name='data3' value='200'/>value=200<br/>
    			  
    		<button type='submit'>test2 post</button>
    	
    	
    	</form>
    </body>
    </html>

     

    @PostMapping("/test2")
    	public String test2(HttpServletRequest request) {// 브라우저가 요청한 정보정보가 담긴 request객체를 여기서 주입받을수 있다.
    
    		String data1 = request.getParameter("data1");
    		String data2 = request.getParameter("data2");
    		String [] data3 = request.getParameterValues("data3");
    
    		System.out.println("data1:" + data1);
    		System.out.println("data2:" + data2);
    		
    		for(String str1:data3) {//data3에서 차례대로 객체를 꺼내서 str1에 넣겠다는 뜻 언제까지? data3에 더이상 꺼낼 객체가 없을때 까지
    			System.out.println("data3:"+str1);
    		}
    
    		return "result";
    	}

     

     

    입력값

     

    출력값

    data1:123
    data2:123
    data3:100

     

    WebRequest 사용하기

     

    webRequest

    spring에서 HttpServletRequest를 좀 더 확장한 클래스

     

    <%@ 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>
    	<!-- <a href='test1?data1=100&data2=200&data3=100&data3=200'>test1 get</a><br/> -->
    	
    	<form action='test2' method='post'>
    		data1:<input type='text' name='data1'/><br/>
    		data2:<input type='text' name='data2'/><br/>
    		data3:<input type='checkbox' name='data3' value='100'/>value=100
    			  <input type='checkbox' name='data3' value='200'/>value=200<br/>
    			  
    		<button type='submit'>test2 post</button>
    	
    	
    	</form>
    </body>
    </html>

     

    @PostMapping("/test2")
    	public String test2(WebRequest request) {// 클래스만 바꿔줌
    
    		String data1 = request.getParameter("data1");
    		String data2 = request.getParameter("data2");
    		String [] data3 = request.getParameterValues("data3");
    
    		System.out.println("data1:" + data1);
    		System.out.println("data2:" + data2);
    		
    		for(String str1:data3) {//data3에서 차례대로 객체를 꺼내서 str1에 넣겠다는 뜻 언제까지? data3에 더이상 꺼낼 객체가 없을때 까지
    			System.out.println("data3:"+str1);
    		}
    
    		return "result";
    	}
    

     

     

    입력값

     

    출력값

    data1:awd
    data2:awd
    data3:200

     

    PathVaruable 사용

     

    <%@ 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>	
    	<a href = 'test3/100/200/300'>test3</a>
    </body>
    </html>

     

    @GetMapping("/test3/{data1}/{data2}/{data3}")
    	public String str4(@PathVariable String data1,
    					   @PathVariable String data2,			
    					   @PathVariable String data3) {
    		System.out.println("data1:"+data1);
    		System.out.println("data2:"+data2);
    		System.out.println("data3:"+data3);
    		
    		return "result";
    	}

     

    출력값

    data1:100
    data2:200
    data3:300

     

    이 방법은 코드가 좀 지저분한것같다;;;  정감이 안간다..

     

    RequestParam

     

    <%@ 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>
    	<a href = 'test3?data1=100&data2=200&data3=300&data3=400'>test3</a>
    </body>
    </html>

     

    @GetMapping("/test3")
    	public String test3(@RequestParam int data1,
    						@RequestParam int data2,
    						@RequestParam int []data3) {
    		System.out.println("data1:" + data1);
    		System.out.println("data2:" + data2);
    		
    		for(int str1:data3) {//data3에서 차례대로 객체를 꺼내서 str1에 넣겠다는 뜻 언제까지? data3에 더이상 꺼낼 객체가 없을때 까지
    			System.out.println("data3:"+str1);
    		}
    		
    		return "result";
    	}
    

     

    출력값

    data1:100
    data2:200
    data3:300
    data3:400

    '웹페이지 제작을 위한 스프링공부' 카테고리의 다른 글

    viewResolver  (0) 2020.05.02
    객체로 파라미터 주입받기  (0) 2020.05.02
    url mapping  (0) 2020.05.02
    java로 셋팅하기  (0) 2020.05.01
    xml 로 셋팅  (0) 2020.05.01
Designed by Tistory.