본문 바로가기
수업내용

20230609 수업내용🤦‍♂️🤦‍♂️🤦‍♂️

by titlejjk 2023. 6. 9.

첫 시작은 bootstrap

 

components에서 자주 쓸만한 것을 알아보자

먼저 Alerts인데 어떤 배경색을 가지고 알림색을 띄우는 효과도 있다.

약속된 속성 외에 ex( class, id, src 등등)사용자가 임의로 속성을 만들수 있다. 조건으로 앞에 data-~~~라고 시작해야한다.

git fork와 clone의 차이점
git fork 란?

나의 git hub repository에 다른 사람의 git hub repository를 통째로 복사해서 가져오는 것이다.

fork한다음에 clone을 해야 나의 컴퓨터에서 사용이 가능하고 fork한 repository는 내 개인 repository내에서만 수정이 가능하다.(다른 사람의 repository에는 영향이 없다)

복제본이기 때문에 다른 사람이 자신의 git hub repository를 수정한다고 해서 실시간으로 update되지는 않는다.

이것을 실시간으로 update를 받으려면 어떻게 해야할까?

하나의 local저장소에서 원격저장소가 여러개일수도있다. 이럴때는 이름을 정해서 사용하면 된다.(기본은 origin)

다른 사람의 repository 에서 내려받아서 origin으로 push를 해야한다.(fork로 덮어씌우기는 안된다고 하심)

 

페이징 만들기

//한 페이지에 몇개씩 표시할 것인지
	final int PAGE_ROW_COUNT = 5;
	//보여줄 페이지의 번호를 일단 1이라고 초기값 지정
	int pageNum = 1;
	//페이지 번호가 파라미터로 저달되는지 읽어와본다.
	String strPageNum = request.getParameter("pageNum");
	//만일 페이지 번호가 파라미터로 넘어오다면
	if(strPageNum != null){
		//숫자로 바꿔서 보여줄 페이지 번호로 지정한다.
		pageNum = Integer.parseInt(strPageNum);
	}

pageNum 을 1이라는 초기값으로 설정해준다.

페이지 번호가 파라미터로 전달되는지 읽어본 후 페이지 번호가 파라미터로 넘어온다면 숫자로 바꿔서 보여줄 페이지 번호로 지정한다.

1페이지에 5(PAGE_ROW_COUNT)개씩 출력하기로 약속

현재 페이지 : pageNum

시작 행번호 : startRowNum

끝 행번호 : endRowNum

시작 행번호는 1, 6, 11, 16, 21씩 시작하는 공차수열이다.(5씩 늘어나는)

a(n) = a(1) + (n - 1)d   => a(1)은 초항 d는 공차

startRowNum = 1 + (pageNum - ) * PAGE_ROW_COUNT

endRowNum = pageNum * PAGE_ROW_COUNT 로 설정해주고

SELECT 문을 만들어준다.

SELECT * FROM
(SELECT result1.*, ROWNUM AS rnum
FROM
(SELECT num, writer, title, orgFileName, saveFileName, fileSize, regdate
 FROM board_file
ORDER BY num DESC) result1)
WHERE rnum BETWEEN ? AND ?;

하단에 페이지를 몇개씩 표시할지를 해본다.

 

하단 페이지를 몇개씩 표시할 것인지

final int PAGE_DISPLAY_COUNT = 5;

그리고 전체 글의 갯수를 리턴해주는 메소드도 만들어준다.

   //파일 하나의 정보를 리턴해주는 메소드
   public FileDto getData(int num) {
      FileDto dto = null;
      
      //필요한 객체의 참조값을 담을 지역변수 미리 생성
      Connection conn = null;
      PreparedStatement pstmt = null;
      ResultSet rs = null;
      try {
         //DbcpBean 객체를 이용해서 Connection 객체를 Connection Pool에서 얻어오기
         conn = new DbcpBean().getConn();
         //실행할 sql문
         String sql = "SELECT writer, title, orgFileName, saveFileName, fileSize, regdate"
               + " FROM board_file"
               + " WHERE num = ?";
         pstmt = conn.prepareStatement(sql);
         //sql문이 미완성이라면 여기서 완성
         pstmt.setInt(1, num);
         //select문 수행하고 결과값 받아오기
         rs = pstmt.executeQuery();
         //반복문 돌면서 ResultSet에 담긴 내용 추출
         while (rs.next()) {
            dto = new FileDto();
            dto.setNum(num);
            dto.setWriter(rs.getString("writer"));
            dto.setTitle(rs.getString("title"));
            dto.setOrgFileName(rs.getString("orgFileName"));
            dto.setSaveFileName(rs.getString("saveFileName"));
            dto.setFileSize(rs.getLong("fileSize"));
            dto.setRegdate(rs.getString("regdate"));
         }
      } catch (SQLException se) {
         se.printStackTrace();
      } finally {
         try {
            if (rs != null) {
               rs.close();
            }
            if (pstmt != null) {
               pstmt.close();
            }
            if (conn != null) {
               conn.close();
            } //Connection이 Connection Pool에 반납됨
         } catch (Exception e) {
         }
      }
      
      return dto;
   }
//하단 시작 페이지 번호
   int startPageNum = 1 + ((pageNum-1)/PAGE_DISPLAY_COUNT)*PAGE_DISPLAY_COUNT;
   //하단 끝 페이지 번호
   int endPageNum=startPageNum+ PAGE_DISPLAY_COUNT-1;
   //전체 글의 개수
   int totalRow=FileDao.getInstance().getCount();
   //전체 페이지의 갯수 구하기
   int totalPageCount=(int)Math.ceil(totalRow/(double)PAGE_ROW_COUNT);
   //끝 페이지 번호가 이미 전체 페이지 갯수보다 크게 계산되었다면 잘못된 값이다
   if(endPageNum > totalPageCount){
      endRowNum=totalPageCount;//보정해준다.
   }
<%for(int i = startPageNum; i <= endPageNum; i++) {%>
            <li class="page-item" <%=i == pageNum ? "active" :"" %>">
               <a class="page-link" href="list.jsp?pageNum=<%=i %>"><%=i %></a>
            </li>
         <%} %>

i 가 pageNum 이랑 같을 때  "active"를 출력해라라는 삼항연산자를 써 준다.

 

게시판만들기

먼저 게시판을 만들기 위해 table을 DB에 만들어준다.

--게시글을 저장할 테이블
CREATE TABLE board_cafe(
	num NUMBER PRIMARY KEY, --글번호
	writer VARCHAR2(100) NOT NULL, --작성자(로그인된 아이디)
	title VARCHAR2(100) NOT NULL, --제목
	content CLOB, --글 내용
	viewCount NUMBER, --조회수
	regdate DATE --글 작성일
);

그런다음 index.jsp에 들어가서 글 목록보기라는 링크를 하나 만들어준다.

<li><a href="cafe/list.jsp">글 목록보기</a></li>

위에 경로로 cafe 폴와 그 안에 들어갈 list.jsp를 만들어주고 그에 맞는 dto/dao를 만들어준다.

게시판을 만들어줄수 있는 새글작성 경로도 만들어주었다.

<a href="private/insertform.jsp">새글 작성</a>

구현할 것은 제목을 누르면 글을 볼 수 있게끔 그리고 게시글은 아무나 볼수 있도록 할 것이다.

그리고 본인이 그 페이지에 들어가게 될때 수정과 삭제를 할수 있도록

그리고 조회수 기능까지 구현해보도록하겠다.

cafe 폴더에서 private폴더를 만든 후 insertform.jsp를 만든다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/cafe/private/insertform.jsp</title>
</head>
<body>
	<div class="container">
		<h1>새글 작성 양식</h1>
		<form action="insert.jsp" method = "post">
			<div>
				<label for="title">제목</label>
				<input type="text" name = "title" id = "title"/>
			</div>
			<div>
				<label for = "content">내용</label>
				<textarea name="content" id="content" cols="30" rows="10"></textarea>
			</div>
			<button type = "submit">저장</button>
		</form>
	</div>
</body>
</html>

여까지 뼈대로 만들고 글이 너무길어서 다음장으로..

댓글