ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MVC모델2, JSTL
    JAVA 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

    댓글

Designed by Tistory.