이안의 평일코딩

JSP 3일차 - include 본문

Back-end/JSP

JSP 3일차 - include

이안92 2020. 9. 22. 12:48
반응형

2020.09.22(화)

basic1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%--
     실행 순서 
     => 자바 실행 => html을 실행
        =======
        사용자가 보낸 데이터를 받거나
        데이터베이스에서 데이터를 읽어 온다 
        
        7장 => 제어 흐름 
             ========
                   화면 이동 , 화면 조립 
          ================= pageContext
              = include()
              = forward()
           =============== 많이 사용(태그로 변경)
              = <jsp:include> : jsp파일을 여러개 묶어서 한 화면으로 만들어 준다 
                ============== 여러개의 jsp가 모여서 만들어진다 (어떤 JSP든 상관없이 request를 공유할 수 있다)
              = <jsp:forward> : 화면은 이동 => request를 사용이 가능 (일반 JSP(Model1)) forward사용하지 않고 
                                           mvc구조에 주로 사용 
                sendRedirect() : 화면 이동 => request가 초기화
           ================================
           
           
           main.jsp  =>  main.jsp?no=10 => request가 항상 공유
           =============================
           
                                              메뉴 (nav.jsp) ==> no=10 ===> 고정
           =============================
                     로그인          |  화면 (사용자가 보는 화면)
           (login.jsp|   content.jsp  no=10
                     |
                     |
                     |
           =============================
                                         회사정보  footer.jsp no=10   ===> 고정 
           
           =============================
           
           ========> main.jsp를 불러서 사용 (템플릿)
               include가 되면 항상 데이터를 전송시에 main.jsp로 전송하고 
                            필요한 jsp가 받아서 처리
                            
                            
           include : JSP안에 다른 JSP를 원하는 위치에 출력 
           <jsp:include>
             : jsp마다 따로 실행후에 => HTML만 묶어준다 
           <%@include%>
             : jsp를 미리묶어서 합쳐진 JSP를 컴파일
             : 변수가 동일하면 오류(에러 발생) => static
          =============== Spring에서 사용
 --%>
 <%
 	// 사용자 요청 정보를 받는다
 	String mode = request.getParameter("mode");
 	if(mode==null)
 		mode="1";
 	int index=Integer.parseInt(mode);
 	
 	String jsp="";
 	switch(index){
 	case 1: 
 			jsp="content.jsp";
 			break;
 	case 2: 
 			jsp="detail.jsp";
 			break;
 	}
 	
 %>
<!DOCTYPE html>
<html>
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<jsp:include page="nav.jsp"></jsp:include>
<div class="container-fluid"><!-- full 화면 -->
  <div class="row">
    <div class="col-sm-3">
      <!-- 로그인 -->
      <jsp:include page="login.jsp"></jsp:include>
    </div>
    <div class="col-sm-9">
      <!-- 레시피 : 메뉴를 클릭시마다 변경 : 변수를 잡아서 => jsp파일명을 변경 -->
      <jsp:include page="<%=jsp %>"></jsp:include>
    </div>
  </div>
</div>

</body>
</html>

 

nav.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 메뉴가 올라가는 자리 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="#">SIST Recipe</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active"><a href="basic1.jsp?mode=1">Home</a></li>
      <li><a href="#">예매하기</a></li>
      <li><a href="#">게시판</a></li>
      <li><a href="#">자료실</a></li>
      <li><a href="#">마이페이지</a></li>
    </ul>
  </div>
</nav>
</body>
</html>

 

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <table class="table">
     <tr>
       <td class="text-right">ID</td>
       <td>
         <input type=text class="input-sm" name=id>
       </td>
     </tr>
     <tr>
       <td class="text-right">PW</td>
       <td>
         <input type=password class="input-sm" name=pwd>
       </td>
     </tr>
     <tr>
       <td class="text-right" colspan="2">
         <input type=button value="로그인" class="btn btn-sm btn-success">
       </td>
     </tr>
   </table>
</body>
</html>

 

detail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <h1 class="text-center">상세보기</h1>
</body>
</html>

 

content.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*,com.sist.dao.*"%>
<%-- 변경되는 화면 
    <div class="panel panel-primary">
      <div class="panel-heading">Panel with panel-primary class</div>
      <div class="panel-body">Panel Content</div>
    </div>
    <div class="col-md-4">
    <div class="thumbnail">
      <a href="/w3images/lights.jpg">
        <img src="/w3images/lights.jpg" alt="Lights" style="width:100%">
        <div class="caption">
          <p>Lorem ipsum...</p>
        </div>
      </a>
    </div>
  </div>
--%>
<%
     MovieDAO dao=new MovieDAO();
     List<MovieVO> list=dao.movieListData(1);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <h1 class="text-center">영화 목록</h1>
  <%
      for(MovieVO vo:list)
      {
  %>
         <div class="col-md-4">
            <div class="panel panel-primary">
		      <div class="panel-heading"><%=vo.getTitle() %></div>
		      <div class="panel-body">
		        <div class="thumbnail">
		            <a href="basic1.jsp?mode=2">
			        <img src="<%=vo.getPoster() %>" alt="Lights" style="width:100%">
			        </a>
			    </div>
		      </div>
		    </div>
         </div>
  <%
      }
  %>
</body>
</html>

 

footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.util.*,com.sist.dao.*"%>
<%
     MovieDAO dao=new MovieDAO();
     List<String> list=dao.empGetName();
%>
<%-- 영화 : cookie(최근본 영화),session(로그인) --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <ul>
     <%
        for(String s:list)
        {
     %>
          <li><%=s %></li>
     <%
        }
     %>
   </ul>
</body>
</html>

 

MovieVO.java

package com.sist.dao;
/*
 * 
 * 이름       널?       유형            
-------- -------- ------------- 
NO       NOT NULL NUMBER        
CATENO            NUMBER        
TITLE    NOT NULL VARCHAR2(200) 
POSTER   NOT NULL VARCHAR2(300) 
REGDATE           VARCHAR2(200) 
GENRE    NOT NULL VARCHAR2(100) 
GRADE    NOT NULL VARCHAR2(100) 
ACTOR             VARCHAR2(100) 
SCORE             VARCHAR2(20)  
DIRECTOR NOT NULL VARCHAR2(100) 
STORY             CLOB          
KEY               VARCHAR2(50)

=> JSP => 새로운 데이터형 만들기 (여러개 데이터를 모아서 관리) : ~Bean
	MyBatis => 데이터를 모아서(데이터베이스) 전송을 목적 : ~DTO
	Spring => 값을 저장하는 클래스 : ~VO 
 * 
 */
public class MovieVO {
	private int no;
	private int cateno;
	private String title;
	private String poster;
	private String regdate;
	private String genre;
	private String grade;
	private String actor;
	private String score;
	private String director;
	private String story;
	private String key; // 동영상
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public int getCateno() {
		return cateno;
	}
	public void setCateno(int cateno) {
		this.cateno = cateno;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getPoster() {
		return poster;
	}
	public void setPoster(String poster) {
		this.poster = poster;
	}
	public String getRegdate() {
		return regdate;
	}
	public void setRegdate(String regdate) {
		this.regdate = regdate;
	}
	public String getGenre() {
		return genre;
	}
	public void setGenre(String genre) {
		this.genre = genre;
	}
	public String getGrade() {
		return grade;
	}
	public void setGrade(String grade) {
		this.grade = grade;
	}
	public String getActor() {
		return actor;
	}
	public void setActor(String actor) {
		this.actor = actor;
	}		
	public String getScore() {
		return score;
	}
	public void setScore(String score) {
		this.score = score;
	}
	public String getDirector() {
		return director;
	}
	public void setDirector(String director) {
		this.director = director;
	}
	public String getStory() {
		return story;
	}
	public void setStory(String story) {
		this.story = story;
	}
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	
}

 

MovieDAO.java

package com.sist.dao;
import java.sql.*;// Connection,PreparedStatement,ResultSet
import javax.sql.*;// 데이터베이스 정보를 모아서 처리 : DataSource
import javax.naming.*;// jdbc/oracle => Connection객체의 주소를 찾는 경우
import java.io.*;
import java.util.*;// ArrayList
/*
 *    ConnectionPool 
 *    ==> 변경 
 *    ==> connection 객체 얻기할때만 달라진다 
 *    ==> Connection을 직접 생성 ==> 미리 만들어져 있기 때문에 (만들어진 주소만 얻어온다) => jdbc/oracle
 */
public class MovieDAO {
     private Connection conn;
     private PreparedStatement ps;
     // MyBatis에서 사용중 ==> POOLED
     public void getConnection()// 미리 생성된 connection을 얻어온다 
     {
    	 try
    	 {
    		 // 연결 => POOL에 연결 (POOL => Connection객체 관리 영역)
    		 Context init=new InitialContext();
    		 Context c=(Context)init.lookup("java://comp/env");
    		 DataSource ds=(DataSource)c.lookup("jdbc/oracle");
    		 // POOL => 가상으로 (이름) 디렉토리가 만들어 있다 (JNDI)
    		 conn=ds.getConnection();
    	 }catch(Exception ex)
    	 {
    		 System.out.println(ex.getMessage());
    	 }
     }
     public void disConnection()// 사용후에 반환 
     {
    	 try
    	 {
    		 if(ps!=null) ps.close();
    		 if(conn!=null) conn.close();
    	 }catch(Exception ex) {}
     }
     // 기능 => 동일 
     public List<String> empGetName()
     {
    	 List<String> list=new ArrayList<String>();
    	 try
    	 {
    		 getConnection();// 주소 얻기
    		 String sql="SELECT ename FROM emp";
    		 ps=conn.prepareStatement(sql);
    		 ResultSet rs=ps.executeQuery();
    		 while(rs.next())
    		 {
    			 list.add(rs.getString(1));
    		 }
    		 rs.close();
    	 }catch(Exception ex)
    	 {
    		 System.out.println(ex.getMessage());
    	 }
    	 finally
    	 {
    		 disConnection();//반환(재사용)
    	 }
    	 return list;
     }
     public List<MovieVO> movieListData(int page)
     {
    	 List<MovieVO> list=new ArrayList<MovieVO>();
    	 try
    	 {
    		 // 미리 만들어진 Connection주소를 얻어온다 (주소)
    		 getConnection();
    		 // SQL문장을 전송 
    		 int rowSize=20;
    		 int start=(rowSize*page)-(rowSize-1);//rownum = 1
    		 int end=rowSize*page;
    		 
    		 String sql="SELECT no,title,poster,num "
    				   +"FROM (SELECT no,title,poster,rownum as num "
    				   +"FROM (SELECT no,title,poster "
    				   +"FROM daum_movie ORDER BY no ASC)) "
    				   +"WHERE num BETWEEN "+start+" AND "+end;
    		 // 전송
    		 ps=conn.prepareStatement(sql);
    		 ResultSet rs=ps.executeQuery();
    		 while(rs.next())
    		 {
    			 MovieVO vo=new MovieVO();
    			 vo.setNo(rs.getInt(1));
    			 vo.setTitle(rs.getString(2));
    			 vo.setPoster(rs.getString(3));
    			 
    			 // list추가
    			 list.add(vo);
    		 }
    		 rs.close();
    	 }catch(Exception ex)
    	 {
    		 System.out.println(ex.getMessage());
    	 }
    	 finally
    	 {
    		 // 반환 
    		 disConnection();
    	 }
    	 return list;
     }
     // 톰캣 => 웹에서만 사용이 가능
		/*
		 * public static void main(String[] args) { MovieDAO dao=new MovieDAO();
		 * List<String> list=dao.empGetName(); for(String s:list) {
		 * System.out.println(s); } }
		 */
     /*
      *    getConnection()
      *    SQL문장 전송 
      *    결과값 받아서 ArrayList에 담아준다 
      */
}

 

 

반응형
Comments