«   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 FBoard 본문

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

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

민장미 2023. 6. 4. 23:08

모델 1 방식은 이제는 거의 안 쓰고 매우 번거로운 과정이지만 개념이해를 위해서 반드시 코딩을 해봐야 한다. 

그 다음으로 모델2 방식, 스프링 프레임워크, 부트 순으로 넘어가면 된다. 

 

 

이번 포스팅은 매우 번거롭지만 => 마이바티스를 사용하면 훨씬 간편하게 코딩이 가능하다. 

 

Mybatis 다운로드 및 환경 설정 (tistory.com)

 

Mybatis 다운로드 및 환경 설정

** 이미 model 1 타입의 게시판 사이트를 제작한 후, 그걸 복사해와서 테스트 해보는 포스팅 입니다. ** model1 타입 웹개발 (게시판 만들기) 포스팅 : web java: 모델1 방식의 웹 개발하기(게시판 만들기)

jangmicoding.tistory.com

 

 

 

 

 

셋팅: 톰캣 9.0 , 자바 ee, Tern(플러그인) , 오라클 , SQLgate 

 

 

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

VO, DTO, DAO 객체 및 클래스 생성,  세팅 설정 등

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

 

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

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

jangmicoding.tistory.com

* jsp 파일은 Webapp 폴더 안에 생성하기 ( 모델2로 넘어가면 web-inf폴더 안에 작성)

 

8. webapp- write.jsp 생성

에딧플러스 사용하면 폼 코드를 쉽게 생성 가능 

디자인은 부트스트랩 5 사이트에서 자유롭게 가져와도 무관

https://getbootstrap.kr/docs/5.0/getting-started/introduction/

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>write.jsp</title>
<meta name="veiwport" content="width=device-width", initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
<style>
	#wrap{
	width: 550px;
	}

</style>
</head>
<body>

  <div id="wrap" class="container mt-5">
  	<div class="row">
  	<h2>자유게시판</h2>
	<form method = "post" action="insert.jsp" autocomplete="off">
		<input type="hidden" name="reip" value="<%=request.getRemoteAddr() %>">
	
		
	<div class="row mb-3">
    <label for="subject" class="col-sm-2 col-form-label">제목</label>
    <div class="col-sm-10">
      <input type="text" name = "subject" class="form-control" id="subject">
    </div>
  </div>
	
	<div class="row mb-3">
    <label for="writer" class="col-sm-2 col-form-label">작성자</label>
    <div class="col-sm-10">
      <input type="text" name = "writer" class="form-control" id="writer">
    </div>
  </div>
	
	<div class="row">
	  	<label for="content" class="col-sm-2 col-form-label">내용</label>
    	<div class="col-sm-10">
		<textarea name="content" rows="10" cols="50"></textarea>
	</div>
	</div>
	
	<div class="row mb-3">
    <label for="pwd" class="col-sm-2 col-form-label">비밀번호</label>
    <div class="col-sm-10">
      <input type="password" name = "pwd" class="form-control" id="pwd">
    </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='list.jsp'">리스트</button>
	</div>

	</form>
   </div>
  </div>


</body>
</html>

 

실행 화면 : 

 

 

9.  insert.jsp  생성 (파일위치는 write.jsp와 같음)
비즈니스로직이라 UI가 필요없으니 맨 위의 코드2줄 빼고 다 삭제 

   -  <% %> 영역 안에 자바코드 사용이 가능하다. (인코딩 필수)

     //1.폼에서의 파라미터를 변수에 저장

    //2.VO에 저장한 후

    //3. Dao에 값을 전달 한 후 list.jsp로 이동

    실행은 write jsp에서 한다 

 

<%@page import="dao.FBoardDao"%>
<%@page import="dao.FBoardDaoInter"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="vo.FBoardVO"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%  request.setCharacterEncoding("euc-kr");
	//1.폼에서의 파라미터를 변수에 저장
	String reip= request.getParameter("reip");
	String subject= request.getParameter("subject");
	String writer= request.getParameter("writer");
	String content= request.getParameter("content");
	String pwd= request.getParameter("pwd");
	
	/* 	System.out.println("reip:"+reip);
	System.out.println("subject:"+subject);
	System.out.println("writer:"+writer);
	System.out.println("content:"+content);
	System.out.println("pwd:"+pwd);
	 */
	//2.VO에 저장한 후
	FBoardVO vo = new FBoardVO();
	vo.setReip(reip);
	vo.setSubject(subject);
	vo.setWriter(writer);
	vo.setContent(content);
	vo.setPwd(pwd);
	//sysdate로 날짜는 sql에서 입력할예정

	
	//3. Dao에 값을 전달 한 후 list.jsp로 이동
	FBoardDao.getDao().addFBoard(vo);

	response.sendRedirect("list.jsp");

	
%>

 

 

 

 

10.FBoardDao 클래스 -addFBoard () 메소드를 구현 
 -sql 문 작성 (insert문)  => sql gate에서 테스트 후에 가져오기 

메소드 구현이 좀 복잡하긴 하지만 한번 해두면 다 복붙의 반복이니 화이팅! 

 

	@Override
	public void addFBoard(FBoardVO vo) {
		/*
		 * System.out.println("reip:"+vo.getReip());
		 * System.out.println("subject:"+vo.getSubject());
		 * System.out.println("writer:"+vo.getWriter());
		 * System.out.println("content:"+vo.getContent());
		 * System.out.println("pwd:"+vo.getPwd());
		 */
		//이거 작성후 다시 폼에 입력후 체크
		// SUBJECT, WRITER, PWD, CONTECNT, HIT, REIP, FDATE
		//INSERT INTO FBOARD VALUES(FBOARD_SEQ.NEXTVAL, ?,?,?,?, 0, ?,SYSDATE)
		String sql="INSERT INTO FBOARD VALUES(FBOARD_SEQ.NEXTVAL, ?,?,?,?, 0, ?,SYSDATE)";
		
		try(Connection con=MyConn.getConn();
			 PreparedStatement pstmt = con.prepareStatement(sql);
			){  
			//바인딩하기  제목, 작성자, 비번, 내용, ip ?순서임  
			pstmt.setString(1, vo.getSubject());
			pstmt.setString(2, vo.getWriter());
			pstmt.setString(3, vo.getPwd());
			pstmt.setString(4, vo.getContent());
			pstmt.setString(5, vo.getReip());
			
			pstmt.executeUpdate();
		
		}
			catch (SQLException e) {
				e.printStackTrace();
		}
				
	}//add fboard

 

 

 

 

11. list.jsp 생성 및 테스트 

body에 아무 문자 적고 (안 적어도 됌)

지금까지 작업 했던 걸 테스트 해본다.  아니면 insert.jsp의 response.sendRedirect("list.jsp"); 을 주석처리하고 테스트해도 된다. 

 

write.jsp ->  실행 -> 글 작성  -> 오류 안뜨면 sql 가서 select * from 테이블 / 로 

테이블 안에 데이터가 제대로 삽입 되었는지 확인.

 

-추가 테스트: 

*cmd에서 ip 확인 명령어: ipconfig 로  자신의  ip를 조회 후 복사 => 브라우저 창의 입력 폼( write.jsp)에서 

그 ip를  주소창에서 localhost 자리에 쓰고 엔터 ! (엔터 안누르면 적용이 안된다)  
=> 글 작성 후 버튼 클릭 =>   테이블 조회 했을때 자신의  ip가 삽입되었는지 확인 ! 

 

 

 

 

 

======================================

12. list.jsp 코드 작성

(write.jsp랑 부스트랩에서 복붙)

 

<%@page import="dao.FBoardDao"%>
<%@page import="vo.FBoardVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>list.jsp</title>

<meta name="veiwport" content="width=device-width", initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
<style>
	#wrap{
	width: 550px;
	}
</style>

</head>
<body>
<div id="wrap" class="container mt-5">
  	<div class="row">
  	<h2>자유게시판 List</h2>
  	
  	
<table class="table table-hover">
  <thead>
    <tr class="table-warning">
      <th scope="col">번호</th>
      <th scope="col">제목</th>
      <th scope="col">작성자</th>
      <th scope="col">조회수</th>
      <th scope="col">날짜</th>
    </tr>
  </thead>
  <tbody>
  	<%--반복시작 --%>
  	<%
  	 List<FBoardVO> flist = FBoardDao.getDao().listFBoard();
  	 for(FBoardVO e: flist){
  	%>
  		<tr>
  			<th scope="row"><%=e.getNum() %></th>  	
  			<td><a href="hit.jsp?num=<%=e.getNum() %>" class="link-secondary"><%=e.getSubject() %></a></td>		
  			<td><%=e.getWriter() %></td>
  			<td><%=e.getHit() %></td> 
  			<td><%=e.getFdate()%></td> 
  		 </tr>
  	<%
  	 }
  	%>

  </tbody>
  <tfoot>
  	<tr><th colspan="5"class="text-end">
  		<button class="btn btn-outline-success" onclick="location='write.jsp'">글작성</button></th> </tr>
  </tfoot>
</table>


	</div>
</div>

</body>
</html>

 

 

 

13.  DAO클래스의 public List<FBoardVO> listFBoard() {} 출력 메소드 구현 / 리스트 

 

리스트 객체를 구현하여 출력할 정보를 담아서 출력

	@Override  //DB에 저장된 데이터를 출력해주는 메서드 구현 
	public List<FBoardVO> listFBoard() {
		String sql="SELECT NUM, SUBJECT, WRITER, HIT, FDATE FROM FBOARD ORDER BY 1 DESC";
		List<FBoardVO> flist = new ArrayList<FBoardVO>(); //출력할 정보를 담아올 리스트객체 
		
		try(Connection con = MyConn.getConn();
				PreparedStatement pstmt = con.prepareStatement(sql);) //sql문을 statement 객체에 담아서 
			{
				ResultSet rs = pstmt.executeQuery(); //resultset에 select문 결과물을 저장 
				
			while(rs.next()) { //rs의 객체에 있는 모든 정보를 출력 /반복문 
				FBoardVO v = new FBoardVO();
				v.setNum(rs.getInt("num"));
				v.setSubject(rs.getString("subject"));
				v.setWriter(rs.getString("writer"));
				v.setHit(rs.getInt("hit"));
				v.setFdate(rs.getString("fdate"));
				flist.add(v);
			}//wh
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flist;
	}


=> 복사해와서 list.jsp에서 자바코드 작성
 -버튼에 onclick 처리 / 글작성 누르면 write.jsp으로 돌아감 

=> write.jsp로 가서 리스트 버튼도 똑같이 처리 해준다. 
list.jsp로 이동되도록 

 

-리다이렉트 처리(insert.jsp에서 처리)
list.jsp 로 이동 되도록한다 => 글 작성이 끝나서 저장되면 리스트.jsp 로 돌아가도록 

 

여기까지,  글작성 , 리스트 등의 버튼이 제대로 작동 되야한다. 

14. 글 조회수 처리:  list.jsp 에서 링크걸기 => hit.jsp로!     + hit.jsp 생성 

이미 위에 올린 코드에는 처리가 되어 있다. 

이 부분 

<td><a href="hit.jsp?num=<%=e.getNum() %>" class="link-secondary"><%=e.getSubject() %></a></td>

 

- hit.jsp 

파라미터 num 값을 받아서 Dao에 전달 후 hit를 1증가해서 업데이트 처리한다.
(모델단이라? insert.jsp처럼   ui 필요없다 insert.jsp처럼 => 이런걸 모델1이라고 한다)
테스트먼저 (hit.jsp에 숫자 출력해보기)

 

<%@page import="dao.FBoardDao"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	int num = Integer.parseInt(request.getParameter("num"));
	System.out.println("num=>"+num);
	
	FBoardDao.getDao().updateHit(num);
	//info.jsp?num=num 
	response.sendRedirect("info.jsp?num="+num);
	
%>

 

 

15.  DAO 클래스에서 public void updateHit(int num){} 메서드 구현 

- sql 업데이트문  테스트 => 쿼리문을=> board dao class의 엡데이트히트 메서드에 가져온다.
(인서트 메서드랑 코드도 거의 같다)
=> his.jsp에서 처리 (fboarddao 객체를 통해서 fboard dao 의 (앞에서 구현한)
메소드 udaptehit 을 호출

	@Override
	public void updateHit(int num) {
		String sql = "UPDATE FBOARD SET HIT = HIT+1 WHERE NUM=?";
	//인서트 메소드에서 복붙 
		
		try(Connection con=MyConn.getConn();
				 PreparedStatement pstmt = con.prepareStatement(sql);
				){  
				pstmt.setInt(1, num);
				pstmt.executeUpdate();
			}
				catch (SQLException e) {
					e.printStackTrace();
			}
	}

 

=> list에서 실행 후 테스트 ( hit.jsp 의 response.sendRedirect("info.jsp?num="+num); 이부분 주석 처리 후 테스트)
(게시글 클릭 후 조회수 증가 확인)

 

===============================

16.  게시판의 상세정보 처리하기 

Fboarddao class에서  detailFboard()메서드 구현

	@Override
	public FBoardVO detailFBoard(int num) {
		String sql="SELECT NUM,SUBJECT,WRITER,CONTENT,HIT,REIP,FDATE FROM FBOARD WHERE NUM=?";
		
		FBoardVO v = new FBoardVO();
		
		try{Connection con = MyConn.getConn();
				PreparedStatement pstmt = con.prepareStatement(sql);
			//바인딩 	
				pstmt.setInt(1, num);
				ResultSet rs = pstmt.executeQuery();
				
			 //resultset에 select문 결과물을 저장 
				
			if(rs.next()) { //rs의 객체에 있는 모든 정보를 출력 /반복문 
				v.setNum(rs.getInt("num"));
				v.setSubject(rs.getString("subject"));
				v.setWriter(rs.getString("writer"));
				v.setContent(rs.getString("content"));
				v.setHit(rs.getInt("hit"));
				v.setReip(rs.getString("reip"));
				v.setFdate(rs.getString("fdate"));
			}//if
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return v;
	}

 

-> hit.jsp에서 처리 (info.jsp로 이동하게/ 위에 게시한 코드에는 이미 처리되어 있음)
response.sendRedirect("info.jsp?num="+num);

 

 

 

 

17.  info.jsp 생성

=> write.jsp 복붙해와서 필요없는거 지우기

 

num값을 받아서 Dao 전달 후, 상세정보를 반환받아서 배치한다.
=테스트 : list.jsp 실행해서 게시판 눌렀을때
http://localhost/web0518_model1/info.jsp?num=3 뜨면 성공?

<%@page import="dao.FBoardDao"%>
<%@page import="vo.FBoardVO"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
 
<% //테스트 
int num = Integer.parseInt(request.getParameter("num"));
//System.out.println("Detail num=>"+num);
// Dao로부터 값 받아오기 
	FBoardVO v = FBoardDao.getDao().detailFBoard(num);
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>info.jsp</title>
<meta name="veiwport" content="width=device-width", initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
<style>
	#wrap{
	width: 550px;
	}

</style>
</head>
<body>

  <div id="wrap" class="container mt-5">
  	<div class="row">
  	<h2>FreeBoard Detail</h2>
	
	
	<div class="row mb-3">
    <label for="subject" class="col-sm-2 col-form-label">제목</label>
    <div class="col-sm-10">
      <input type="text" name = "subject" class="form-control" id="subject"
      value ="<%=v.getSubject()%>"  readonly="readonly">
    </div>
  </div>
	
		
	<div class="row mb-3">
    <label for="writer" class="col-sm-2 col-form-label">작성자</label>
    <div class="col-sm-10">
      <input type="text" name = "writer" class="form-control" id="writer"
      value ="<%=v.getWriter() %>"  readonly="readonly">
    </div>
  </div>
	

	<div class="row">
	  	<label for="content" class="col-sm-2 col-form-label">내용</label>
    	<div class="col-sm-10">
		<textarea name="content" rows="10" cols="50" id="content" readonly="readonly">
		 <%=v.getContent() %></textarea>
	</div>
	</div>
	
	<div class="row mb-3">
    <label for="reip" class="col-sm-2 col-form-label">아이피</label>
    <div class="col-sm-10">
      <input type="text" name = "reip" class="form-control" id="reip"
      value = "<%=v.getReip() %>" readonly="readonly">
    </div>
  </div>
  
  	<div class="row mb-3">
    <label for="fdate" class="col-sm-2 col-form-label">날짜</label>
    <div class="col-sm-10">
      <input type="text" name = "fdate" class="form-control" id="fdate"
      value = "<%=v.getFdate()%>" readonly="readonly">
    </div>
  </div>
  
  
  	<div class="container text-center" role="group">
  	<button class="btn btn-primary" type="button" onclick="location='chkpwdForm.jsp?num=<%=v.getNum()%>&job=up'">수정</button>
  	<button class="btn btn-primary" type="button" onclick="location='chkpwdForm.jsp?num=<%=v.getNum()%>&job=del'">삭제</button>
  	<button class="btn btn-danger" type="button" onclick="location='list.jsp'">리스트</button>
	</div>

   </div>
  </div>


</body>
</html>

 

 DAO에서 info.jsp로 값을 받아온다(num만)
각 div class 수정 (비번 같은거 없애고 히든 제거)

=> list.jsp에서 실행 해보기
게시판을 클릭하면 상세정보가 다 나와야함 

 

==============================================


18.수정 버튼 기능 : info,jsp에서 수정 버튼에 location: ~jsp 추가

dao클래스에서 num 가져오기
=> url이 잘 맵핑이 됐는지, list.jsp실행하여 확인 (이클립스 콘솔창)
(삭제,수정버튼 눌러보기)
chkpwdForm.jsp로 이동하게

 

 

 

 

19. chkpwdForm.jsp 생성
write.,jsp에서 버튼하고, 비번만 복사해서 가져온다.
-디자인요소도 맞춰준다.

-ACTION: pwdCheck.jsp로 이동하게 

-Test: jps파일 위에 자바코드 작성
파라미터 받는 변수. 파라미터 2개 num, job확인
( 프린트 해서 자바 콘솔에 출력되는지 확인)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    
 <%
 String num = request.getParameter("num");
 String job = request.getParameter("job");
 System.out.println("PWD num:"+num);
 System.out.println("PWD job:"+job);
 
 
 %>   
    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>chkpwdForm.jsp</title>
<meta name="veiwport" content="width=device-width",initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
<style>
	#wrap{
	width: 550px;
	}
</style>
</head>
<body>

<div id="wrap" class="container mt-5">
	<form method="post" action="pwdCheck.jsp" >
	<%--보이지 않는 속성으로 pwdCheck.jsp로 필요한 파라미터를 보낸다. --%>
	<input type="hidden" name = "num" value="<%=num %>">
	<input type="hidden" name = "job" value="<%=job %>">
		<div class="row mb-3">
    	<label for="pwd" class="col-sm-2 col-form-label">비밀번호</label>
   		 	<div class="col-sm-10">
      			<input type="password" name = "pwd" class="form-control" id="pwd">
    		</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='list.jsp'">취소/돌아가기</button>
		</div>
	

	</form>
</div>	


</body>
</html>

 



20. DAO class에서  checkPwd 메소드 구현

 

@Override
	public boolean checkPwd(FBoardVO vo) {
		String sql = "SELECT COUNT(*) AS CNT FROM FBOARD WHERE NUM=? AND PWD = ?";

		int res = 0;
		try {
			Connection con = MyConn.getConn();
			PreparedStatement pstmt = con.prepareStatement(sql);
			// 바인딩
			pstmt.setInt(1, vo.getNum());
			pstmt.setString(2, vo.getPwd());
			ResultSet rs = pstmt.executeQuery();

			// resultset에 select문 결과물을 저장

			if (rs.next()) { // rs의 객체에 있는 모든 정보를 출력 /반복문
				res = rs.getInt("cnt");
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		if (res > 0) {// 1값 비밀번호가 맞는 경우,
			return true;
		} else {
			return false;
		}
	}// method

 


21. pwdCheck.jsp생성
-res(비밀번호가) 맞을 경우, 안맞을 경우 이동경로 작성 
-(get방식)(파라미터 넘겨야함 url에 
**** 경우의 수 -> 잘 생각해보기****
1. 비번이 틀릴 경우  info.jsp 로 이동
2. 비번이 맞을경우 1- job값이 delete면 delete.jsp로 이동
2-job 값이 up이면  modify.jsp 로 이동

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

	//pwdCheck
	int num = Integer.parseInt(request.getParameter("num"));
	//del, up job의값 
	String job = request.getParameter("job");
	String pwd = request.getParameter("pwd");
	//DB
	FBoardVO vo = new FBoardVO();
	
	vo.setNum(num);
	vo.setPwd(pwd);
	boolean res = FBoardDao.getDao().checkPwd(vo);
	
	System.out.println("res=>"+res);
	
	//res가 true면 job으로 이동을 한다.(비번이 틀릴경우)
 	if(!res){ //get 방식으로 넘겨줘야 한다. num을 
%>
	<div style = "width: 300px; margin: auto; background: orange;">
		<p>잘못된 정보입니다. 비밀번호가 틀립니다.</p>
		<a href = "info.jsp?num=<%=num%>">클릭</a>	
	</div>
<%
		//response.sendRedirect("info.jsp?num="+num); //("info.jsp?num=1");
	}else{ 
		if(job.equalsIgnoreCase("del")){
			response.sendRedirect("delete.jsp?num="+num);
		}else if(job.equalsIgnoreCase("up")){
			response.sendRedirect("modify.jsp?num="+num);
		}
		
	}//else
	//왜 num을 왜 !!!! 넘겨야 하는가? 
	//비번이 맞으면 
	//res가 false면 info.jsp로 이동시킨다.
	

%>

 

 

 

 

 

22. 삭세처리: DAO class에서 public void deleteFBoard(int num) {}메서드 구현 

	@Override
	public void deleteFBoard(int num) {
		String sql = "DELETE FROM FBOARD WHERE NUM=?";
		// 업데이트 메소드에서 복붙

		try (Connection con = MyConn.getConn(); PreparedStatement pstmt = con.prepareStatement(sql);) {
			pstmt.setInt(1, num);
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

 

 

23. delete.jsp 생성
넘버 파라미터만 가져와서 
응답 : lilst.jsp로 이동하도록 한다
- 테스트 게시글 삭제 해보기
-디자인요소 및 경고글 추가 

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

%>

 

=> 테스트: 글 삭제 해보기 (비번맞기/틀리게)

비번 틀릴 경우: 

 

24. 수정 처리 :  modify.jsp 생성(write.jsp 전체 복붙)
맨 위쪽의  자바코드는 detail 메소드 코드 복붙 

코드수정
-input에 value 추가 
-update.jsp 로 바꿔주고 
-num는 자동 히든으로 삽입되고
<input type="hidden" name="num" value="<%=num %>">
업데이트 할건 다르게 

 

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

FBoardVO vo = FBoardDao.getDao().detailFBoard(num);

%>      
    
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>modify.jsp</title>
<meta name="veiwport" content="width=device-width", initial-scale= 1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
<style>
	#wrap{
	width: 550px;
	}

</style>
</head>
<body>

  <div id="wrap" class="container mt-5">
  	<h2>게시글 수정폼</h2>
  	<%--
  	update fboard set subject=? , writer=?, content=?, pwd=?, reip=? where num=?
  	 --%>
  	
	<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="subject" class="col-sm-2 col-form-label">제목</label>
    <div class="col-sm-10">
      <input type="text" name = "subject" class="form-control" id="subject"
      value="<%=vo.getSubject() %>">
    </div>
  </div>
	
	<div class="row mb-3">
    <label for="writer" class="col-sm-2 col-form-label">작성자</label>
    <div class="col-sm-10">
      <input type="text" name = "writer" class="form-control" id="writer"
      value="<%=vo.getWriter() %>">
    </div>
  </div>
	
	<div class="row">
	  	<label for="content" class="col-sm-2 col-form-label">내용</label>
    	<div class="col-sm-10">
		<textarea name="content" rows="10" cols="50" id="content"><%=vo.getContent() %></textarea>
		</div>
	</div>
	
	<div class="row mb-3">
    <label for="pwd" class="col-sm-2 col-form-label">비밀번호</label>
    	<div class="col-sm-10">
      <input type="password" name = "pwd" class="form-control" id="pwd"
       value="<%=vo.getPwd() %>">
    	</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='list.jsp'">리스트</button>
	</div>

	</form>
   </div>
  </div>


</body>
</html>

 

 



25.update.jsp 생성

-insert.jsp 의 자바코드를 그대로 복붙
-여기에 num만 추가해준다 
-UPDATE BOARD ()메소드 소환 코드 

<%@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 reip= request.getParameter("reip");
String subject= request.getParameter("subject");
String writer= request.getParameter("writer");
String content= request.getParameter("content");
String pwd= request.getParameter("pwd");

FBoardVO vo = new FBoardVO();
vo.setNum(num);
vo.setReip(reip);
vo.setSubject(subject);
vo.setWriter(writer);
vo.setContent(content);
vo.setPwd(pwd);

FBoardDao.getDao().updateFBoard(vo);
response.sendRedirect("info.jsp?num="+num);

%>

 



26. dao에서 updateboard()메소드 구현 
-update sql문 작성 
-ADDBOARD ()메소드 복붙 + num요소 추가(바인딩요소)
-detailFBoard(int num)메소드에 pwd 요소 추가



	@Override
	public void updateFBoard(FBoardVO vo) {
		//ADD BOADDF 복붙 
		String sql = "UPDATE FBOARD SET SUBJECT=?,WRITER=?, PWD=?, CONTENT=?, REIP=? WHERE NUM=?";

		try (Connection con = MyConn.getConn(); PreparedStatement pstmt = con.prepareStatement(sql);) {
			// 바인딩하기 제목, 작성자, 비번, 내용, ip ?순서임
			pstmt.setString(1, vo.getSubject());
			pstmt.setString(2, vo.getWriter());
			pstmt.setString(3, vo.getPwd());
			pstmt.setString(4, vo.getContent());
			pstmt.setString(5, vo.getReip());
			pstmt.setInt(6, vo.getNum());

			pstmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}// mt


테스트: 게시판 수정, 비번도 수정후 적용 되는지 테스트