본문 바로가기

Archived(Programming)/Spring #2(기초)

Http 파라미터 처리

# Http 파라미터 처리

@RequestParam 어노테이션을 이용한 요청 파라미터 구하기

get / post로 요청을 넘겨 받으면

@RequesMapping("/test8")
// 여러 옵션 지정 가능 required, defaultValue
public ModelAndView test8(@RequestParam("id", required=false, defaultValue="") String id){
	ModelAndView vew = new ModelAndView();
    view.setViewName("test/test8");
    view.addObject("userID",id);
    return view;
}

Command 객체를 이용해 폼 전송 처리하기

다음과 같이 input이 많아지면 @RequestParam으로 하나씩 처리하기 불편함, 유지보수 단점

<form method="post">
	<input type="text" name="email"/>
	<input type="text" name="name"/>
	<input type="tex"t name="pw"/>
    ...
</form>

파라미터의 이름과 동일한 프러퍼티를 가진 클래스를 작성

public class Member{
	private String email;
	private String name;
	private String pw;
	
    // getter, setter
    ...
}

그러면 자동으로 Mapping하여 가져올 수 있음

@RequestMapping(value="/join", method=RequestMethod.POST)
public ModelAndView test9(Member member){
	// 서비스 호출 및 데이터 확보
    ...
    return new ModelAndView("bbs/join").addObject("member", member);
}

Command 객체는 자동으로 VIew의 Model로 바로 등록함(view.addObject 필요 없음)

커맨드 객체를 JSP에서 사용할 때는 객체명 중 첫글자만 소문자로 바꾸어 사용

타입 자동 변환 기능 숫자는 int(long), double로 변환, true/false는 boolean 으로 변환

 

Collection 처리: HTML에서 같은 이름의 input 엘리먼트가 구성

Command 객체를 사용하여 List로 처리

<input type="text" name="names" value="1">
<input type="text" name="names" value="2">
<input type="text" name="names" value="3">
private List<String> names; // 자동 맵핑됨

 

# 실습 Path Variable 처리, Command 객체 처리

Post 방식과 Get 방식 처리

package kr.co.acomp.hello.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;

@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {

	@Autowired // DI 자동 주입
	private BbsService bbsService;
	
	// @PostMapping
	@RequestMapping(value="/write", method=RequestMethod.POST)	// 메소드 레벨 맵핑
	public String dowrite() {
		bbsService.registArticle(new Article());
		System.out.println("post request...");
		return "write_ok";
	}
	// @GetMapping
	@RequestMapping("/write")	// 메소드 레벨 맵핑
	public String write() {
		bbsService.registArticle(new Article());
		System.out.println("get request...");
		return "write_ok";
	}
}

Path variable 활용하기

package kr.co.acomp.hello.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;

@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {

	@Autowired // DI 자동 주입
	private BbsService bbsService;
	
	// 글 상세 보기
	@RequestMapping("/{articleId}")
	public String viewDetail(@PathVariable String articleId) {
		System.out.println("글번호는: " + articleId);
		
		return "write_ok";
	}
	...
}

요청 준비

크롬 확장앱 ARC

package kr.co.acomp.hello.dao;

import org.springframework.stereotype.Repository;

import kr.co.acomp.hello.vo.Article;

@Repository // Repository Annotation
public class ArticleDAO {
	
	// 디버깅 용
	public void insertArticle(Article article) {
		System.out.println(article);
	}
}
package kr.co.acomp.hello.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;

@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {

	@Autowired // DI 자동 주입
	private BbsService bbsService;
	
	...
	
	// @PostMapping
	@RequestMapping(value="/write", method=RequestMethod.POST)	// 메소드 레벨 맵핑
	public String dowrite(Article article) {
		bbsService.registArticle(article);
		System.out.println("post request...");
		return "write_ok";
	}
    ...
}

전송시 콘솔창에 정상적으로 값이 들어옴

 

ModelAndView 처리

	// @PostMapping
	@RequestMapping(value="/write", method=RequestMethod.POST)	
	public ModelAndView dowrite(Article article) {
		bbsService.registArticle(article);
		System.out.println("post request...");
		return new ModelAndView("write_ok").addObject("article",article);
	}

write_ok.jsp 파일 수정

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>hello</h1>
	<ul>
		<li>${aticle.articleId}</li>
		<li>${aticle.author}</li>
		<li>${aticle.title}</li>
		<li>${aticle.content}</li>
	</ul>
</body>
</html>

 

'Archived(Programming) > Spring #2(기초)' 카테고리의 다른 글

Static file 처리와 FileUpload  (0) 2020.03.12
Restful API  (0) 2020.03.12
@Controller  (0) 2020.03.11
Spring MVC  (0) 2020.03.11
Layered Architecture & @Component  (4) 2020.03.10