본문 바로가기
웹 개발 언어/JSP&Servlet

MVC 패턴 Model1을 통해 로그인 기능 만들어보자

by 0725 2022. 4. 18.

MVC 패턴의 Model1은 웹 어플리케이션을 개발할 때 JSP만을 사용하는 설계방법입니다.

View  Controller 같은 JSP에서 실행됩니다.

즉, 클라이언트의 요청 처리, DB 연동, 세션 관리, 응답 처리 등과 같은 작업이 JSP만을 이용해서 구현한다는 뜻입니다.


로그인 시 필요한 정보를 받아올 HTML

 

로그인 시 정보를 받을 HTML부터 만들어주었다

form 태그를 이용해서 회원가입 버튼을 누르면 login.jsp로 이동하도록 하였다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	fieldset {
		text-align: center;
		display: inline;
	}
</style>
</head>
<body>
	<form action="./login.jsp" method="post">
		<fieldset>
			<legend>로그인</legend>
			<input type="text" name="id" placeholder="ID를 입력해주세요"><br>
			<input type="password" name="pw" placeholder="PW를 입력해주세요"><br>
			<input type="submit" value="로그인">
		</fieldset>


	</form>
</body>
</html>

실행화면


로그인을 클릭했을 때

login.jsp로 넘어가게된다.

<%@page import="java.sql.ResultSet"%>
<%@page import="java.net.URLEncoder"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
	// Login 기능 = 내가 입력한 id, pw가 member 테이블에 있는지 없는지 확인
	// 있으면 로그인 성공, 없으면 로그인 실패
	
	// POST 방식 인코딩
	request.setCharacterEncoding("UTF-8");
	
	// 입력받은 값 가져오기
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	
	System.out.println("id : "+id);
	System.out.println("pw : "+pw);
	
	// DB 연결해서 있는지 없는지 확인하기
	// DB 연결을 위한 통로 만들기 ->Class(OracleDriver)
	Class.forName("oracle.jdbc.driver.OracleDriver");
	
	// DB 접속 카드키 준비
	String db_url="jdbc:oracle:thin:@localhost:1521:xe";
	String db_id = "hr";
	String db_pw="hr";
	
	// 연결하기 -> 성공하면 Connection객체로 반환
	Connection conn = DriverManager.getConnection(db_url, db_id, db_pw);
	
	//-------연결 끝
	
	// 입력한 id, pw member테이블에 있는지 확인
	String sql="select nickname from member10 where id=? and pw=?";
	
	// sql문장 DB에 전달하면 psmt에 저장
	PreparedStatement psmt = conn.prepareStatement(sql);
	
	// 바인드 변수에 값 채우기
	psmt.setString(1, id);
	psmt.setString(2, pw);
	
	// sql문장 실행
	// query -> 질의하다
	// executeQuery : select문에서 사용, db에 값이 있는지 조회
	// resultset : sql 실행 결과라고 생각하기
	ResultSet rs = psmt.executeQuery();
	
	// next() : 다음 줄로 이동해서 값이 있는지 없는지 확인
	//        : 리턴값은 boolean
	//        : 다음줄에 값이 있으면 true 없으면 false
	String nickname = null;
	if(rs.next()){
		nickname = rs.getString("nickname");
	}
	
	if(nickname!=null){
		System.out.println("로그인 성공");
		response.sendRedirect("./loginSuccess.jsp?nickname="+URLEncoder.encode(nickname, "UTF-8"));
	}else{
		System.out.println("로그인 실패");
		response.sendRedirect("./loginFail.jsp");
	}
	
	%>
</body>
</html>

입력받은 id와 pw값이 DB에 존재하는지를 select 문을 통해서 확인 후, 존재한다면 nickname값을 가져온다

loginSuccess.jsp로 이동할 때는 쿼리스트링 방식을 통해 nickname값을 가지고 넘어간다.

실패했다면 loginFail.jsp로 넘어간다.

 

쿼리스트링은 Key와 Value값으로 이루어지고 사용 방법은

url?key=value

형식으로 작성하면 된다.

 

닉네임이 한글일 수도 있으니 UTF-8로 인코딩 시켜주었다.


loginSuccess.jsp에서 닉네임을 받아서 화면에 출력시켜주면 로그인 기능 끝~!

loginFail.jsp는 다시 시도하라는 글을 넣었다.

댓글