성장 기록 블로그🌴

## 자바 스프링 ( 자바 스프링 게시판 홈페이지 , 로그아웃 기능 구현 , 스프링 프로필 사진 추가하기 , 스프링 본인 글만 수정 삭제 , 스프링 로그인 후 글쓰기 , 자바 스프링 게시판 페이지 총 .. 본문

AI & BigData 교육과정/자바 Spring & SQL 관련

## 자바 스프링 ( 자바 스프링 게시판 홈페이지 , 로그아웃 기능 구현 , 스프링 프로필 사진 추가하기 , 스프링 본인 글만 수정 삭제 , 스프링 로그인 후 글쓰기 , 자바 스프링 게시판 페이지 총 ..

wlswls2s 2022. 10. 22. 09:53
728x90

< 자바스프링  내용 >

 


◆ 자바 스프링 기본

개념정리

 

# 1. 로그아웃 기능 구현하기

- list.jsp에서 로그인을 하고 난 후에 로그아웃 버튼이 보이고 로그아웃 버튼을 누르면 logout.do로 보내기

- 주의해야할게 우리가 button을 누르면 글쓰기 버튼으로 가도록 해놨기때문에 button type을 submit으로 해야지 우리가 요청한 logout.do로 이동함! 이 점을 주의하기!

< list.jsp >

 	<form action="logout.do" method="post">
               	 <!-- button 타입을 button으로 해버리면 우리가 button을 눌렀을땐 글쓰기로 넘어가기때문에 
               	 	 타입을 submit으로 해야지 다시 main으로 돌아옴!
               	 -->
                 <button type="submit" class="btn btn-sm btn-primary form-control">로그아웃</button>
               </form>

< LoginController.java> - 로그아웃 메소드 추가

@RequestMapping("/logout.do")
	public String logout(HttpSession session) 
	{
		// 현재 만들어져있는 세션을 가지고 오기!! - 이 공간을 무효화시키면 로그아웃됨!
		
		// 세션 무효화
		session.invalidate(); // 무효화(로그아웃)
		return "redirect:/list.do";
	}

< BoardMapper.java > - 로그아웃 인터페이스 추상메소드 추가

//=================== 로그인 페이지 만들기 ==============================
	//8. 로그인 페이지 만들기
	public Member login(Member member); //select SQL ~
	
	//9. 로그아웃 페이지 만들기
	public String logout(HttpSession session);

# 2. 로그인 해야지만 글쓰기 버튼 나타나게하기

<c:if test="${!empty m}" >
       <button class="btn btn-sm btn-primary">글쓰기</button>
       </c:if>

-=> 조건문으로만 넣어주면됨!

< 전체 list.jsp 코드>

<%@ 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!!<br><br>
               <img src="resources/img/img7.jfif" class="img-circle" alt="Cinque Terre" width="180" height="200">
               	
               </p>
               	<form action="logout.do" method="post">
               	 <!-- button 타입을 button으로 해버리면 우리가 button을 눌렀을땐 글쓰기로 넘어가기때문에 
               	 	 타입을 submit으로 해야지 다시 main으로 돌아옴!
               	 -->
                 <button type="submit" class="btn btn-sm btn-primary form-control">로그아웃</button>
               </form>
               </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>
       <c:if test="${!empty m}" >
       <button class="btn btn-sm btn-primary">글쓰기</button>
       </c:if>
             </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">  페이지 내용을 작성하세요. 
              </p>
              </div>
              </div>
           </div>
       </div>
    </div>
    <div class="card-footer">Made by>(AI.BigData 취업역량강화)_wls</div>
  </div>

</body>
</html>

# 3. 글 작성 시에 로그인 한 사람의 회원이름은 고정시켜주기!

- register.jsp -

 <div class="form-group">
		    <label for="writer">작성자:</label>
		    <input type="text" class="form-control" value= "${m.memName}" readonly= "readonly" name="writer">
		  </div>

# 4.  로그인 사용자마다 프로필 이미지 다르게 출력하기!

 <!-- 로그인 성공코드 : m에 값이 있다면! !empty m -->
               <c:if test="${!empty m}">
                <h4 class="card-title">${m.memName}님의 페이지</h4>
               <p class="card-text">회원님 Welcome!!<br><br>
               
               <c:choose>
               <c:when test="${m.memName eq '길동이'}">
                 <img src="resources/img/img7.jfif" class="img-circle" alt="Cinque Terre" width="180" height="200">
               
               </c:when>
               <c:when test="${m.memName eq '뽀로로'}">
                 <img src="resources/img/pororo.jpg" class="img-circle" alt="Cinque Terre" width="180" height="200">
               
               </c:when>
               <c:otherwise>    
               	 <img src="resources/img/mungmung.jpg" class="img-circle" alt="Cinque Terre" width="180" height="200">
            
               </c:otherwise>

				</c:choose>
				</p>
               	<form action="logout.do" method="post">
               	 <!-- button 타입을 button으로 해버리면 우리가 button을 눌렀을땐 글쓰기로 넘어가기때문에 
               	 	 타입을 submit으로 해야지 다시 main으로 돌아옴!
               	 -->
                 <button type="submit" class="btn btn-sm btn-primary form-control">로그아웃</button>
               </form>
               </c:if>

# 자신의 글일때만 수정, 삭제 가능하게 하기!

 <!-- 본인 아이디일때만 글 수정과 삭제가 가능하게 하기! eq함수 사용 -->
	 	 <c:if test="${m.memId eq vo.memId}">
		 <!-- data-id : html5에서 data로 시작하는 속성을 지정하도록 권고하기 위해 사용하는 것  -->
		 <!-- data-oper : data-id랑 마찬가지로 html5에서 쓰는 규칙같은 것임 이 버튼은 기능에 가까우니 oper로!-->
		 <button type = "button" data-oper= "update"  class="btn btn-sm btn-primary">수정</button>
		 <button type = "button" data-oper = "remove"  class="btn btn-sm btn-warning">삭제</button>
		</c:if>
		
		<!--  본인 아이디가 아니면 글 수정과 삭제 불가능하게 하기! ne함수 사용, disabled로 막아놓기! -->
		 <c:if test="${m.memId ne vo.memId}">
		 <!-- data-id : html5에서 data로 시작하는 속성을 지정하도록 권고하기 위해 사용하는 것  -->
		 <!-- data-oper : data-id랑 마찬가지로 html5에서 쓰는 규칙같은 것임 이 버튼은 기능에 가까우니 oper로!-->
		 <button type = "button" data-oper= "update" disabled="disabled" class="btn btn-sm btn-primary">수정</button>
		 <button type = "button" data-oper = "remove" disabled="disabled" class="btn btn-sm btn-warning">삭제</button>
		</c:if>

 => 본인의 글에는 수정, 삭제가 잘 뜨는 것을 확인할 수 있음

=> 다른 사람 글에는 수정, 삭제버튼은 안눌리고 목록 버튼만 눌러짐

 

< if문으로 안하고 삼항연산자로도 가능 >

 

 

# 5. jsp: include page 를 활용하여 각각 기능에 맞는 페이지로 보여주게 하기!

- 각각 상세페이지, 글 수정 페이지 , 메인 페이지에 저 틀을 넣어서 각각에 맞는 페이지 기능을 넣어주면 항상

- 항상 왼쪽에 보여 줄 목록과 오른쪽에 보여줄 목록 고정시켜놓을 수 있음 

<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">
          		<!--  로그인 창 코드 : left.jsp -->
          		<!-- jsp 액션코드 include page 로 가져올 jsp를 하면 쉽게 됨!-->
    			<jsp:include page="left.jsp"/>   			  
          </div>
          <div class = "col-lg-7">
				<jsp:include page="template.jsp"/>
   		 </div>
    <div class="card-footer">Made by>(AI.BigData 취업역량강화)_wls</div>
  </div>

</body>

SpringMVC02.zip
0.11MB

 

728x90