성장 기록 블로그🌴
## 자바 스프링 ( 로그인 페이지 만들기 , 스프링 로그인 기능 구현하기 ) 본문
AI & BigData 교육과정/자바 Spring & SQL 관련
## 자바 스프링 ( 로그인 페이지 만들기 , 스프링 로그인 기능 구현하기 )
wlswls2s 2022. 10. 21. 17:53728x90
< 자바스프링 내용 >
◆ 자바스프링 기본
개념정리
# 로그인 페이지 만들기!
# Member.java
package kr.smhrd.entity;
import lombok.Data;
// 여기에 @Data 해주면 자동으로 setter getter 생성됨
@Data
public class Member {
private String memId;
private String memPwd;
private String memName;
// setter, getter - Lombok API
}
01. list.jsp에 login.do로 이동할 수 있는 action 기능 추가! - member 데이터의 정보랑 일치할 시 로그인!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%><!-- 필수 -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Card</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
<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.6.0/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script> <script>
// $의 의미는 선택자! select -> 찾아가라는 의미!
// ready() 메서드 : 사용자가 사이트를 방문할 때 요청한 HTML 문서 객체의
// 로딩이 끝나면이벤트를 발생시킴!
$(document).ready(function(){
// 버튼을 클릭할 때 발생하는 메서드 지정!
$("button").click(function(){
// 내가 register.jsp 파일로 가고싶어도 그럴 수없음!
// Controll한테 register.do로 지시를 해서 그 경로를 통해 jsp파일로 넘어가게!
location.href="register.do";
});
});
</script>
</head>
<body>
<div class="card">
<div class="card-header">
<div class="jumbotron jumbotron-fluid" style="background-color : #FAFAD2;">
<div class="container">
<h1>♣~This is My Homepage^-^~♣</h1>
<h5>Welcome to wls homepage!!</h5>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<!-- 컬럼을 2:7:3 비율로 나눠서 사용하겠다! -->
<div class = "col-lg-2">
<div class="card" style="min-height: 500px; max-height: 1000px;" >
<div class="card-body">
<!-- 로그인 실패코드 : m에 값이 없다면! empty m -->
<c:if test="${empty m}">
<h4 class="card-title">Guest</h4>
<p class="card-text">회원님 Welcome!!</p>
<form action="login.do" method= "post">
<div class="form-group">
<label for="memId">아이디</label>
<input type="text" class="form-control" name="memId"/>
</div>
<div class="form-group">
<label for="memPwd">비밀번호</label>
<input type="password" class="form-control" name="memPwd"/>
</div>
<button type="submit" class="btn btn-sm btn-primary form-control">로그인</button>
</form>
</c:if>
<!-- 로그인 성공코드 : m에 값이 있다면! !empty m -->
<c:if test="${!empty m}">
<h4 class="card-title">${m.memName}님의 페이지</h4>
<p class="card-text">회원님 Welcome!!</p>
<button type="button" class="btn btn-sm btn-primary form-control">로그아웃</button>
</c:if>
</div>
</div>
</div>
<div class = "col-lg-7">
<div class="card" style="min-height: 500px; max-height: 1000px;">
<div class="card-body">
<h4 class="card-title">BOARD</h4>
<!-- 게시판 리스트 보기 화면 구현! -->
<table class = "table table-bordered table-hover">
<thead>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</thead>
<tbody>
<c:forEach var="vo" items = "${list}">
<tr>
<td>${vo.idx}</td>
<!-- 상세보기 기능! 게시판 번호를 가지고 와서 값을 넘김!-->
<td><a href="get.do?idx=${vo.idx}">${ vo.title}</a></td>
<td>${ vo.writer}</td>
<td><fmt:formatDate value="${vo.indate}" pattern="yyyy-MM-dd" /></td>
<td>${ vo.count}</td>
</tr>
</c:forEach>
</tbody>
</table>
<button class="btn btn-sm btn-primary">글쓰기</button>
</div>
</div>
</div>
<div class = "col-lg-3">
<div class="card" style="min-height: 500px; max-height: 1000px;">
<div class="card-body">
<h4 class="card-title">My Menu</h4>
<p class="card-text"> <img src="resources/img/img7.jfif" class="img-circle" alt="Cinque Terre" width="304" height="236">
</p>
</div>
</div>
</div>
</div>
</div>
<div class="card-footer">Made by>(AI.BigData 취업역량강화)_wls</div>
</div>
</body>
</html>
# 02. LoginController(로그인컨트롤러 만들기)
- LoginController.java 로 로그인 기능 구현되는 클래스 파일 생성
package kr.smhrd.controller;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import kr.smhrd.entity.Member;
import kr.smhrd.repository.BoardMapper;
//Controller API 기능 오버라이딩 시키기
@Controller
public class LoginController
{
@Autowired
private BoardMapper mapper;
// 01. 로그인 기능 구현하기!
@RequestMapping("/login.do")
public String login(Member member , HttpSession session) //memId, memPwd
{
Member m = mapper.login(member);
//m의 값이 null이면 로그인 실패! , m의 값이 들어있으면 로그인 성공!
if(m != null)
{
session.setAttribute("m",m);
}
return "redirect:/list.do";
}
}
# 03. LoginMapper(로그인맵퍼 만들기)
- 기존에 있던 BoardMapper.java에 login 메서드 추가하기!
package kr.smhrd.repository;
import java.util.List;
import com.mysql.fabric.xmlrpc.base.Member;
import kr.smhrd.entity.Board;
// JDBC API(CRUD) -> 생산성이 떨어진다 , 유지 보수가 어렵다 (Java+SQL 둘다 고려해야함)
//=> 대안: MyBatis Framework 이용 : Java <-----분리개발(mapping)-----> SQL(xml파일로 만들기!)
public interface BoardMapper {
//1. 전체 게시판 정보 리스트를 가져오는 메소드
public List<Board> getList(); //select SQL~
//2. 글쓰기 등록하는 메서드 // insert SQL~
public void register(Board vo);
//3. 상세보기 메소드 -> 우리가 게시물을 누르면 거기로 이동시켜줌!
public Board get(int idx); //select SQL~
// 4. 게시글 삭제하기 메소드
public void remove(int idx);
// 5. 게시글 정보 수정하기 메소드
public void updateForm(int idx); //delete SQL~
// 6. 게시글 업데이트 메소드
public void update(Board vo); //update SQL~
// 7. 조회수 누적
public void countUpdate(int idx); //update SQL~
//=================== 로그인 페이지 만들기 ==============================
//8. 로그인 페이지 만들기
public Member login(Member member); //select SQL ~
}
- 기존에 있던 BoardMapper.xml 파일에 로그인 정보 출력하는 SQL 코드 생성
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- Mapper : 내가 연결시킬 파일의 주소와 파일명을 입력해줌! -->
<mapper namespace="kr.smhrd.repository.BoardMapper">
<!-- SQL 쿼리를 이제 여기 안에다가 사용하면 됨! -->
<!-- 1. board table 모든 게시물을 가져오는 sql -->
<!-- select는 검색한 결과를 가져와야하기때문에 resultType으로 Board타입 가져옴! -->
<select id="getList" resultType="kr.smhrd.entity.Board">
select * from board order by idx desc
</select>
<!-- 2. 글 쓴 내용들 삽입해주는 register 구문 만들기! -->
<!-- 파라미터가 어떤 타입에 있는지 알아야기 때문에 파라미터타입으로 가져오면됨 -->
<insert id = "register" parameterType = "kr.smhrd.entity.Board">
insert into board(title, content, writer)
values(#{title},#{content},#{writer})
</insert>
<!-- 3. 상세보기 - 게시물의 내용을 다 가져오는 것 -->
<!-- parameter 타입과 resulttype을 다 가져올 수 있음!
하지만 하나만 가져올때는 필요없음 => 데이터 타입이 하나기때문에!
-->
<select id="get" resultType="kr.smhrd.entity.Board" parameterType="int">
select * from board where idx = #{idx}
</select>
<!-- 4. 게시물 삭제하기 기능 - 해당 idx 선택 시 그 게시물 삭제! -->
<delete id="remove" parameterType="int">
delete from board where idx= #{idx}
</delete>
<!-- 5. 게시물 수정하기 기능 - 해당 idx에서 그 게시물 수정기능 -->
<update id="update" parameterType="kr.smhrd.entity.Board" >
update board SET title=#{title},content= #{content} WHERE idx = #{idx}
</update>
<update id="countUpdate" >
update board SET count = count + 1 where idx = #{idx}
</update>
<!-- =============================로그인 기능 구현하기======================= --> -->
<!-- 1. 로그인 기능 구현하기 -->
<select id="login" resultType="kr.smhrd.entity.Member"
parameterType = "kr.smhrd.entity.Member">
select * from member where memId=#{memId} and memPwd = #{memPwd}
</select>
</mapper>
728x90