
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- json-simple 라이브러리 -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>10.1.8</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 파일 업로드/다운로드 관련 라이브러리 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.5</version>
</dependency>
#주석
#/src/main/resources/application.properties 환경설정
# Spring Boot 는 WAS 내장( 기본 PORT 8080)
# 톰캣 서버의 Http port 변경
server.port=9095
#주의사항 Thymeleaf, Mustache, JSP는 공동으로 사용할 수 없음
#JSP를 뷰페이지로 사용할 경우 라이브러리를 POM.XML에 라이브러리 추가
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
#JSP페이지가 수정이 되면 자동으로 서버 재시작
server.servlet.jsp.init-parameters.development=true
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=system
spring.datasource.password=1234
#cafe24서버 MariaDB연결
#spring.datasource.driverClassName=org.mariadb.jdbc.Driver
#spring.datasource.url=jdbc:mariadb://localhost:3306/jqrkp7
#spring.datasource.username=jqrkp7
#spring.datasource.password=aq!35476396
#파일 업로드 용량 제한
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB

라이브러리는 준비되었으나 그에 대한 세부설정을 하지 않는 경우 오류 발생
package kr.co.mymelon.mediagroup;
public class MediagroupDTO {
private int mediagroupno;
private String title;
public MediagroupDTO() {}
public int getMediagroupno() {
return mediagroupno;
}
public void setMediagroupno(int mediagroupno) {
this.mediagroupno = mediagroupno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "MediagroupDTO [mediagroupno=" + mediagroupno + ", title=" + title + "]";
}
}
package kr.co.mymelon.mediagroup;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class MediagroupCont {
public MediagroupCont() {
System.out.println("MediagroupCont()객체 생성됨");
}
//미디어 그룹 쓰기 페이지 호출
// http://localhost:9095/mediagroup/create.do
@RequestMapping(value="mediagroup/create.do", method = RequestMethod.GET)
public String createForm() {
return "mediagroup/createForm";
// WEB-INF/views/mediagroup/createForm.jsp
}
}
테이블 생성(CRUD)
package kr.co.mymelon.mediagroup;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
//import org.springframework.stereotype.Service;
@Repository //모델 클래스로 지정. 스프링컨테이너가 자동으로 객체 생성해 준다
// @Service
public class MediaGroupDAO {
//DBopen dbopen=new DBopen()과 동일한 형태
//@Autowired 스프링 컨테이너가 생성해 준 객체를 연결
@Autowired
private JdbcTemplate jt;
StringBuilder sql=null;
public MediaGroupDAO() {
System.out.println("MediaGroupDAO()객체 생성됨");
}
public int create(MediagroupDTO dto) {
int cnt=0;
try {
sql = new StringBuilder();
sql.append(" insert into mediagroup(mediagroupno,title) ");
sql.append(" values(mediagroup_seq.nextval,?) ");
//insert,update,delete 실행
cnt=jt.update(sql.toString(),dto.getTitle());
}catch (Exception e) {
System.out.println("미디어 그룹등록 실패"+e);
}
return cnt;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>createForm</title>
<style>
* {
font-family: gulim;
font-size: 25px;
}
</style>
<link href="../css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="title">미디어 그룹 등록</div>
<form name="frm" method="post" action="create.do">
<table class='table'>
<tr>
<th>미디어 그룹 제목</th>
<td><input type='text' name='title' size='50' value='2023년 댄스 음악'></td>
</tr>
</table>
<div class="bottom">
<input type="submit" value="등록">
<input type="button" value="목록" onclick="location.href='list.do'">
</div>
</form>
</body>
</html>

DB 생성 확인

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>list</title>
<style>
* {
font-family: gulim;
font-size: 25px;
}
</style>
<link href="../css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="title">미디어 그룹 목록</div>
<div class="content">
<input type="button" value="그룹등록" onclick="location.href='create.do'">
</div>
<c:if test="${requestScope.count==0}">
<table>
<tr>
<td>게시판에 글 없음</td>
</tr>
</table>
</c:if>
<c:if test="${requestScope.count>0}">
<table>
<tr>
<th>그룹번호</th>
<th>그룹제목</th>
<th>수정/삭제</th>
</tr>
<!--MediaCont(컨트롤러)의 list 함수에서 mav.addObject("list")를 가리킴 -->
<c:forEach var="dto" items="${list}">
<!--list 한줄씩 꺼내와서 dto 옮겨 담기 -->
<tr>
<td> ${dto.mediagroupno}</td>
<td> ${dto.title}</td>
<td>
<input type="button" value="수정" onclick="location.href='update.do?mediagroupno=${dto.mediagroupno}'">
<input type="button" value="삭제" onclick="location.href='delete.do?mediagroupno=${dto.mediagroupno}'">
</td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
</html>

cnt=0으로 값을 주어 실패하는 경우 페이지 이동이 되는지 확인한다
@RequestMapping(value = "mediagroup/create.do", method = RequestMethod.POST)
public ModelAndView createProc(@ModelAttribute MediagroupDTO dto) {
ModelAndView mav = new ModelAndView();
//int cnt = dao.create(dto);
int cnt=0;
if (cnt == 0) {
mav.setViewName("mediagroup/msgView");
String msg1 = "<p>미디어 그룹 등록 실패</p>";
String img="<img src='../images/pepe1.png' width='300px'>";
String link1= "<input type='button' value='다시시도' onclick='javascript:history.back()'>";
String link2= "<input type='button' value='그룹목록' onclick='location.href=\"list.do\"'>";
mav.addObject("msg1",msg1);
mav.addObject("img", img);
mav.addObject("link1", link1);
mav.addObject("link2", link2);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>msgView</title>
<style>
* {
font-family: gulim;
font-size: 25px;
}
</style>
<link href="../css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="title">알림</div>
<div class="content">
<dl>
<dd>${msg1 !=null ? img:""} ${msg1}</dd>
<dd>${msg2 !=null ? img:""} ${msg2}</dd>
<dd>${msg3 !=null ? img:""} ${msg3}</dd>
</dl>
<p>
${link1} ${link2} ${link3}
</p>
</div>
</body>
</html>

@RequestMapping(value="mediagroup/delete.do",method = RequestMethod.GET)
public ModelAndView deleteForm(int mediagroupno) {
ModelAndView mav=new ModelAndView();
mav.setViewName("mediagroup/deleteForm");
mav.addObject("mediagroupno", mediagroupno);
return mav;
}
public int delete(int mediagroupno) {
int cnt=0;
try {
sql=new StringBuilder();
sql.append(" delete from mediagroup ");
sql.append(" where mediagroupno=? ");
cnt=jt.update(sql.toString(),mediagroupno);
} catch (Exception e) {
System.out.println("삭제 실패"+e);
}
return cnt;
}
deleteForm
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>deleteForm</title>
<style>
* {
font-family: gulim;
font-size: 25px;
}
</style>
<link href="../css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="title">미디어 삭제</div>
<form action="delete.do" name="frm" method="post">
<input type="hidden" name="mediagroupno" value="${requestScope.mediagroupno}">
<div class="content">
<p>미디어 그룹 삭제할까요?</p>
<p> 관련 미디어 파일(mp3,mp4)도 전부 삭제됩니다</p>
</div>
<div class="bottom">
<input type="submit" value="삭제">
<input type="button" value="목록" onclick="location.href='list.do'">
</div>
</form>
</body>
</html>


