반응형

# MVC06_01 회원 로그인 페이지 작성

## MVC05 WAR File Import

  • 기존에 작업 진행한 MVC05 Import하여 MVC06으로 이름 변경 작업 진행.

MVC05.war
2.66MB

  • Project Explorer 빈 공간 우 클릭 > Import > MVC05.WAR 찾아서 클릭 후 Finish.

## Context 등록

  • 웹 애플리케이션을 WAS 톰캣 Server가 인식할 수 있도록 등록.
  • 톰캣 서버 우 클릭 > Add and Remove 에서 Available 에 존재하는 MVC04 클릭 후 Add 하여 Configured로 등록 후 Finish.

## 작업 계획

  • 회원 로그인 구현
  • 회원 로그인 시 본인의 정보 삭제 버튼 표시, 상세 보기 시 본인의 저보 수정하기 버튼 표시

## 회원 로그인 페이지 작업

<div class="container">
  <h2>Panel Heading</h2>
  <div class="panel panel-default">
    <div class="panel-heading">Panel Heading</div>
    <div class="panel-body">Panel Content</div>
  </div>
</div>
  • 로그인 폼은 부트 스트랩 Inline Form 사용
<div class="container">
  <h2>Inline form</h2>
  <p>Make the viewport larger than 768px wide to see that all of the form elements are inline, left aligned, and the labels are alongside.</p>
  <form class="form-inline" action="/action_page.php">
    <div class="form-group">
      <label for="email">Email:</label>
      <input type="email" class="form-control" id="email" placeholder="Enter email" name="email">
    </div>
    <div class="form-group">
      <label for="pwd">Password:</label>
      <input type="password" class="form-control" id="pwd" placeholder="Enter password" name="pwd">
    </div>
    <div class="checkbox">
      <label><input type="checkbox" name="remember"> Remember me</label>
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
  </form>
</div>
  • Panel body에는 부트 스트랩 Responsive Tables 사용
<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2>Table</h2>
  <p>The .table-responsive class creates a responsive table which will scroll horizontally on small devices (under 768px). When viewing on anything larger than 768px wide, there is no difference:</p>                                                                                      
  <div class="table-responsive">          
  <table class="table">
    <thead>
      <tr>
        <th>#</th>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Age</th>
        <th>City</th>
        <th>Country</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>Anna</td>
        <td>Pitt</td>
        <td>35</td>
        <td>New York</td>
        <td>USA</td>
      </tr>
    </tbody>
  </table>
  </div>
</div>

</body>
</html>
  • 부트 스트랩 Panel Footer 사용
<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
 
<div class="container">
  <h2>Panel Footer</h2>
  <div class="panel panel-default">
    <div class="panel-heading">Panel Heading</div>
    <div class="panel-body">Panel Content</div>
    <div class="panel-footer">Panel Footer</div>
  </div>
</div>

</body>
</html>

 

# MVC06_02 회원 로그인 기능(세션 바인딩)

## 회원 로그인 기능 작업

1. 입력값 유효성 검사

  • 아이디, 비밀번호 입력 시 알림창 표시될 수 있도록 이벤트 설정. (자바스크립트로 유효성 검사 설정)
<script type="text/javascript">
  function check() {
	  if ($('#user_id').val() == '') {
		 alert("아이디를 입력해주세요.");
		 return false;
	  }
	  
	  if ($('#password').val() == '') {
		 alert("비밀번호를 입력해주세요.");
		 return false;
	  }
	  
	  return true;
  }
</script>



<h2>회원관리 시스템</h2>
	<div class="panel panel-default">
		<div class="panel-heading">
			<form class="form-inline" action="${ctx}/memberLogin.do" method="post">
			    <div class="form-group">
					<label for="user_id">ID:</label>
					<input type="text" class="form-control" id="user_id" name="user_id">
			    </div>
			    <div class="form-group">
					<label for="pwd">Password:</label>
					<input type="password" class="form-control" id="password" name="password">
			    </div>
			    <button type="submit" class="btn btn-default" onclick="return check()">로그인</button>
			</form>
		</div>
	</div>

2. HandlerMapping

  • 로그인 클릭 시 action 에 따른 HandlerMapping
package kr.bit.frontcontroller;

import java.util.HashMap;

import kr.bit.controller.Controller;
import kr.bit.controller.*;

public class HandlerMapping {
  private HashMap<String, Controller> mappings;
  public HandlerMapping() {
	  mappings=new HashMap<String, Controller>();
	  mappings.put("/memberList.do", new MemberListController());
	  mappings.put("/memberInsert.do", new MemberInsertController());
	  mappings.put("/memberRegister.do", new MemberRegisterController());
	  mappings.put("/memberContent.do", new MemberContentController());
	  mappings.put("/memberUpdate.do", new MemberUpdateController());
	  mappings.put("/memberDelete.do", new MemberDeleteController());
	  mappings.put("/memberLogin.do", new MemberLoginController());
  }
  public Controller getController(String key) { // key=>/memberList.do
	  return mappings.get(key);
  }
}

3. MemberLoginController 생성

package kr.bit.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.bit.model.MemberDAO;
import kr.bit.model.MemberVO;

public class MemberLoginController implements Controller {

	@Override
	public String requestHandler(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String ctx = request.getContextPath();		
		
		String user_id = request.getParameter("user_id");
		String password = request.getParameter("password");
		
		MemberVO vo = new MemberVO();
		vo.setId(user_id);
		vo.setPass(password);

		MemberDAO dao = new MemberDAO();
		String user_name = dao.memberLogin(vo);
		
		if (user_name != null && !"".equals(user_name)) {	
			// 로그인 성공 -> 객체 바인딩.
			request.getSession().setAttribute("userId", user_id);
			request.getSession().setAttribute("userName", user_name);
		} else {	
			// 로그인 실패 -> 객체 바인딩, 실패 메시지
			request.getSession().setAttribute("userId", user_id);
			request.getSession().setAttribute("userName", user_name);
			request.getSession().setAttribute("msg", "사용자 정보가 올바르지 않습니다.");
		}
		
		return "redirect:" + ctx + "/memberList.do";
	}

}

4. MemberDAO

// 회원 로그인
public String memberLogin(MemberVO vo) {
  SqlSession session = sqlSessionFactory.openSession();
  String user_name = session.selectOne("memberLogin", vo);
  session.close();
  return user_name;
}

5. MemberMapper.xml

<!-- 회원 로그인 -->
<select id="memberLogin" parameterType="memberVO" resultType="String">
  SELECT name
  FROM member
  WHERE id = #{id}
  AND  pass = #{pass}
</select>
반응형

+ Recent posts