일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- html #자바와서블릿 #자바와웹연결 #웹연결
- View #
- 정처기 #정처기필기 #정보처리기사 #정보처리기사필기 #정보처리기사2023 #정처기2023 #정처기3회 #정보처리기사3회 #정보처리기사실기 #정처기실기 정처기합격
- Model #
- 갤러리제작 #갤러리만들기 #jsp갤러리 #jsp게시판 #jsp프로그래밍 #jsp웹프로그래밍 #jsp웹 #jsp모델1방식 #사진업로드 #jsp사진업로드 #jdbc6 #jdbc드라이버다운 #jdbc드라이버무료다운
- sql #오라클 #불리언형 #boolean #webjava #java #jsp #Mybatis #마이바티스 #마이바티스환경설정 #모델1 #모델1프로그래밍 #Batis #마이바티스다운로드 #web설정 #웹프로그래밍 #게시판 #게시판제작 #게시판만
- 자바 #웹자바 #JAVA #WEB #WEBJAVA #WEBPROGRAMMING #웹 #웹프로그래밍 #코딩 #CODING #모델1 #모델2 #모델1방식 #모델2방식
- Doit #Doit오라클 #Doit시리즈 #연습문제
- tern다운로드 #메이븐다운로드 #maven #스프링라이브러리 #자바라이브러리 #톰캣설정 #WAS #웹어플리케이션서버
- 자바웹프로그래밍
- 서블릿선언 #서블릿선언방법 #
- 마이바티스환경설정
- 정처기3회 #정보처리기사2023
- java #array #자바 #배열 #프로그래밍 #코딩 #자바프로그래밍
- QUERY #DML #SQL문 #내림차순정렬 #오름차순정렬
- 자바 #웹자바 #webJava #java #코딩 #코딩초보 #ojdbc #서블릿 #자바서블릿 #javaServelet #servelet #httpServlet
- 어노테이션 #@WebServlet #WebServlet #
- web.xml #배포지시자 #서블릿테스트
- cos.jar #cos드라이버 #파일업로드드라이버 #루피는귀여워 #마이바티스 #MyBatis #마이바티스sql #마이바티스DB #마이바티스jsp #마이바티스이클립스 #mapper #config.xml #마이바티스다운로드
- 기말고사 #방통대기말고사 #방통대후기 #방통대기말고사후기 #방통대2023년1학기 #방통대1학기 #방통대C프로그래밍 #방통대장학금 #방통대영어회화1
- spring #스프링 #전자정부표준프레임워크 #표준프레임워크 #자바스프링 #스프링다운로드 #자바스크립트 #웹프로그래밍설정 #웹프로그래밍셋팅
- 8 실무에서 가장 많이 사용하는 SQL
- 정처기필기합격 #정처기합격후기
- jsp #게시판만들기 #자바로게시판만들기 #웹테스트 #JNDI #myora #Oracle #오라클 #DAO #DTO #아파치톰캣 #웹자바셋팅 #모델1 #모델1방식 #모델1방식웹프로그래밍 #웹프로그래밍
- 서블릿 #자바모델1 #자바모델2 #mvc #mvc패턴
- Controller
- Init-param #context-param #
- 방통대 #방송통신대학교 #컴퓨터과학 #컴퓨터과학과 #컴과 #방통대컴퓨터과학과 #방통대컴과 #방통대파이썬 #방통대C #방통대자바
- union #sql99 #외부조인 #오라클조인 #sql조인 #자체조인 #비등가조인 #비등가조인 #테이블복사 #오라클테이블 #null인데이터출력
- ORACLE #TIGER #SCOTT #SCOTT계정 #오라클학습계정 #프로그래밍 #SQL #SQLORACLE #오라클 #오라클연습 #오라클연습계정 #오라클연습문제 #WHERE절 #오라클조건절
- Today
- Total
장미의 개발일기
JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 2 FBoard 본문
모델 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
테스트: 게시판 수정, 비번도 수정후 적용 되는지 테스트
'개발일기 > JSP 프로그래밍 (Java 웹프로그래밍)' 카테고리의 다른 글
스프링 프레임워크 핵심 용어정리 (0) | 2023.06.09 |
---|---|
JSP 개발방식 모델1 과 모델2 방식 비교 + MVC 패턴 (1) | 2023.06.09 |
JSP 프로그래밍: 모델1 방식의 웹 개발하기(게시판 만들기) - 1 FBoard (0) | 2023.06.04 |
Web java => Servelet 서블릿 선언 방법 2가지 / 2번째 (0) | 2023.06.04 |
Java/ Web java => Servelet 서블릿 선언 방법 2가지 (0) | 2023.06.04 |