BoardController
(...생략...)
if(sPath.equals("/list.bo")) {
System.out.println("가상주소 비교 /list.bo 일치");
//http://localhost:8080/MVCProject/list.bo
//모든 게시판 1페이지
//http://localhost:8080/MVCProject/list.bo?pageNum=2
//한 페이지에 보여줄 글 개수 설정 10
int pageSize = 10;
//현 페이지 번호 가져오기
String pageNum = request.getParameter("pageNum");
//현 페이지 번호가 없으면(null이면) "1"페이지로 설정
if(pageNum==null) {
pageNum = "1";
}
//페이지 번호를 정수형으로 변경해서 계산
int currentPage = Integer.parseInt(pageNum);
//PageDTO 객체 생성
//pageSize, pageNum, currentPage 저장
PageDTO pageDTO = new PageDTO();
pageDTO.setPageSize(pageSize);
pageDTO.setPageNum(pageNum);
pageDTO.setCurrentPage(currentPage);
// BoardService 객체생성
boardService = new BoardService();
// ArrayList<BoardDTO> boardList = getBoardList() 메서드 호출
// ArrayList<BoardDTO> boardList = boardService.getBoardList();
ArrayList<BoardDTO> boardList = boardService.getBoardList(pageDTO);
//페이징 작업
//전체 글 개수 구하기
//int count = getBoardCount() 메소드 호출
int count = boardService.getBoardCount();
//한 화면에 보여줄 페이지 개수 설정
int pageBlock = 10;
//1~10, 11~20, 21~30, ....
//시작하는 페이지 번호 구하기
//currentPage pageBlock => startPage(정수형 나누기)
// 1~10(0~9) 10 => (0 ~ 9)/10*10+1 => 0*10 + 1 => 0+1 => 1
// 11~20(10~19) 10 => (10~19)/10*10+1 => 1*10 + 1 => 10+1 => 2
// 21~30(20~29) 10 => (20~29)/10*10+1 => 2*10 + 1 => 20+1 => 3
//int startPage = 계산식;
int startPage = (currentPage-1)/pageBlock*pageBlock+1;
//끝나는 페이지 번호 구하기
//startPage pageBlock => endPage
// 1 10 => 10
// 11 10 => 20
// 21 10 => 30
//int endPage = 계산식;
int endPage = (startPage-1)+pageBlock;
//pageDTO에 값을 저장
pageDTO.setCount(count);
pageDTO.setPageBlock(pageBlock);
pageDTO.setStartPage(startPage);
pageDTO.setEndPage(endPage);
//request에 "pageDTO" 저장
request.setAttribute("pageDTO", pageDTO);
// request 에 "boardList", boardList 담아서
request.setAttribute("boardList", boardList);
// board/list.jsp 주소변경없이 이동
dispatcher =request.getRequestDispatcher("board/list.jsp");
dispatcher.forward(request, response);
}//
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board/list.jsp</title>
</head>
<body>
<%
// // BoardDAO 객체생성
// BoardDAO boardDAO = new BoardDAO();
// // ArrayList<BoardDTO> 리턴할형 getBoardList() 메서드 정의
// // ArrayList<BoardDTO> boardList = getBoardList() 메서드 호출
// ArrayList<BoardDTO> boardList = boardDAO.getBoardList();
%>
<c:set var="pageDTO" value="${requestScope.pageDTO}"/>
<h1><a href="write.bo">글쓰기</a></h1>
<h1>board/list.jsp</h1>
<h1>게시판 글 목록 [전체 글의 개수 : ${pageDTO.count}]</h1>
<table border="1">
<tr><td>글번호</td><td>글쓴이</td><td>제목</td>
<td>조회수</td><td>작성일</td></tr>
<%
// for(int i=0; i<boardList.size(); i++){
// BoardDTO boardDTO = boardList.get(i);
%>
<%-- <tr><td><%=boardDTO.getNum() %></td> --%>
<%-- <td><%=boardDTO.getName() %></td> --%>
<%-- <td><a href="content.jsp?num=<%=boardDTO.getNum() %>"><%=boardDTO.getSubject() %></a></td> --%>
<%-- <td><%=boardDTO.getReadcount() %></td> --%>
<%-- <td><%=boardDTO.getDate() %></td> --%>
<!-- </tr> -->
<%
// }
%>
<c:set var="boardList" value="${requestScope.boardList}"/>
<c:forEach var="boardDTO" items="${boardList }">
<tr><td>${boardDTO.num}</td>
<td>${boardDTO.name}</td>
<td><a href="content.bo?num=${boardDTO.num}">
${boardDTO.subject}</a></td>
<td>${boardDTO.readcount}</td>
<td>${boardDTO.date}</td>
</tr>
</c:forEach>
<a href="main.me">메인으로 이동</a><br>
</table>
<c:forEach var="i" begin="${pageDTO.startPage }" end="${pageDTO.endPage }" step="1">
<a href="list.bo?pageNum=${i}">${i }</a>
</c:forEach>
</body>
</html>
실 페이지는 2페이지까지 밖에 없지만 10페이지까지 나타남
BoardController
(...생략...)
if(sPath.equals("/list.bo")) {
System.out.println("가상주소 비교 /list.bo 일치");
//http://localhost:8080/MVCProject/list.bo
//모든 게시판 1페이지
//http://localhost:8080/MVCProject/list.bo?pageNum=2
//한 페이지에 보여줄 글 개수 설정 10
int pageSize = 10;
//현 페이지 번호 가져오기
String pageNum = request.getParameter("pageNum");
//현 페이지 번호가 없으면(null이면) "1"페이지로 설정
if(pageNum==null) {
pageNum = "1";
}
//페이지 번호를 정수형으로 변경해서 계산
int currentPage = Integer.parseInt(pageNum);
//PageDTO 객체 생성
//pageSize, pageNum, currentPage 저장
PageDTO pageDTO = new PageDTO();
pageDTO.setPageSize(pageSize);
pageDTO.setPageNum(pageNum);
pageDTO.setCurrentPage(currentPage);
// BoardService 객체생성
boardService = new BoardService();
// ArrayList<BoardDTO> boardList = getBoardList() 메서드 호출
// ArrayList<BoardDTO> boardList = boardService.getBoardList();
ArrayList<BoardDTO> boardList = boardService.getBoardList(pageDTO);
//페이징 작업
//전체 글 개수 구하기
//int count = getBoardCount() 메소드 호출
int count = boardService.getBoardCount();
//한 화면에 보여줄 페이지 개수 설정
int pageBlock = 10;
//1~10, 11~20, 21~30, ....
//시작하는 페이지 번호 구하기
//currentPage pageBlock => startPage(정수형 나누기)
// 1~10(0~9) 10 => (0 ~ 9)/10*10+1 => 0*10 + 1 => 0+1 => 1
// 11~20(10~19) 10 => (10~19)/10*10+1 => 1*10 + 1 => 10+1 => 2
// 21~30(20~29) 10 => (20~29)/10*10+1 => 2*10 + 1 => 20+1 => 3
//int startPage = 계산식;
int startPage = (currentPage-1)/pageBlock*pageBlock+1;
//끝나는 페이지 번호 구하기
//startPage pageBlock => endPage
// 1 10 => 10
// 11 10 => 20
// 21 10 => 30
//int endPage = 계산식;
int endPage = (startPage-1)+pageBlock;
//전체 페이지 개수
//ex) 전체 글 개수가 19개, 한 화면에 보여줄 글 개수 10
//→ 12/10 = 1 → 1 + 나머지 있음(19 % 10 = 9) → 나머지가 있을 경우 1페이지 추가
//ex) 전체 글의 개수 10개
//10%10 = 1 + 나머지 없음(10%10 = 0) → 나머지가 없는 경우 0 페이지 추가
// => 글 개수/ 한 화면에 보여줄 글의 개수 + (조건(나머지가 없으면)? 0 : 1)
int pageCount = count/pageSize + ((count%pageSize==0)? 0:1);
// endPage > 전체 페이지 개수
if(endPage > pageCount) {
endPage = pageCount;
}
//pageDTO에 값을 저장
pageDTO.setCount(count);
pageDTO.setPageBlock(pageBlock);
pageDTO.setStartPage(startPage);
pageDTO.setEndPage(endPage);
pageDTO.setPageCount(pageCount);
//request에 "pageDTO" 저장
request.setAttribute("pageDTO", pageDTO);
// request 에 "boardList", boardList 담아서
request.setAttribute("boardList", boardList);
// board/list.jsp 주소변경없이 이동
dispatcher =request.getRequestDispatcher("board/list.jsp");
dispatcher.forward(request, response);
}//
이전, 다음 페이지 10개씩
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board/list.jsp</title>
</head>
<body>
<%
// // BoardDAO 객체생성
// BoardDAO boardDAO = new BoardDAO();
// // ArrayList<BoardDTO> 리턴할형 getBoardList() 메서드 정의
// // ArrayList<BoardDTO> boardList = getBoardList() 메서드 호출
// ArrayList<BoardDTO> boardList = boardDAO.getBoardList();
%>
<c:set var="pageDTO" value="${requestScope.pageDTO}"/>
<h1><a href="write.bo">글쓰기</a></h1>
<h1>board/list.jsp</h1>
<h1>게시판 글 목록 [전체 글의 개수 : ${pageDTO.count}]</h1>
<table border="1">
<tr><td>글번호</td><td>글쓴이</td><td>제목</td>
<td>조회수</td><td>작성일</td></tr>
<%
// for(int i=0; i<boardList.size(); i++){
// BoardDTO boardDTO = boardList.get(i);
%>
<%-- <tr><td><%=boardDTO.getNum() %></td> --%>
<%-- <td><%=boardDTO.getName() %></td> --%>
<%-- <td><a href="content.jsp?num=<%=boardDTO.getNum() %>"><%=boardDTO.getSubject() %></a></td> --%>
<%-- <td><%=boardDTO.getReadcount() %></td> --%>
<%-- <td><%=boardDTO.getDate() %></td> --%>
<!-- </tr> -->
<%
// }
%>
<c:set var="boardList" value="${requestScope.boardList}"/>
<c:forEach var="boardDTO" items="${boardList }">
<tr><td>${boardDTO.num}</td>
<td>${boardDTO.name}</td>
<td><a href="content.bo?num=${boardDTO.num}">
${boardDTO.subject}</a></td>
<td>${boardDTO.readcount}</td>
<td>${boardDTO.date}</td>
</tr>
</c:forEach>
<a href="main.me">메인으로 이동</a><br>
</table>
<!-- 11,21에서만 이전버튼이 보여야함. pageBlock과 비교 즉. 시작페이지번호와 페이지블록을 비교 -->
<c:if test="${pageDTO.startPage > pageDTO.pageBlock }">
<a href="list.bo?pageNum=${pageDTO.startPage - pageDTO.pageBlock }">[이전]</a>
</c:if>
<c:forEach var="i" begin="${pageDTO.startPage }" end="${pageDTO.endPage }" step="1">
<a href="list.bo?pageNum=${i}">${i }</a>
</c:forEach>
<!-- 끝페이지에서는 다음 버튼이 보여지지 않아야함. 끝 페이지 전체 < 페이지 개수 -->
<c:if test="${pageDTO.endPage < pageDTO.pageCount }">
<a href="list.bo?pageNum=${pageDTO.startPage+pageDTO.pageBlock}">[다음]</a>
</c:if>
</body>
</html>
※데이터베이스에 데이터 넣기
하나하나 넣으려면 힘들다...
--데이터베이스를 켜고 num값에 auto_increment속성(MySql 사용중이기 때문에 가능)
--readCount, date의 기본값을 각각 0과 now()로 설정해주고
--insert 문으로name, subject, content를 넣어준다.
alter table board modify readcount int default 0; --readCount의 기본값을 0으로 변경
alter table board modify date timestamp default now(); --date 기본값을 now()로 변경
alter table board modify num int not null auto_increment; --pk num에 auto_increment속성 부여
insert into board(name,subject,content)
select 'admin', concat('제목',floor(rand()*100)), concat('내용',floor(rand()*100))
from board;
--제목과 내용이 일치하지는 않지만 일단 들어간다.
스프링 프레임워크
스프링 프레임워크 설치
자바로 만든 프로그램 틀
전자정부표준 프레임워크
spring.io
- 이클립스 + 스프링 설치
Help - Eclipse Marketplace - find: spring - Spring Tools 4 (스프링부트) , Spring Tools 3(스프링 프레임 워크)
※스프링부트 : 스프링 프레임워크 경량화 - 이클립스 + 스프링 설치 => 압축 파일 다운
src-webapp-WEB-INF-lib에 넣어주기
https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3 접속https://download.springsource.com/release/STS/3.9.18.RELEASE/dist/e4.21/spring-tool-suite-3.9.18.RELEASE-e4.21.0-win32-x86_64.zip 다운로드
다운로드 된 파일을 C드라이브에 넣고 압축풀기(반디집 권장)
C:\sts-bundle\sts-3.9.18.RELEASE
STS.exe -> 바탕화면 바로가기 만들기(우클릭 - 보내기- 바탕화면 바로가기 만들기)
d:드라이브 작업 공간 만들기
d:드라이브 폴더(workspace_sts) 만들기 D:\workspace_sts
STS 환경설정
- 실행 후 Workspace - D:\workspace_sts - Launch
- Server apacheTomcat을 사용할 예정, 기존 Server 삭제, 기존 패키지 삭제
- 이클립스 초기 설치 후 같은 화면
- Window - Preferences - General - Textfile encoding - UTF-8
Window - Preferences - General - Web - CSS Files - Encoding - ISO10646/Unicode(UTF-8)
Window - Preferences - General - HTML Files - Encoding - ISO10646/Unicode(UTF-8)
Window - Preferences - General - JSP Files - Encoding - ISO10646/Unicode(UTF-8)
(선택사항)General - Appearance - Theme 화면테마 - Color and Fonts -Basic -Text Font - Edit - 글자크기
Apply close - 아파치 톰캣 서버 가져오기
File - New - Other - Server - Server
Apache - Tomcat 9.0 - 선택
Server host name : localhost - Next
C:\Program Files\Apache Software Foundation\Tomcat 9.0
Next - Finish - 프로젝트 만들기
File - New - Other - Spring - Spring Legacy Project - Next - Project Name - springProject - Templates - Spring MVC Project - Next - Yes - package - com.itwillbs.myweb(회사의 도메인, 중복방지) - Finish - 프로젝트 우클릭 - Run on Server - Always use this server when running this project 체크 - Finish
http://localhost:8080/myweb/
spring MVC 동작원리
사용자, 유저, 클라이언트 브라우저에 URL(주소) 입력
http://localhost:8080/myweb/
=> http가 요청정보를 가지고 localhost:8080 서버 찾아감
localhost:8080 서버에 /(모든페이지) 페이지 보고 싶다 요청
요청정보 들고 서버에 감(처리)
=> 1. 웹서버(아파치) 전달
=> 웹서버 안에 / 페이지 찾기 => 처리필요
=> 2. 웹 애플리케이션 서버(WAS,톰캣,웹컨테이너) 전달
=> 1) request(http가 들고온 요청정보를 저장),
response(서버 처리결과 응답정보를 저장)
기억장소 만들어줌(객체생성)
=> 2) src-main-webapp-WEB-INF-web.xml 참조 (설정 정보 확인) - source
가상주소 / 모든 가상 주소 -> 주소매핑하는 처리담당자 servlet(xml)연결
=> 3) servlet(명령 처리담당자) 기억장소 만들어줌
web.xml
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<!-- 2) servlet-name인 appServlet을 찾음
=> 스프링파일 DispatcherServlet(서블릿 지정) 연결
=> /WEB-INF/spring/appServlet/servlet-context.xml 서블릿 지정 -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 1) / 모든 주소, 모든 가상 주소가 들어오면 servlet-name인 appServlet을 찾으러 감 -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
주소매핑 : 가상주소 뽑아와서 주소비교해서
실제페이지(자바 메서드) 연결
=> JAVA,JSP 명령을 처리하고 결과를 html변경 작업
(응답정보를 response에 저장)
=> response(응답정보)를 웹서버에 전달
=> response(응답정보)를 http에 전달
=> 응답정보를 사용자에게 전달
=> request, response, servlet 기억장소 해제
'KDT > WEB' 카테고리의 다른 글
240123 WEB - SPRING3(가상주소매핑, 의존성주입) (0) | 2024.01.23 |
---|---|
240122 WEB - SPRING2(환경설정, 가상주소매핑) (0) | 2024.01.22 |
240116 WEB - JSP24(MVC, JSTL, 게시글 자르기(페이징알고리즘)) (0) | 2024.01.16 |
240115 WEB - JSP23(MVC, JSTL) (0) | 2024.01.15 |
240112 WEB - JSP22(MVC, JSTL) (0) | 2024.01.12 |