«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

장미의 개발일기

JSP 프로그래밍: 모델1 방식의 웹 개발하기(갤러리 만들기) - 2 본문

개발일기/JSP 프로그래밍 (Java 웹프로그래밍)

JSP 프로그래밍: 모델1 방식의 웹 개발하기(갤러리 만들기) - 2

민장미 2023. 6. 27. 02:56

셋팅:  이클립스 EE,  톰캣  ,마이바티스 ,오라클 , SQL gate 

=> 마이바티스를 추가하여 ! 모델1 방식의 웹 갤러리 만들어보기 

 

* 디자인에 소질이 없는 고로... 제 포스팅에서 디자인은 버리고 백엔드 코드만 봐주시길 ㅠㅠ 

 

 

마이바티스 ( SQL  - DB작업을 수월하게 해줌 )

Mybatis 마이바티스 다운로드 및 환경 설정 (tistory.com)

 

Mybatis 마이바티스 다운로드 및 환경 설정

** 아래 포스팅의 예제 => model 1 타입의 게시판 사이트를 제작한 후, 그걸 복사해와서 마이바티스를 테스트 해보는 포스팅 입니다. ** 아래 모델1방식으로 웹 게시판 만들기 JSP 프로그래밍: 모델1

jangmicoding.tistory.com

 

 

저번에 포스팅했던 게시판 만들기 예제에 이어서 만드는 포스팅입니다. (안봐도 무관)

JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 1 FBoard (tistory.com)

 

JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 1 FBoard

*Model 1 방식: JSP 프로그래밍에서 Model과 View를 따로 분리하지 않고 같이 섞어서 개발하는 방식이다. => UI(디자인)와 비즈니스 로직을 함께 처리하는 방식이라 코드의 재사용성이 떨어진다 => 유지

jangmicoding.tistory.com

 

 

JSP 프로그래밍: 모델1 방식의 웹 개발하기(갤러리 만들기) - 1 (tistory.com)

 

JSP 프로그래밍: 모델1 방식의 웹 개발하기(갤러리 만들기) - 1

셋팅: 이클립스 EE, 톰캣 ,마이바티스 ,오라클 , SQL gate => 마이바티스를 추가하여 ! 모델1 방식의 웹 갤러리 만들어보기 * 디자인에 소질이 없는 고로... 제 포스팅에서 디자인은 버리고 백엔드 코

jangmicoding.tistory.com

 

갤러리- 게시물 상세보기에 이어 갤러리 수정/ 삭제를 구현해보자!

 

- fboard 예제와는 다르게 이 예제의 테이블, VO에는 비밀번호가 없다 ㅠㅠㅠㅠ  까묵었네 그냥 하자

비번 체크 생략 ~ !  이걸 생략해버리니 훨씬 간단해진다.

 

 

 

 1. 게시물 삭제처리하기

   

  A chk.jsp 작성 ( 폼 아님 => num과 job 파라미터를 받아서 job이 up이면 수정 페이지, del이면 삭제 페이지로 가도록 하기)

<%@page import="vo.PororoVO"%>
<%@page import="dao.PororoDao"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>

<%
int num = Integer.parseInt(request.getParameter("num"));
String job = request.getParameter("job");
System.out.println("기본키 파라미터:" + num);
System.out.println("기본키 파라미터:" + job);
PororoVO vo = new PororoVO();
vo.setNum(num);

%>

<%--<div style="width: 300px; margin: auto; background: orange;">
	<p>정말 삭제하실 건가요?</p>
	<a href="detail.jsp?num=<%=num%>">아니요</a>
</div> --%>

<%

if (job.equalsIgnoreCase("del")) {
	response.sendRedirect("delete.jsp?num="+num);
	
} else if (job.equalsIgnoreCase("up")) {
	response.sendRedirect("modify.jsp?num="+num);
}
System.out.println("기본키 파라미터2:" + num);
System.out.println("기본키 파라미터2:" + job);
%>

 

B dao가서 메소드 구현

package dao;


import java.util.List;

import org.apache.ibatis.session.SqlSession;

import factory.FactoryService;
import vo.PororoVO;

public class PororoDao {
	
	private static PororoDao dao;
	private PororoDao() { //단축키 
	}
	//싱글톤
	public synchronized static PororoDao getDao() {
		if(dao == null) {
			dao= new PororoDao();
		}
		return dao;
	}
	
	

	public void addFBoard(PororoVO vo) {
		
		SqlSession ss = FactoryService.getFactory().openSession();
		ss.insert("pororo.add",vo);
		ss.commit();
		ss.close();
	}//addfbo
	
	
	public List<PororoVO> listFBoard() {
		SqlSession ss = FactoryService.getFactory().openSession();
		
		List<PororoVO> volist =ss.selectList("pororo.list");
		ss.commit();
		ss.close();
		
		return volist;
	}//listbo
	

	public PororoVO detailFBoard(int num) {
		SqlSession ss = FactoryService.getFactory().openSession();
		PororoVO vo= ss.selectOne("pororo.detail",num);
		ss.commit();
		ss.close();
		return vo;
	}
	 
	
	 public void deleteFBoard(int num) {
			SqlSession ss = FactoryService.getFactory().openSession();
			ss.selectOne("pororo.delete",num);
			ss.commit();
			ss.close();
	 }
	
	 
	

	
}

 

 

 

  C mapper 작업 / sql 툴에서 미리 테스트해보고 매퍼 작업을 함. 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pororo">
	<insert id="add" parameterType="vo.PororoVO">
		INSERT INTO PORORO VALUES(PORORO_SEQ.NEXTVAL, #{imgname} ,#{comm}
		,SYSDATE, #{reip},#{price},#{qty})
	</insert>


	<select id="list" resultType="vo.PororoVO">
		SELECT NUM, IMGNAME, COMM, REIP, PRICE,QTY, PDATE FROM PORORO ORDER BY 1
		DESC
	</select>

	<select id="detail" parameterType="int" resultType="vo.PororoVO">
		SELECT NUM, IMGNAME,COMM,REIP,PRICE,QTY,PDATE FROM PORORO WHERE NUM=#{num}
	</select>

	<delete id="delete" parameterType="int">
		DELETE FROM PORORO WHERE NUM = #{num}
	</delete>



</mapper>

 

  D delete.jsp 작성   / 테이블 기본키를 파라미터로 받아오고, dao싱글톤을 호출한 후, 그 싱글톤을 통해서 

  삭제 메소드 소환 

<%@page import="dao.PororoDao"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
//delete
	int num = Integer.parseInt(request.getParameter("num"));
	PororoDao.getDao().deleteFBoard(num);
	response.sendRedirect("gallery.jsp");


%>

 

비번확인, 경고창 없이 바로 삭제가 되니, 테스트할 때 주의 ! 

 

 

 

2. 수정처리  => 자꾸 오류나서 아직 하는중 ㅠㅠㅠ....

 

A modify.jsp  폼  (수정목록에서 이미지, 이미지이름 , 날짜 수정 제외 => readonly 처리함)

<%@page import="dao.PororoDao"%>
<%@page import="vo.PororoVO"%>
<%@page import="vo.FBoardVO"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>

<%
//modify.jsp

int num = Integer.parseInt(request.getParameter("num"));
System.out.println("detailnum=>" + num);

PororoVO vo = PororoDao.getDao().detailFBoard(num);
System.out.println("detailnum=222>" + num);
%>

<%@include file="../header2.jsp"%>
<div id="wrap" class="container mt-5">
	<h2>게시글 수정폼</h2>


	<form method="post" action="update.jsp">
		<input type="hidden" name="num" value="<%=num%>"> <input
			type="hidden" name="reip" value="<%=request.getRemoteAddr()%>">
		
		

		<div class="row mb-3">
			<label for="imgn" class="col-sm-2 col-form-label">이미지 이름/상품</label>
			<div class="col-sm-10">
				<input type="text" name="imgn" class="form-control" id="imgn" readonly="readonly"
					value="<%=vo.getImgname()%>">
			</div>
		</div>


		<div class="row mb-3">
			<label for="price" class="col-sm-2 col-form-label">가격</label>
			<div class="col-sm-10">
				<input type="number" name="price" class="form-control" id="price"
					value="<%=vo.getPrice()%>">
			</div>
		</div>
		<div class="row mb-3">
			<label for="qty" class="col-sm-2 col-form-label">수량</label>
			<div class="col-sm-10">
				<input type="number" name="qty" class="form-control" id="qty"
					value="<%=vo.getQty()%>">
			</div>
		</div>

		<div class="row">
			<label for="comm" class="col-sm-2 col-form-label">내용</label>
			<div class="col-sm-10">
				<textarea name="comm" rows="10" cols="50" id="comm"><%=vo.getComm()%></textarea>
			</div>
		</div>
		<div class="row mb-3">
			<label for="pdate" class="col-sm-2 col-form-label">입고일</label>
			<div class="col-sm-10">
				<input type="text" name="pdate" class="form-control" id="pdate" readonly="readonly"
					value="<%=vo.getPdate()%>">
			</div>
		</div>



		<div class="container text-center" role="group">
			<button class="btn btn-primary" type="submit">글수정</button>
			<button class="btn btn-danger" type="button"
				onclick="location='gallery.jsp'">리스트</button>
		</div>

	</form>
</div>

<%@include file="../footer2.jsp"%>

 

 

 

 B mapper  작업

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pororo">
	<insert id="add" parameterType="vo.PororoVO">
		INSERT INTO PORORO VALUES(PORORO_SEQ.NEXTVAL, #{imgname} ,#{comm}
		,SYSDATE, #{reip},#{price},#{qty})
	</insert>


	<select id="list" resultType="vo.PororoVO">
		SELECT NUM, IMGNAME, COMM, REIP, PRICE,QTY, PDATE FROM PORORO ORDER BY 1
		DESC
	</select>

	<select id="detail" parameterType="int" resultType="vo.PororoVO">
		SELECT NUM, IMGNAME,COMM,REIP,PRICE,QTY,PDATE FROM PORORO WHERE NUM=#{num}
	</select>

	<delete id="delete" parameterType="int">
		DELETE FROM PORORO WHERE NUM = #{num}
	</delete>


	<update id="update" parameterType="vo.PororoVO">
		UPDATE PORORO SET COMM=#{comm}, REIP = #{reip}, PRICE = #{price}, QTY = #{qty} WHERE NUM =#{num}
	</update>


</mapper>

 

오랫동안 update.jsp에서 오류나서 울뻔 ㅠㅠㅠ 

Fboard 예제에서는 비번을 체크했었으니, 기본키 번호+비번 2개가 파라미터 값이라,  메소드의 인자를 ProroVO vo로 

받았는데,  이번 예제에선 비번 자체가 없으니 기본키 int 하나면 될 줄 알고 매퍼랑 dao를 다 그렇게 만들었더니

자꾸 안됐....  혹시나 해서 파라미터 타입을 바꾸니 되네 ㅠ ...

 

 

 

C dao 메소드 구현

package dao;


import java.util.List;

import org.apache.ibatis.session.SqlSession;

import factory.FactoryService;
import vo.FBoardVO;
import vo.PororoVO;

public class PororoDao {
	
	private static PororoDao dao;
	private PororoDao() { //단축키 
	}
	//싱글톤
	public synchronized static PororoDao getDao() {
		if(dao == null) {
			dao= new PororoDao();
		}
		return dao;
	}
	
	

	public void addFBoard(PororoVO vo) {
		
		SqlSession ss = FactoryService.getFactory().openSession();
		ss.insert("pororo.add",vo);
		ss.commit();
		ss.close();
	}//addfbo
	
	
	public List<PororoVO> listFBoard() {
		SqlSession ss = FactoryService.getFactory().openSession();
		
		List<PororoVO> volist =ss.selectList("pororo.list");
		ss.commit();
		ss.close();
		
		return volist;
	}//listbo
	

	public PororoVO detailFBoard(int num) {
		SqlSession ss = FactoryService.getFactory().openSession();
		PororoVO vo= ss.selectOne("pororo.detail",num);
		ss.commit();
		ss.close();
		return vo;
	}
	 
	
	 public void deleteFBoard(int num) {
			SqlSession ss = FactoryService.getFactory().openSession();
			ss.selectOne("pororo.delete",num);
			ss.commit();
			ss.close();
	 }
	
	 
	 public void updateFBoard(PororoVO vo) {
		 SqlSession ss = FactoryService.getFactory().openSession();
			ss.selectOne("pororo.update",vo);
			ss.commit();
			ss.close();
	 }
	
	
}

 

 

D update.jsp

 

<%@page import="dao.PororoDao"%>
<%@page import="vo.PororoVO"%>
<%@page import="vo.FBoardVO"%>
<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
request.setCharacterEncoding("euc-kr");
//1.수정폼에서의 파라미터를 변수에 저장

int num = Integer.parseInt(request.getParameter("num"));
String imgname = request.getParameter("imgname");
String comm= request.getParameter("comm");
String pdate= request.getParameter("pdate");
String reip= request.getParameter("reip");
int price = Integer.parseInt(request.getParameter("price"));
int qty = Integer.parseInt(request.getParameter("qty"));


PororoVO vo = new PororoVO();
vo.setNum(num);
vo.setReip(reip);
vo.setImgname(imgname);
vo.setComm(comm);
vo.setPdate(pdate);
vo.setPrice(price);
vo.setQty(qty);

PororoDao.getDao().updateFBoard(vo);
response.sendRedirect("detail.jsp?num="+num);

%>

 

 

 

수량, 가격, 내용 등을 수정 해본다. 

 

 

이렇게 짠 수정이 된다.

 

 

끗..... ㅠ