공부의 기록/자바 풀 스택 : 수업내용정리

자바 풀 스택 1/7 오전 기록 032-1

파티피플지선 2025. 1. 7. 15:48

9:15 경 학원 도착

 

 

 

 

 

<9:30 1교시>

서버를 깃허브에 올려보기.

 

gitignore에 붙여 넣을 내용 중에는 jar만 제외하고 ignore 한다고 참고

더보기
/.metadata/

.classpath
.project

#Servers 폴더도 제외하기

/Servers/

# upload 폴더에 업로드된 파일을 추적하지 않도록 설정
upload/

# Created by https://www.toptal.com/developers/gitignore/api/java,eclipse,windows,web,maven
# Edit at https://www.toptal.com/developers/gitignore?templates=java,eclipse,windows,web,maven

### Eclipse ###
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.recommenders

# External tool builders
.externalToolBuilders/

# Locally stored "Eclipse launch configurations"
*.launch

# PyDev specific (Python IDE for Eclipse)
*.pydevproject

# CDT-specific (C/C++ Development Tooling)
.cproject

# CDT- autotools
.autotools

# Java annotation processor (APT)
.factorypath

# PDT-specific (PHP Development Tools)
.buildpath

# sbteclipse plugin
.target

# Tern plugin
.tern-project

# TeXlipse plugin
.texlipse

# STS (Spring Tool Suite)
.springBeans

# Code Recommenders
.recommenders/

# Annotation Processing
.apt_generated/
.apt_generated_test/

# Scala IDE specific (Scala & Java development for Eclipse)
.cache-main
.scala_dependencies
.worksheet

# Uncomment this line if you wish to ignore the project description file.
# Typically, this file would be tracked if it contains build/dependency configurations:
#.project

### Eclipse Patch ###
# Spring Boot Tooling
.sts4-cache/

### Java ###
# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# /WEB-INF/lib/ 폴더 안에 있는 jar 파일은 예외로 하기

!**/WEB-INF/lib/*.jar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*

### Maven ###
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar

# Eclipse m2e generated files
# Eclipse Core
.project
# JDT-specific (Eclipse Java Development Tools)
.classpath

### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

# End of https://www.toptal.com/developers/gitignore/api/java,eclipse,windows,web,maven

 

프로젝트 이름에다가 우클릭 > Team > Add to Index 하면 해당 프로젝트만 스테이지에 올라간다.

 

스테이지에 올려만 놓는거는 현재 폴더의 git에 commit 된 상태고 아직 remote 연결은 안 된 상태여서 문제될 거 없음.

 

집 환경에서 새로 Server 연결하고 올린 다음에 여기에서 git clone 하고 clone 할 경로 찾아서 연결하면 됨.

 

import 하고 나면 에러가 나는데 웹프로젝트 모양을 갖추고 있지 않아서 그럼. 

웹 프로젝트로 만드는 방법 (우리가 공부하던 자바 21버전+다이나믹 웹 모듈 6.0버전)

마우스 우클릭 > properties > Project Facets > convert to faceted mode> java 클릭, 우측에 runtime에서 apache Tomcat 선택, 왼쪽에 dynamic web module ver6.0 선택 > apply and close

하면 웹 프로젝트의 모양을 갖춰서 에러가 사라져 있음

 

 

 

 

 

<10:30 2교시>

어제 수정 기능하던거 이어서

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/member/updateform.jsp</title>
</head>
<body>
	<div class="container">
		<h1>회원정보 수정 폼</h1>
		<form action="update.jsp" method="post">
			<div>
				<label for="num">번호</label>
				<input type="text" name="num" id="num"/>
			</div>
			<div>
				<label for="name">이름</label>
				<input type="text" name="name" id="name"/>
			</div>
			<div>
				<label for="addr">주소</label>
				<input type="text" name="addr" id="addr"/>
			</div>
			<button type="submit">저장</button>
		</form>
	</div>
</body>
</html>

 

Dao에 추가한 코드 : 이게 없어서 못하고 있었다... ㅠㅠ

//매개변수로 전달되는 회원 한명의 정보를 리턴하는 메소드
	public MemberDto getData(int num){
		MemberDto dto=null;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			//Connection Pool 로 부터 Connection 객체 하나 가져오기 
			conn = new DbcpBean().getConn();
			//실행할 sql 문 작성
			String sql = """
					select num, name, addr
					from member
					where num=?
					""";
			pstmt = conn.prepareStatement(sql);
			// ? 에 값 바인딩할게 있으면 여기서 하기
			pstmt.setInt(1, num);
			//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
			rs = pstmt.executeQuery();
			while (rs.next()) {
				dto=new MemberDto();
				dto.setNum(num);
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e) {
			}
		}
		return dto;
	}

 

 

<%@page import="test.member.dao.MemberDao"%>
<%@page import="test.member.dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//Get 방식 파라미터로 전달되는 회원 번호 추출(updateform.jsp?num=x)
	int num= Integer.parseInt(request.getParameter("num"));
	//num에 해당하는 회원 정보를 MemberDao 객체를 이용해서 얻어온다
	MemberDto dto=new MemberDao().getData(num);
	//아래의 내용으로 응답된다


%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/member/updateform.jsp</title>
</head>
<body>
	<div class="container">
		<h1>회원정보 수정 폼</h1>
		<form action="update.jsp" method="post">
			<div>
				<label for="num">번호</label>
				<input type="text" name="num" id="num" value="1"/>
			</div>
			<div>
				<label for="name">이름</label>
				<input type="text" name="name" id="name" value="이름"/>
			</div>
			<div>
				<label for="addr">주소</label>
				<input type="text" name="addr" id="addr" value="주소"/>
			</div>
			<button type="submit">저장</button>
		</form>
	</div>
</body>
</html>

 

updateform.jsp

<%@page import="test.member.dao.MemberDao"%>
<%@page import="test.member.dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//Get 방식 파라미터로 전달되는 회원 번호 추출(updateform.jsp?num=x)
	int num= Integer.parseInt(request.getParameter("num"));
	//num에 해당하는 회원 정보를 MemberDao 객체를 이용해서 얻어온다
	MemberDto dto=new MemberDao().getData(num);
	//아래의 내용으로 응답된다


%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/member/updateform.jsp</title>
</head>
<body>
	<div class="container">
		<h1>회원정보 수정 폼</h1>
		<form action="update.jsp" method="post">
			<div>
				<label for="num">번호</label>
				<input type="text" name="num" id="num" value="<%=dto.getNum()%>" readonly/>
			</div>
			<div>
				<label for="name">이름</label>
				<input type="text" name="name" id="name" value="<%=dto.getName() %>"/>
			</div>
			<div>
				<label for="addr">주소</label>
				<input type="text" name="addr" id="addr" value="<%=dto.getAddr() %>"/>
			</div>
			<button type="submit">저장</button>
			<button type="reset">취소</button>  <!-- 작성하던 내용을 원래 상태로 되돌림 -->
		</form>
	</div>
</body>
</html>

 

 

 

 

 

 

우리는 개발자니까 출력한대로 잘 나온다고 안심하지말고 소스까지 살펴볼 필요가 있다.

<11:30 3교시>

<%@page import="test.member.dao.MemberDao"%>
<%@page import="test.member.dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%


//1. 폼으로 전송되는 번호, 이름과 주소 추출
	int num=Integer.parseInt(request.getParameter("num"));
	String name=request.getParameter("name");
	String addr=request.getParameter("addr");
//2. MemberDto 객체에 담기
	MemberDto dto = new MemberDto(num, name, addr);

//2. DB에 수정하기
	MemberDao dao=new MemberDao();
	boolean isSuccess=dao.update(dto);
	//new MemberDao().update(dto)라고 해도 됨
//3. 응답하기
    
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<div class="container">
		<h3>알림</h3>
		<%if(isSuccess){%>
			<p>정보를 수정했습니다.</p>
			<a href="list.jsp">목록보기</a>
		<%}else{%>
			<p>데이터 수정 실패</p>
			<a href="updateform.jsp">다시 작성</a>
		<%}%>
	</div>
</body>
</html>

 

update.jsp

처음에 script 태그를 닫지 않아서 오류가 났고,

alert("");쌍따옴표랑 세미콜론 안써서 알림창이 보이지 않았었음

<%@page import="test.member.dao.MemberDao"%>
<%@page import="test.member.dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%


//1. 폼으로 전송되는 번호, 이름과 주소 추출
	int num=Integer.parseInt(request.getParameter("num"));
	String name=request.getParameter("name");
	String addr=request.getParameter("addr");
//2. MemberDto 객체에 담기
	MemberDto dto = new MemberDto(num, name,addr);

//2. DB에 수정하기
	boolean isSuccess=new MemberDao().update(dto);
//3. 응답하기
    
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<script>
		<%if(isSuccess){%>
			//알림창을 띄우고
			alert("정보를 수정했습니다");
			//list.jsp 페이지로 이동
			location.href="list.jsp"
		<%}else{%>
			//알림창을 띄우고
			alert("정보 수정 실패");
			//updateform.jsp 페이지로 이동하면서 num이라는 파라미터명으로 수정할 회원의 번호를 가지고 간다
			location.href="updateform.jsp?num=<%=num%>";
		<%}%>
		
	</script>
</body>
</html>

 

 

 

오늘의 과제가 주어짐 (12:10~15:30)

<맛집 목록만들기>

1. 데이터베이스에 테이블 만들기

2. 데이터베이스에 시퀀스 만들기

+ 과제 : <select> 요소를 이용해서 음식을 한식, 중식, 양식, 일식, 기타 중에서 고르게 하기

 

이후 작업 계획

1. 이클립스에서 webapp 하위 폴더로 food 폴더를 만들고

2. java에

   - test.food.dto 패키지에 FoodDto.java

   - test.food.dao 패키지에 FoodDao.java

3. jsp 파일들 만들기

  /food/list.jsp

  /food/insertform.jsp

  /food/insert.jsp

  /food/updateform.jsp

  /food/update.jsp

  /food/delete.jsp

 

 

 

FoodDto

package test.food.dto;

public class FoodDto {

	private int num;
	private String type;
	private String name;
	private int price;
	
	public FoodDto() {}

	public FoodDto(int num, String type, String name, int price) {
		super();
		this.num = num;
		this.type = type;
		this.name = name;
		this.price = price;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
	
	
	
	
	
}

list.jsp

<%@page import="java.util.List"%>
<%@page import="test.food.dto.FoodDto"%>
<%@page import="test.food.dao.FoodDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	//FoodDao 객체의 getList로 목록 가져오기
	FoodDao dao =new FoodDao();
	List<FoodDto> list= dao.getList();
%>
    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div class="container">
		<a href="insertform.jsp">목록에 추가</a>
		<table>
			<thead>
				<tr>
					<th>번호</th>
					<th>종류</th>
					<th>이름</th>
					<th>가격</th>
					<th>수정</th>
					<th>삭제</th>
				</tr>
			</thead>
			<tbody>
				<% for(FoodDto tmp:list){ %>
				<tr>
					<td><%=tmp.getNum() %></td>
					<td><%=tmp.getType() %></td>
					<td><%=tmp.getName() %></td>
					<td><%=tmp.getPrice() %></td>
					<td><a href="updateform.jsp?num=<%=tmp.getNum()%>">수정</a></td>
					<td><a href="delete.jsp?num=<%= tmp.getNum()%>">삭제</a></td>
				</tr>
				<%} %>
			</tbody>
		</table>
	</div>
</body>
</html>

 

 

 

 

 

<12:30 4교시>

 

 

 

 

하던 중에 에러난 부분

 

 

테이블 구성 부분