로그인 폼 만들기
<div class="login-area">
<form action="/member/login.kh" method="post">
<table align='right'>
<tr>
<td>아이디 :</td>
<td><input type="text" name="memberId"></td>
<td rowspan="2"><input type="submit" value="로그인"></td>
</tr>
<tr>
<td>비밀번호 :</td>
<td><input type="password" name="memberPw"></td>
<td></td>
</tr>
<tr>
<td colspan="3"><a href="#">회원가입</a></td>
</tr>
</table>
</form>
</div>
폼에서 입력받은 값 컨트롤러에서 처리하기
@RequestMapping(value = "/member/login.kh", method=RequestMethod.POST)
public String memberLogin(
@ModelAttribute Member member,
HttpServletRequest request,
Model model
) {
try {
Member loginUser = mService.loginMember(member);
if(loginUser != null) {
HttpSession session = request.getSession();
session.setAttribute("loginUser", loginUser);
return "redirect:/home.kh";
}else {
model.addAttribute("msg","회원정보 없음");
return"common/errorPage";
}
}catch(Exception e) {
model.addAttribute("msg",e.getMessage());
return"common/errorPage";
}
}
@ModelAttribute Member member
- 해당 코드는 Member class를 인스탠스화 하여 member안에 값을 셋팅해주는 코드이다
- 이 코드에서 가장중요한것은 폼에서 입력받은 name값과 vo클래스의 변수명이 같아야 한다는 것이다.
- tryCatch를 사용하여 회원값이 있을때는 home으로 없을때는 에러메세지 회원없음으로 오류가 났을때는 오류창을 출력하는 에러페이지로 연결한다.
Member loginUser = mService.loginMember(member);
- 폼에서 입력받은 값으로 찾은 member변수를 해당 클래스 메소드에서 처리하여 전송받는다.
서비스에서 처리하기
- MEMBEE.VO에 관해서는 지난 포스트에 작성했으니 생략한다.
@Service
public class MemberServicImpl implements MemberService{
@Autowired
private SqlSessionTemplate session;
@Autowired
private MemberStore mStore;
@Override
public Member loginMember(Member member) {
Member mOne = mStore.selectLoginMember(session, member);
return mOne;
}
- 세션과 전송할 store를 반드시 선언해야 한다.
@Autowired
: 나중에 물어보자!
@Service
를 선언해주어 Spring이 상속받은 impl클래스로 이동한것이다.
Store
@Repository
public class MemberStoreLogic implements MemberStore {
@Override
public Member selectLoginMember(SqlSession session, Member member) {
Member mOne= session.selectOne("MemberMapper.selectLoginOne",member);
return mOne;
}
@Repository
반드시 선언해줘야 store를 인식한다.
Mapper
<mapper namespace="MemberMapper">
<resultMap type="com.kh.junspring.member.domain.Member" id="memberResultMap">
<id property="memberId" column="MEMBER_ID"/>
<result property="memberPw" column="MEMBER_PWD"/>
<result property="memberName" column="MEMBER_NAME"/>
<result property="memberEmail" column="MEMBER_EMAIL"/>
<result property="memberPhone" column="MEMBER_PHONE"/>
<result property="memberAddress" column="MEMBER_ADDR"/>
<result property="endrollDate" column="ENROLL_DATE"/>
<result property="updateDate" column="UPDATE_DATE"/>
<result property="status" column="M_STATUS"/>
</resultMap>
<select id="selectLoginOne" resultMap="memberResultMap">
select member_id, member_name from member_tbl where member_id = #{memberId} and member_pwd= #{memberPw}
</select>
- 위 store에서 namespae.id로 쿼리문을 실행시켰다는걸 확인할수있다.
- #{memberId}는 controller에서 받아온 폼에 입력된 member의 변수명이다.
- resultmap을 통해 column의 값을 변수에 저장할수있으며 이 저장된 값은
resultMap type="com.kh.junspring.member.domain.Member"
- 이렇게 연결된 주소의 인스탠스로 만들어진다.
- select태그 안에 resultMap에 id를 맞추면 select태그와 연결된다.