Spring-myMelon(CRD)

임재헌·2023년 5월 8일

Spring

목록 보기
6/9


기본 설정

pom.xml-라이브러리 다운

<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>

properties 설정

#주석
#/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

라이브러리는 준비되었으나 그에 대한 세부설정을 하지 않는 경우 오류 발생


backend구축

DTO 클래스 생성

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
	}
	
}

DAO 클래스

테이블 생성(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;
	}

view 설정

createForm

<%@ 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 생성 확인

list

<%@ 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으로 값을 주어 실패하는 경우 페이지 이동이 되는지 확인한다

CONTROLLER

@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);

VIEW PAGE

<%@ 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;
	}

DELETE 메소드

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>

0개의 댓글