맛동산

Controller에서 RequestMapping등 케이스(chap05) 본문

Web/Spring

Controller에서 RequestMapping등 케이스(chap05)

오지고지리고알파고포켓몬고 2017. 5. 11. 21:07

@RequestMapping(value="/hello.do", method=RequestMethod.GET)// 생략하면 get방식
	public ModelAndView hello(){
		/*
		ModelAndView
			- Model : DB의 리턴값
			- View : 포워딩할 view page 정보
			스프링에서 제공하는 별도의 클래스
		 */
		
		ModelAndView mav = new ModelAndView();
		mav.addObject("name", "홍길동"); // Model의 값 (키 벨류형)
		mav.setViewName("hello"); // 이동할 view page의 이름 - views/hello.jsp
		
		return mav; // 실제 포워딩
	}


	/*
	@ModelAttribute("참조변수")
	- 클라이언트의 요청 파라미터를 처리하는 애노테이션
	- 파라미터와 VO 멤버와 자동 바인딩 되어 객체 생성
	- 이렇게 생성된 객체는 "참조변수"에 저장되어 view page에 포워딩 됨
	- 이렇게 생성된 객체 = Command Object
	 */
	
	
	// 요청 url = "/command/object.do" 전송방식 : GET
	@RequestMapping(value="/command/object.do",method=RequestMethod.GET)
	// ------------ @RequestMapping(method=RequestMethod.GET) 이런형태도 가능
	public String form(){
		// view page 포워딩
		return "command/form"; // views/command/form.jsp
	}
	
	// 요청 url="/command/object.do" 전송방식 :Post
	@RequestMapping(value="/command/object.do",method=RequestMethod.POST)
	// 3개 파라미터 요청(bno, title, content)
	public String submit(@ModelAttribute("vo2") CommandVO vo){ // 바인딩 결과가 vo2라는 참조변수에 만들어짐
		
		
		//1. ㅍㅏ라미터가(bno=0, title="제목", content="내용") 넘어온다
		//2. CommandVO 타입에 객체 생성(vo) -> 자동바인딩
		//	vo(bno(0), title(제목), content(내용))
		//3. vo2 참조변수에 저장 -> view page 포워딩
		 
		
		return "command/result"; // views/command/result.jsp
	}
	
	// JSP 방식
	/*public String submit(HttpServletRequest request, HttpServletResponse response){
		// 1. 파라미터 받기
		// 2. vo 객체 바인딩
		
		CommandVO vo = new CommandVO();
		vo.setBno(Integer.parseInt(request.getParameter("bno")));
		vo.setTitle(request.getParameter("title"));
		vo.setContent(request.getParameter("content"));
		
		// 3. key 생성 & 포워딩
		request.setAttribute("vo2", vo);
		
		return "command/result"; // views/command/result.jsp
	}*/





	//@RequestMapping(value="/param/userInfo.do")
	@RequestMapping("/param/userInfo.do")
	public ModelAndView param(@RequestParam("name") String name, // name, age
													// 문장을 캐스팅해서 변수에 넣어줌
								@RequestParam(value="age", required=false, defaultValue="25") int age){ // required : 일종의 예외처리, false시 없어도 된다, defaultValue : 없을때 초기화
		// name 필수 사항, age 없는 경우 예외 처리
		
		//ModelAndView mav = new ModelAndView("param/result"); // 요런 생성자도 가능(다형성)
		ModelAndView mav = new ModelAndView();
		mav.addObject("name",name);
		mav.addObject("age",age);
		mav.setViewName("param/result");
		
		return mav; // views/param/result.jsp
	}





	@RequestMapping("/model.do")
	public String result(@RequestParam("op1") int op1,
			@RequestParam("op2") int op2,
			Model model) {

		model.addAttribute("result", (double)op1/op2);
		return "math/result"; // 넘어간 페이지에서 result로 호출해서 쓸수있게되는거겠지?
	}


	// 쿠키
	@RequestMapping(value="/cookie/make.do") // get 방식이라 생략
	public String make(HttpServletResponse response){
		// 쿠키 생성
		response.addCookie(new Cookie("userId", "HONGILDONG"));
		
		return "cookie/make"; // views/cookie/make.jsp
	}
	
	@RequestMapping("/cookie/view.do") // get 방식이라 생략
	public ModelAndView view(@CookieValue(value="userId", defaultValue="0") String userId) {
		
		ModelAndView model = new ModelAndView("cookie/view");//jsp 정보
		model.addObject("userId", userId);
		
		return model; // views/cookie/make.jsp
	}




	/*
	 * @Model Attribute("참조변수")
	 * 	- 객체 생성 결과 저장 변수
	 *  - view page 포워딩 시 함께 전달됨
	 */
	
	// 와 그니까 지금 이게 public void aa(@ModelAttribute("searchTypeList") String name) 형식이 메서드 전체를 싸고잇는거네
	@ModelAttribute("searchTypeList")
	public List<SearchType> search(){
		List<SearchType> list = new ArrayList<SearchType>();
		list.add(new SearchType(1,"아케이드 게임"));
		list.add(new SearchType(2,"온라인 게임"));
		list.add(new SearchType(3,"닌텐도 게임"));
		
		return list; // searchTypeList 저장
	}
	
	@RequestMapping(value="/select/main.do")
	public String main(){
		return "select/main"; // views/select/main.jsp
	}
	
	@RequestMapping(value="/select/game.do", method=RequestMethod.POST)
	public String game(@ModelAttribute("search") SearchVO vo,
						Model model){
		//model.addAttribute("search", arg1)
		//String name = null;
		//System.out.println("name size : "+name.length());
		
		// 산술적 예외
		//int result = 10 / 0;
		return "select/game";
	}
	
	@ExceptionHandler(NullPointerException.class)
	public String handler(NullPointerException e){
		return "error/null"; // null.jsp
	}




	@RequestMapping(value="/login.do",method=RequestMethod.GET)
	public String loginForm(){
		return "exam/login";
	}
	
	@RequestMapping(value="/login.do",method=RequestMethod.POST)
	public ModelAndView result(@RequestParam(value="id", required=false, defaultValue="입력없음") String id,
								@RequestParam(value="pwd", required=false, defaultValue="입력없음") String pwd,
								@RequestParam(value="name", required=false, defaultValue="입력없음") String name){
		
		ModelAndView mav = new ModelAndView("exam/result");
		mav.addObject("id",id);
		mav.addObject("pwd",pwd);
		mav.addObject("name",name);
		
		return mav;
	}





	@RequestMapping(value="/account/create.do",method=RequestMethod.POST) // post요청시 vo변수에 바로 매핑해서 account라는 참조변수로 create.jsp로 전달! EL태그${name}등으로 바로 쓸수있음
	public String create(@ModelAttribute("account") AccountVO vo){
		return "account/create";
	}


간단한 MVC패턴은 chap06거에서 확인

Comments