반응형
타진
개발 그라운드
타진
전체 방문자
오늘
어제
  • 분류 전체보기 (136)
    • 프로그래밍 (65)
      • Java (28)
      • Android (1)
      • Web (19)
      • Web-Spring (12)
      • R (5)
      • Angular (0)
    • 운영체제 (17)
      • Linux (14)
      • Docker(vmware) (3)
    • 클라우드 (4)
      • aws (0)
      • aws_handson (4)
    • 개발문제해결 (25)
      • Exception (12)
      • 알고리즘 문제풀이 (13)
    • 그 외 개발관련 (23)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • docker desktop
  • cfn
  • docker ps
  • wsl_update_x64
  • vmmem
  • 빠른 시작 끄기
  • 빠른 시작 켜기
  • transit gateway peering
  • 키보드매핑
  • GIT
  • 4700u
  • alt tab
  • 정올알고리즘 정올 알고리즘
  • Github CLI
  • docker
  • chromium edge
  • 일어키보드
  • angular cli
  • 문법 체크
  • github
  • transit_gateway
  • wsl2
  • 크로미움 엣지
  • github actions
  • jdk14
  • stackset
  • handson
  • ubuntu terminal
  • 라이젠
  • AWS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타진

개발 그라운드

MVC Patterns 기본적 컨트롤러 생성 / redirect 활용
프로그래밍/Web-Spring

MVC Patterns 기본적 컨트롤러 생성 / redirect 활용

2017. 11. 15. 19:41
반응형



여기서는 저번에 생성한 프로젝트를 바탕으로


기본적인 패턴을 연습삼아 만들어 보도록 하겠다.




밑의 product를 먼저 이야기하자면

 


private int pid; // 상품아이디
private String pname; // 상품 이름
private int price; // 상품 가격

이런 형태의 모델 클래스이다.

getter/setter와 생성자는 길어서 뺏다.



저번에 만든 컨트롤러 클래스에서 controller를 만들었다.

코드는 아래와 같다.


@Controller
public class controller {
// 1
private static final Logger logger = LoggerFactory.getLogger(controller.class);
// 2
@RequestMapping(value = "/")
public String test(){
logger.debug("디버그 로그");
logger.warn("경고 로그");
logger.error("에러 로그");
return "index";
}
// 3
@RequestMapping(value = "/product", method = RequestMethod.GET)
public String productGet() {
logger.info("productGet() 호출");

return "product-form";
}
// 4
@RequestMapping(value="product", method= RequestMethod.POST)
public String productPost(@ModelAttribute("prod") Product p) {
logger.info("productPost() 호출");
logger.info("pid: {}",p.getPid());
logger.info("pname: {}",p.getPname());
logger.info("price: {}",p.getPrice());

return "product-result";
}
}


1은 logger를 만든 것이다.


지난번에 logger를 pom에 추가하고 성공적으로 만들었다면

무난하게 생성이 가능할 것이다.


이 logger 변수를 통해 로그를 찍어 낼 수 있다.


@RequestMapping 에서 value 를 통해 주소를 알려주고 return을 통해 product-form.jsp 를 get 방식으로 호출한다.



웹 컨텐트 아래 호출할 jsp는 미리 만들어둔다.





/product 를 호출해서 product-form을 호출해낸 모습이다.


이 페이지의 폼은 아래 코드와 같다.


<h1>상품 등록 페이지</h1>
<form action="product" method="post">
<input type="number" name="pid" placeholder="상품아이디"/>
<br/>
<input type="text" name="pname" placeholder="상품이름"/>
<br/>
<input type="number" name="price" placeholder="상품 가격"/>
<br/>
<input type="submit" value="상품 등록"/>
</form>


폼은 post 방식으로 데이터를 다시 product에 돌려주고 있다.


위에서 본 봐와 같이

컨트롤러에 @RequestMapping의 value product, 호출방식을 post로 코드를 짜준다.


@RequestMapping(value="product", method= RequestMethod.POST)
public String productPost(@ModelAttribute("prod") Product p) {
logger.info("productPost() 호출");
logger.info("pid: {}",p.getPid());
logger.info("pname: {}",p.getPname());
logger.info("price: {}",p.getPrice());

return "product-result";
}

@ModelAttribute는 addAttribute를 어노테이션 방법으로 매개변수에 구현한 내용이다.

Product 클래스만 구현되어 있다면 자동으로 객체를 생성해서 자동으로 넣어준다


단 Product의 변수 이름과 위의 form의 name이 같아야 넣어줄 수 있다.


로그로 데이터를 확인하고


product-result로 데이터를 념겨주는 동시에, product-result.jsp 를 호출해준다.


<h1>상품 등록 결과</h1>
상품 코드: ${prod.pid}<br/>
상품 이름: ${prod.pname}<br/>
상품 가격: ${prod.price}<br/>


product-result.jsp 의 경우 이러한 코드이다.


위에서 설정한 어트리뷰트의 아이디로 별다른 설정없이 즉시 호출할 수 있다.


아래는 데이터의 입력화면과, 결과 값이다.




Spring의 첫 클래스를 구현해봤다.




다음으로 리다이렉트를 간단하게 연습해보자

Spring에서 아주 간편하게 활용이 가능하다.


@RequestMapping(value = "/temp")
public String doRedirect(){

logger.info("doRedirect() 호출");
logger.info("/로 리다이렉트");

// return "redirect: 이동할 주소";
return "redirect:/";
}


/temp로 접근했을 때 / 주소로 바로 리다이렉트가 가능하다

/ 대신 http://www.daum.net을 적는다면 다음으로 바로 리다이렉트가 가능하다.


@RequestMapping(value = "/temp2")
public String doRedirect2(RedirectAttributes attr){
logger.info("doRedirect2() 호출");
attr.addAttribute("name","QWERTY");

// return "redirect:/page1?name=abc";
return "redirect:/page1";
}

또한 RedirectAttributes attr을 이용하여 데이터를 넣어 데이터를 보낼 수 있다.

이경우 받는 곳에서 (이 경우에는 page1)을 getAttribute를 통해 호출해야한다.


주석에서 처리했듯이 get방식으로 데이터를 보내는 것도 가능하다.


@RequestMapping(value="/page2")
public String page2(HttpServletRequest req) {
String name = (String)req.getAttribute("name");
logger.info("page2(): name = " + name);

return "page1";
}


HttpServletRequest를 생성하여 그 안에 데이터를 넣어 보낼 수도 있다.


이 경우는 servlet-api 라이브러리의 추가가 필요하다.


우리는 pom.xml에서 다 설정햇으니 문제가 없지만


혹시 없어서 에러가 난다면 톰캣 라이브러리를 확인하도록 하자.


톰캣 라이브러리 안에 servlet-api.jar가 있을테니 그 것을 프로젝트 스트럭쳐에서 포함시켜주고 아티펙트에서 추가해주면 된다.



반응형

'프로그래밍 > Web-Spring' 카테고리의 다른 글

junit을 통한 테스트 클래스 만들기  (0) 2017.11.15
@ResponseBody, jackson-databind 라이브러리 활용  (0) 2017.11.15
intelliJ에서 SpringMVC 생성하기  (0) 2017.11.15
    '프로그래밍/Web-Spring' 카테고리의 다른 글
    • Spring 프레임워크에서 Oracle을 사용하기
    • junit을 통한 테스트 클래스 만들기
    • @ResponseBody, jackson-databind 라이브러리 활용
    • intelliJ에서 SpringMVC 생성하기
    타진
    타진
    vulnerable1324@gmail.com

    티스토리툴바