아 자고 싶다..
일단
@RequestMapping("login.me")
->들어온 요청을 특정 메서드와 매핑하기 위해 사용하는 것이 @RequestMapping이다.
<header.jsp>
<form action="login.me" method="post">
<!-- Modal body -->
<div class="modal-body">
<label for="userId" class="mr-sm-2">ID : </label>
<input type="text" class="form-control mb-2 mr-sm-2" placeholder="Enter ID" id="userId" name="userId"> <br>
<label for="userPwd" class="mr-sm-2">Password : </label>
<input type="password" class="form-control mb-2 mr-sm-2" placeholder="Enter Password" id="userPwd" name="userPwd">
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="submit" class="btn btn-primary">로그인</button>
<button type="button" class="btn btn-danger" data-dismiss="modal">취소</button>
</div>
</form>
<MemberController>
Spring에서 값 뽑는 방법
1) HttpServletRequest이용해서 값 뽑기 (JSP/Servlet과 동일)
@RequestMapping("login.me")
public String loginMember(HttpServletRequest request) {
String userId = request.getParameter("id");
String userPwd = request.getParameter("pwd");
return "main";
}
2) @RequestParam어노테이션으로 값 뽑기
request.getParameter("키")로 밸류를 뽑아오는 역할을 대신해주는 어노테이션
value속성의 밸류로 jsp에서 작성했던 name속성값을 담으면 알아서 해당 매개변수를 받아올 수 있다.
만약, 넘어온 값이 비어있는 형태라면 defaultValue속성으로 기본값을 지정할 수 있다.
@RequestMapping("login.me")
public String loginMember(@RequestParam(value="id", default="abc") String userId, @RequestParam(value ="pwd") String userPwd) {
System.out.println("userId : " + userId);
System.out.println("userPwd : " + userPwd);
return "main";
}
3) @RequestParam 어노테이션을 생략하는 방법
* 단, 매개변수명을 jsp의 name속성값(요청 시 전달하는 값의 키값)과 동일하게 세팅해둬야 자동으로 값이 주입
* 단점으로는 위에서 사용했던 defaultValue 속성은 사용할 수 없음
@RequestMapping("login.me")
public String loginMember(String id, String Pwd) {
Member m = new Member();
m.setUserId(id);
m.setUserPwd(pwd);
return "main";
}
4) 커멘드 객체 방식
해당 메서드의 매개변수로
요청 시 전달값을 담고자하는 VO클래스의 타입을 세팅 후
요청 시 전달값의 키값(jsp의 name속성값)을 VO의 필드명으로 작성
스프링 컨테이너가 해당 객체를 기본생성자로 생성 후 내부적으로 setter메소드를 찾아서
요청 시 전달값을 해당 필드에 담아줌 == setter주입
**반드시 name속성값과 담고자하는 필드명이 동일해야함 + 기본생성자가 꼭 있어야 함 + setter가 꼭 있어야 함
(jsp의 name속성 값하고 필드명을 같게 해준다.
@RequestMapping("login.me")
public String loginMemer(Member m) {
Member loginUser = memberService.loginMember(m);
if(loginUser == null) { //로그인 실패 => 에러문구르르 requestScope에 담고 에러페이지로 포워딩
System.out.println("로그인실패");
}else {//로그인 성공 => loginUser를 sessionScope에 담고 메인페이지 url로 요천
System.out.println("로그인성공");
}
return "main";
}
)
5)스프링에서 제공 Model객체를 사용하는 방법
* 포워딩할 응답뷰로 전달하고자 하는 데이터를 맵형식(key-value)으로 담을 수 있는 영역
* Model객체는 requestScope
* 단, setAttribute가 아닌 addAttribute메소드를 호출해야함
*
* request를 쓸 수 있지만,
* Spring에서 제공하는 Model객체를 사용
*
@RequestMapping("login.me")
public String loginMember(Member m, Model model, HttpSession session) {
Member loginUser = memberService.loginMember(m);
if(loginUser == null) { // 로그인 실패 => 에러문구 requestScope에 담아서 에러페이지로 포워딩
model.addAttribute("errorMsg", "에러 발생");
포워딩 (파일 경로를 포함한 파일 명을 제시)
*
* return "XXX";
* servlet-context.xml <- 주소 자동완성을 시켜주는 도구 bean으로 등록해놨음 : View Resolver
* - prefix : /WEB-INF/views/
* - 중간 : XXX (== 파일명)
* - suffix : .jsp
*
* return된 문자열과 결합하면!!!!
* /WEB-INF/views/main.jsp
*
* 에러페이지로 가려면?
* /WEB-INF/views/'common/errorPage'.jsp
*
* common/errorPage만 리턴해주면 됨!!!
*
return "common/errorPage";
} else { // 로그인 성공 => loginUser를 SessionScope에 담고 메인페이지로 url 재요청
session.setAttribute("loginUser", loginUser);
/*
* url 재요청방식 == sendRedirect(url경로를 제시)
* redirect:요청할 url
*
return "redirect:/";
//localhost:8007/spring
}
}
6)스프링에서 제공하는 ModelAndView 객체를 사용하는 방법
* Model은 데이터를 key-value세트로 담을 수 있는 공간이라고 한다면
* View는 응답뷰에 대한 정보를 담을 수 있는 공간
*
* Model과 View가 결합된 형태의 객체
* 단, Model 객체는 단독 사용이 가능하지만 View객체는 ModelAndView타입으로만 사용이 가능하다.
*
@RequestMapping(value="login.me")
public ModelAndView loginMember(Member m, ModelAndView mv, HttpSession session) {
Member loginUser = memberService.loginMember(m);
if(loginUser != null && bcryptPasswordEncoder.matches(m.getUserPwd(),loginUser.getUserPwd())) {
session.setAttribute("loginUser",loginUser);
mv.setViewName("redirect:/");
} else {
// model.addAttribute("키","밸류");
mv.addObject("errorMsg","응 안돼!");
mv.setViewName("common/errorPage");
}
return mv;
}
--------------------MemberServiceImpl
@Override
public Member loginMember(Member m) {
//Member loginUser = memberDao.loginMember(sqlSession, m);
// SqlSessionTemplate객체를 bean으로 등록 후 @Autowired
//스프링이 사용후 자동으로 객체를 알아서 반납시켜주기 때문에
//내가 더이상 close() 호출할일이 없어진다
return memberDao.loginMember(sqlSession, m);
}
---------------------MemberDao-
public Member loginMember(SqlSessionTemplate sqlSession, Member m) {
return sqlSession.selectOne("memberMapper.loginMember", m);
}
-----MemberMapper
<resultMap id="memberResultSet" type="member">
<result column="USER_ID" property="userId" />
<result column="USER_PWD" property="userPwd" />
<result column="USER_NAME" property="userName" />
<result column="EMAIL" property="email" />
<result column="GENDER" property="gender" />
<result column="AGE" property="age" />
<result column="PHONE" property="phone" />
<result column="ADDRESS" property="address" />
<result column="ENROLL_DATE" property="enrollDate" />
<result column="MODIFY_DATE" property="modifyDate" />
<result column="STATUS" property="status" />
</resultMap>
----
<select id="loginMember" parameterType="member" resultMap="memberResultSet">
SELECT
USER_ID,
USER_PWD,
USER_NAME,
EMAIL,
GENDER,
AGE,
PHONE,
ADDRESS,
ENROLL_DATE,
MODIFY_DATE,
STATUS
FROM
MEMBER
WHERE
USER_ID = #{userId}
AND
STATUS = 'Y'
</select>'Spring' 카테고리의 다른 글
| 별점 리뷰 작성하기 (0) | 2024.08.24 |
|---|