spring - controller mapping

Stella·2022년 5월 6일
0

Java

목록 보기
8/18

controller : 일반 클래스 @Controller 붙임.
요청 url를 등록하고 url과 매핑되는 method 등록
@RequestMapping("url"): url 등록, 전송 방식 get,post 다됨.

요청 방식이 get인지, post인지에 따라
@GetMapping("/member/join") : 회원가입 form을 보여줌
@PostMapping("/member/join") : submit 버튼 누르면 요청(post방식으로)

회원 가입
1. 가입폼을 보여줌 -> 작성 submit
2. db에 저장

@Controller
@RequestMapping("/member")//현재controller의 공통 path. method url에서 member 생략가능
public class MemController {
	
	@Autowired//dependency injection annotation (의존성 자동 주입)
	private MemberService service;

//	@RequestMapping("/member/join")
//	public String joinForm() {
//		return "member/join";
//	}
	
//	@RequestMapping("/member/join")//요청 url등록. 전송 방식은 get,post 다 됨
//	public void joinForm() { //요청한 url과 동일한 view page이면 return으로 반환하지 않아도 처리 가능.
//	}
//	
	@GetMapping("/join")// web browser에서 /member/join 실행
	public void joinForm() {
		
	}
//	@PostMapping("member/join") // 회원가입 폼에서 가입버튼 누르면 실행
//	public String join(Member m) {//m : command object. 입력 폼의 값을 담아옴. 객체의 멤버변수이름과 view form양식의 이름이 같아야함. class name인 Member를 소문자 member로 view에서 사용.
//		return "member/join_result";
//	}
//	
	@PostMapping("/join") // 회원가입 폼에서 가입버튼 누르면 실행
	public String join(@ModelAttribute("m") Member m) {//@ModelAttribute: command object의 이름을 따로 지정해서 view에서 사용.
		return "redirect:/member/login"; //jsp page return. 가입과정 중 error가 발생할 수 있기때문에 forward보다 redirect로 사용. login page를 새로고침하기 때문에 오작동 확률이 낮아짐
	}
	
	@GetMapping("/login")
	public void loginForm() {
		
	}
	@PostMapping("/login")
	public void login(String id, String pwd) {
		System.out.println(id);
		System.out.println(pwd);
		
	}
	
//	@RequestMapping("/getstr")
//	public void getStr(Map map) {//RequestMapping 되는 method의 parameter가 커맨트객체, Map, ModelMap이면 자동으로 뷰 페이지로 전달
//		//Map x = new HashMap();//뷰페이지에 전달 안됨. parameter로 받은 것만 전달. 우리가 생성한 건 전달 안됨.
//		String str = service.getStr();
//		map.put("str", str);
//	}

	@RequestMapping("/getstr")
	public void getStr(Map map) {//RequestMapping 되는 method의 parameter가 커맨트객체, Map, ModelMap이면 자동으로 뷰 페이지로 전달
		//Map x = new HashMap();//뷰페이지에 전달 안됨. parameter로 받은 것만 전달. 우리가 생성한 건 전달 안됨.
		String str = service.getStr();
		Member m = service.getMember();
		map.put("str", str); //key값으로 뷰에서 사용
		map.put("m", m);
	}
	
	//mapping 값이 이동해야하는 view 페이지와 다를때. ModelAndView 사용해서 경로와 데이터 지정
	@RequestMapping("/getMembers") 
	public ModelAndView getMembers() {
                //ModelAndView mav = new ModelAndView();
		//mav.setViewName("path");
		ModelAndView mav = new ModelAndView("member/list"); //ModelAndView: 뷰페이지에 전달할 데이터와 뷰 페이지 경로 지정
		ArrayList<Member> list = service.getAll();
		mav.addObject("list", list); //view 에서 부를 이름 ""안에 들어있는 list
		return mav;
	}
    
    //ajax 요청처리 : 비동기. page 이동 없이
    // 일반적인 request mapping 된 method의 return 값은 view page path
	//@ResonpseBody: request mapping된 method의 반환값이 이미지나 텍스트 등 데이터 일때 사용. body로 리턴
	@ResponseBody 
	@RequestMapping("idcheck")
	public Map idCheck(String id) {
		Map map = new HashMap(); // parameter로 받은 객체는 뷰페이지로 자동 전달됨. 이렇게 직접 생성한 객체는 자동 전달 안됨.
		Member m = service.getMember(id);
		boolean flag = false;
		if(m==null) {
			flag=true;
		}
		map.put("flag", flag);//json 형태의 값 반환. 자동으로
		return map;
		
	}
profile
Hello!

0개의 댓글