본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 67일차 (2023-08-28) 자바 프로그래밍_64. JSP를 이용하여 MVC 모델1 구조로 변경하기(계속)_JSTL_개인프로젝트 - 마트 관리

by prometedor 2023. 8. 28.
## 64. JSP를 이용하여 MVC 모델1 구조로 변경하기

- MVC 모델1 특징 이해
- JSP 구동 원리 이해 및 사용법
- EL 사용법
- JSTL 사용법

 

JSTL 라이브러리 추가하기

build.gradle (app-server)

=>

ㄴ 코끼리 아이콘 선택

=>

ㄴ 또는  프로젝트 우클릭 > Reload Gradle Project 선택

=>

ㄴ Project 선택

=>

ㄴ 외부 라이브러리 등록됨을 확인

=>

ㄴ App 실행

=>

login.jsp

ㄴ 해당 코드 모두 jstl 로 변경해주기

=>

login.jsp

ㄴ 해당 태그 라이브러리 선언해주기

=>

login.jsp

ㄴ request.setAttribute("refresh", "2;url=/auth/form.jsp"); 대신 위와 같은 jstl 코드 사용하기

=>

login.jsp

ㄴ <jsp:useBean> 태그는 JSP 페이지에서 JavaBean 객체를 생성하고 설정하는 데 사용

=>

login.jsp

ㄴ <c:set> 태그를 사용하여 JavaBean 객체의 속성을 설정

ㄴ JavaBean 객체(m)에 대한 phone과 password 속성을 설정

=>

login.jsp

ㄴ <c:if> 태그: Core JSTL 라이브러리에서 제공하는 조건문을 처리하는 태그

=>

login.jsp

ㄴ 해당 자바 코드는 이제 jstl 로 변경되었으므로 제거

=>

login.jsp

ㄴ Member loginUser = memberDao.findByPhoneAndPassword(m); 대신 sessionScope 에 loginUser 라는 이름으로 memberDao.findByPhoneAndPassword(m) 값을 담도록 함

=>

login.jsp

ㄴ 로그인한 사용자의 정보를 세션에 저장하고 이 정보를 다른 부분에서 사용할 수 있도록 함

=>

login.jsp

ㄴ response.sendRedirect("/"); 대신 위와 같은 jstl 코드 추가

=>

login.jsp

ㄴ 해당 코드 제거

=>

login.jsp

ㄴ 해당 코드를 jstl 태그로 변경

=>

login.jsp

ㄴ 변경한 jstl 코드

=>

login.jsp

ㄴ 해당 코드 제거

 

 

 

ㄴ App 실행

=>

ㄴ 에러 발생

=>

login.jsp

ㄴ name 대신 var 를 이용하도록 함

=>

login.jsp

<%@ page
    language="java"
    pageEncoding="UTF-8"
    contentType="text/html;charset=UTF-8"
    trimDirectiveWhitespaces="true"
    errorPage="/error.jsp"%>
<%@ page import="bitcamp.report.dao.MemberDao"%>
<%@ page import="bitcamp.report.vo.Member"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:set var="refresh" value="2;url=/auth/form.jsp" scope="request"/>

<jsp:useBean id="m" class="bitcamp.report.vo.Member" scope="page"/>
<c:set target="${pageScope.m}" property="phone" value="${param.phone}"/>
<c:set target="${pageScope.m}" property="password" value="${param.password}"/>

<c:if test="${not empty param.savePhone}">
  <%
    Cookie cookie = new Cookie("phone", m.getPhone());
    response.addCookie(cookie);
  %>
</c:if>

<c:if test="${empty param.savePhone}">
  <%
    Cookie cookie = new Cookie("phone", "no");
    cookie.setMaxAge(0);
    response.addCookie(cookie);
  %>
</c:if>

<jsp:useBean id="memberDao" type="bitcamp.report.dao.MemberDao" scope="application"/>
<c:set var="loginUser" value="${memberDao.findByPhoneAndPassword(m)}" scope="session"/>


<jsp:useBean id="loginUser" type="bitcamp.report.vo.Member" scope="session"/>
<c:redirect url="/"/>

=>

ㄴ 로그인이 정상적으로 실행됨을 확인



Member.java (common)

ㄴ 우클릭 > Generate 선택 > toString() 선택 (단축키 : command + N) 

=>

ㄴ [OK] 선택

=>

Member.java (common)

ㄴ 해당 코드가 추가됨

=>

ㄴ 전화번호 저장 체크박스 선택

=>

ㄴ 로그아웃 후에 로그인 선택 시 전화번호가 저장되어있음을 확인

 

 

 

header.jsp

ㄴ jstl 태그 라이브러리 설정을 추가

=>

header.jsp

ㄴ <c:choose> 태그 이용하여 다중 조건문 만들기

ㄴ EL 태그 이용하기

=>

header.jsp

=>

header.jsp

=>

header.jsp

ㄴ EL 태그 대신 <c:when> 태그와 <c:otherwise> 이용하여 다중 조건문 처리

=>

header.jsp

ㄴ jsp 태그 제거

=>
header.jsp

ㄴ jstl 태그로 변경하기

=>
header.jsp

ㄴ .photo 추가

=>

=>

ㄴ 사진이 존재하지 않는 회원의 로그인 확인

=>

ㄴ 사진이 존재하는 회원의 로그인

 

 

logout.jsp

ㄴ jstl 태그 설정 추가

=>

logout.jsp

ㄴ response.sendRedirect("/"); 대신 jstl 태그로 변경

=>

=>

ㄴ 로그아웃 정상적으로 실행됨을 확인

=>
login.jsp

ㄴ 해당 코드 제거

ㄴ import 코드 정리

 

 

board/list.jsp

ㄴ jstl 태그 설정 추가

=>

board/list.jsp

ㄴ 페이지를 로드한 후 2초 후에 list.jsp 페이지로 이동하고, URL에 category 파라미터를 포함하도록 함

=>

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ requestScop.refresh 값 출력해보기

=>

ㄴ 값이 정상적으로 넘어감을 확인

=>

board/list.jsp

=>

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ <c:forEach> 태그 사용하기

ㄴ board 라는 이름으로 list 를 pageContext 에 저장

=>

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ list 내용이 출력되지 않는 현상 발생

=>

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ param. 추가해주기

=>

ㄴ 리스트가 정상적으로 출력됨을 확인

=>

board/list.jsp

ㄴ 해당 코드 제거

=>

board/list.jsp

ㄴ fmt 태그 라이브러리 추가 (포맷 설정)

=>

board/list.jsp

ㄴ simpleDateFormatter 대신 <fmt:formatDate> 태그 이용하기

=>

board/list.jsp

ㄴ 이제 SimpleDateFormat 을 사용하지 않으므로 해당 코드 제거

=>

board/list.jsp

ㄴ 해당 코드 제거

ㄴ import 코드 정리

=>

board/list.jsp

ㄴ errorPage 설정 추가

 

 

board/detail.jsp

ㄴ 태그 라이브러리 추가

=>

board/detail.jsp

ㄴ 해당 코드 추가

=>

board/detail.jsp

ㄴ 해당 코드 제거

=>

board/detail.jsp

ㄴ 해당 코드 추가

=>

=>

board/detail.jsp

ㄴ EL 태그를 jstl 로 변경해주기

=>

board/detail.jsp

ㄴ <c:if> 태그 이용하기

=>

board/detail.jsp

ㄴ <c:forEach> 태그 이용하기

=>

board/detail.jsp

ㄴ 해당 코드 제거

=>

board/detail.jsp

ㄴ import 코드 정리

=>

board/detail.jsp

ㄴ 해당 코드 제거

=>

board/detail.jsp

ㄴ 해당 코드 제거

=>

board/detail.jsp

ㄴ 조회수를 jstl 을 이용하여 처리하도록 변경

=>

board/detail.jsp

ㄴ 해당 코드 제거

=>

board/detail.jsp

ㄴ 해당 코드 제거

=>

board/detail.jsp

ㄴ 해당 코드는 jstl 로 변경할 수 없으므로 그대로 두기

=>

ㄴ 게시물 상세보기 정상적으로 출력됨

=>

ㄴ 게시글 내용 변경 > [변경] 선택

=>

ㄴ 로그인 되어있지 않은 경우 로그인 창으로 이동됨

=>

ㄴ 게시글 수정이 정상적으로 실행됨을 확인

 

 

ㄴ App.java 우클릭 > More Run/Debug > Modify Run Configuratioin... 선택

=>

ㄴ Working directory 경로 변경해주기

=>

App.java

ㄴ app-server 추가해주기

=>

App.java

ㄴ app-server 추가해주기

=>

ㄴ index2.html 삭제

=>

ㄴ 정상적으로 실행됨을 확인

 

=>

member 도 board 와 동일한 방법으로 수정해주기

=>

member/list.jsp

<%@ page
    language="java"
    pageEncoding="UTF-8"
    contentType="text/html;charset=UTF-8"%> <%-- directive element --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>회원</title>
</head>
<body>

<jsp:include page="../header.jsp"/>

<h1>회원 목록</h1>
<div style='margin:5px;'>
<a href='/member/form.jsp'>새 회원</a>
</div>
<table border='1'>
  <tr><th>번호</th> <th>이름</th> <th>전화번호</th></tr>
</thead>
<tbody>
<jsp:useBean id="memberDao" type="bitcamp.report.dao.MemberDao" scope="application"/>
<c:set var="list" value="${memberDao.findAll()}" scope="page"/>
<c:forEach items="${list}" var="member">
    <tr>
    <td>${member.no}</td>
    <td>
        <img src='http://urnfabxxeceu19010753.cdn.ntruss.com/member/${member.photo}?type=f&w=30&h=40&faceopt=true&ttype=jpg'>
        <a href='/member/detail.jsp?no=<%=m.getNo()%>'>${member.name}</a></td>
    <td>${member.phone}</td></tr>
</c:forEach>
</tbody>
</table>
<a href='/'>메인</a>

<jsp:include page="../footer.jsp"/>

</body>
</html>

 

member/detail.jsp

<%@ page
    language="java"
    pageEncoding="UTF-8"
    contentType="text/html;charset=UTF-8"
    trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<jsp:useBean id="memberDao" type="bitcamp.report.dao.MemberDao" scope="application"/>
<c:set var="member" value="${memberDao.findBy(param.no)}"/>

<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
<title>회원</title>
</head>
<body>

<jsp:include page="../header.jsp"/>

<h1>회원</h1>
<c:if test="${empty member}">
    <p>해당 번호의 회원이 없습니다!</p>
</c:if>
<c:if test="${not empty member}">
    <form action='/member/update.jsp' method='post' enctype='multipart/form-data'>
    <table border='1'>
    <tr>
        <th style='width:120px;'>사진</th>
        <td style='width:300px;'>
            <c:if test="${empty member.photo}">
                <img style='height:80px' src='/images/avatar.png'>
            </c:if>
            <c:if test="${not empty member.photo}">
                <a href='https://kr.object.ncloudstorage.com/bitcamp-nc7-bucket-25/member/${member.photo}'>
                    <img src='http://urnfabxxeceu19010753.cdn.ntruss.com/member/${member.photo}?type=f&w=60&h=80&faceopt=true&ttype=jpg'>
                </a>
            </c:if>
            <input type='file' name='photo'></td></tr>
    <tr>
        <th style='width:120px;'>번호</th>
        <td style='width:300px;'><input type='text' name='no' value='${member.no}' readonly></td></tr>
    <tr>
    <th>이름</th>
    <td><input type='text' name='name' value='${member.name}'></td></tr>
<tr>
    <th>전화번호</th>
    <td><input type='tel' name='phone' value='${member.phone'></td></tr>
<tr>
    <th>암호</th>
    <td><input type='password' name='password'></td></tr>
<tr>
    <th>직책</th>
    <td><select name='position'>
        <option value='0' ${String.valueOf(member.getPosition()) == '0' ? "selected" : ""}>관리자</option>
        <option value='1' ${String.valueOf(member.getPosition()) == '1' ? "selected" : ""}>일반직원</option></select></td></tr>
  </table>

  <div>
  <button>변경</button>
  <button type='reset'>초기화</button>
        <a href='/member/delete.jsp?no=${member.no}'>삭제</a>
  <a href='/member/list.jsp'>목록</a>
  </div>
  </form>
</c:if>
<jsp:include page="../footer.jsp"/>

</body>
</html>

 

member/detail.jsp