-
MVC모델2, JSTLJAVA 2021. 7. 25. 13:18
JSP & Spring 의 대표모델 (MVC모델)
화면 - > 업무 - > 데이터처리
화면 : View 업무 : Control => (1) 요청 (2) 업무 (3) 경로지정
(2) 업무 = 데이터처리
즉, 지금은 Control 와 Model을 같은 JSP 에서 다룬다.데이터처리 : Model => DAO, VO 이용 view + control + (Model)DAO + (Model)VO
UML 모델에 작성해보자.
Board 목록
>> IBoardDAO.java , BoardDAO.java (메서드추가)
List<Board> selectAll(); // IBoardDAO 인터페이스
public List<Board> selectAll() { // BoardDAO 클래스에서 구현 ArrayList<Board> array게시물 = new ArrayList<Board>(); try { Connection DB연결관리자 = ConnectionUtil.getConnection(); Statement 명령전달자 = DB연결관리자.createStatement(); String 수집SQL = "select no,title,wdate,views,writer from board order by wdate desc"; ResultSet 수집된표관리자 = 명령전달자.executeQuery(수집SQL); while (수집된표관리자.next()) { int 게시물번호 = 수집된표관리자.getInt("no"); String 제목 = 수집된표관리자.getString("title"); java.sql.Date 작성일 = 수집된표관리자.getDate("wdate"); int 조회수 = 수집된표관리자.getInt("views"); int 작성회원번호 = 수집된표관리자.getInt("writer"); Member member = memberDAO.findByNo(작성회원번호); Board 게시물1 = new Board(); 게시물1.setNo(게시물번호); 게시물1.setTitle(제목); 게시물1.setWdate(작성일); 게시물1.setViews(조회수); 게시물1.setWriter(member); array게시물.add(게시물1); } 수집된표관리자.close(); 명령전달자.close(); DB연결관리자.close(); } catch (Exception e) { e.printStackTrace(); } return array게시물; }
>> 게시물목록.jsp
<% // 1. 요청(넘어오는 값 받는 곳//주로 넘겨주는 페이지에서 DB로 가져온 데이터를 바인딩해준다.) // 2. 업무(업무규칙, DB이용) // 2-1. 업무규칙 = 목록보기는 누구나 언제나 가능. 특이사항 없음 // 2-2. DB이용 = 모든 게시물 수집 IBoardDAO iBoardDAO = new BoardDAO(); //Spring 에서는 이렇게 한다. //@AutoWired : 어노테이션으로 아래 인터페이스를 구현한 클래스를, import 항목에서 가져와 객체로 만들어준다. //IBoardDAO iBoardDAO; import 항목에 IBoardDAO 를 구현한 BoardDAO 가 있으니 그 객체로 생성됨. List<Board> boards = iBoardDAO.selectAll(); // 3. 경로지정 (필요데이터 보내기) request.setAttribute("boards", boards); String viewName = "게시물목록창"; RequestDispatcher rd = request.getRequestDispatcher(ViewResolver.getJspViewName(viewName)); rd.forward(request, response); // Spring 에서는 이렇게 한다. //ModelAndView mv = new ModelAndView(); //mv.setViewName("게시물목록창"); %>
JSTL
https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
여기서 JSTL API 다운로드.
JSTL(JSP 를 간단한 코드로 만든 API)
uri 로 jstl Core를 가져오고 prefix에 이름을 사용자가 아무거나 지정 prefix에 정한 이름으로 출력, 변수등 Core태그를 쓴다. ' ${} ' 자바코드를 간단하게 사용거나 값을 가져오는 태그
<c:set> 에서 선언한 var 값도 포함
<c:out> 안에 value 로 선언되거나, 혼자 선언돼있으면 화면에 출력된다.Core태그 속성 <c:set>, <c:remove> var 선언, value 지정 변수선언, 변수제거 <c:out> value 출력지정 변수값출력, ${} 태그로 가져와야 함. <c:if> test if문, ${조건식}으로 가져와야 함. <c:choose> X if문 다중선택 선언태그
(when, otherwise 태그를 감쌈)<c:when> test if문 다중선택, if...else if 로 쓰임 <c:otherwise> X if문 다중선택, else 로 쓰임 <c:forEach> <var="i" begin="1" end="8" step="1">
= for(int i = 1; i <= 8; i++)
<var="board" items="${boards}" varStatus="status">
= for(Board board : boards)
+ int status = 1;for문
향상된 for문
varStatus: 추가적인 변수선언으로
count 라는 status++ 메서드를 가지고 있음
>> test.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>Insert title here</title> </head> <body> <!-- setAttribute --> <c:set var ="count" value="1" /> <%int count2 = 1; /* 같은 의미 */ %> <!-- getAttribute --> <c:out value="${count+1}"/> = <%=count2 + 1 /* 같은 의미 */ %> <!-- removeAttribute --> <c:remove var="count"/> <c:out value="${count}"/> </body> </html>
>> if 문
<c:set var ="num" value="1" /> <%int count2 = 1; // 같은 의미%> <!-- $ 에 if 가 들어갔다고 생각하는게 좋다. --> <c:if test= "${num>0}"> 1보다 크다. </c:if>
<c:set var="count" value="1" /> <!-- choose = if 문 시작--> <c:choose> <!-- 첫번째 when: if문--> <c:when test="${count ==1 }"> <c:out value="${count}" /> 이다. </c:when> <!-- 두번째 when: else-if문 --> <c:when test="${count > 1 }"> <c:out value="${count}" /> 보다 큼. </c:when> <!-- 세번째 otherwise: else문 --> <c:otherwise> <c:out value="${count}" /> 보다 작음. </c:otherwise> </c:choose>
>> foreach 문
<!-- begin 부터 end 까지 1씩증가하는 for문 --> <c:forEach var="i" begin="1" end="8" step="1"> <c:out value="${i}"/><br> ${i} // 둘 다 같은값 </c:forEach>
>> Board.java
<% ArrayList<Board> boards = new ArrayList(); Board board1 = new Board(); board1.setNo(1); board1.setTitle("t1"); boards.add(board1); Board board2 = new Board(); board2.setNo(2); board2.setTitle("t2"); boards.add(board2); request.setAttribute("boards", boards); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!-- item 으로 값을 가져오고 var 선언한 변수에 for문으로 하나씩 집어넣는다. varStatus 는 옵션 변수.--> <c:forEach var="board" items="${boards}" varStatus="status"> <!-- board.no = 집어넣은 board 객체의 get메서드를 사용한 형태 --> ${status.count} : ${board.no} ${board.title} <br> </c:forEach> <!-- java code 로 하면 이렇게 --> <% int count = 1; for(Board board : boards){%> <%= count++ %> : <%= board.getNo() %> <%=board.getTitle() %> <br> <%} %>
'JAVA' 카테고리의 다른 글
MVC 3 Tier,인터페이스정의서,AJAX-JSON사용,BLOB(image) (0) 2021.07.25 Servlet, 과도기 MVC (0) 2021.07.25 MVC모델이란 (0) 2021.07.25 ConnectionPool,ViewResolver (0) 2021.07.25 UML만들기-DesignModel&class관계,maven프로젝트 (0) 2021.07.25