국비지원학원/XML,JSON,AJAX

109일차-객체다형성+Model2예시

초코맛 2019. 4. 15. 00:31
반응형
*객체다형성의 특징(장점)
  • 중복코드를 줄임으로 편리함을 보쟈
    • 추상메소드를 만들어(구현의 강제성)
    • =>추상클래스,인터페이스
    • 쓸데없이 클래스의 크기가 커질 수 있다는 단점을 가진다.
    • 인터페이스는 안에 추상메소드와 상수를 가지는데 static이라 공용으로 빠져 크기산정에 포함되지 않는다.
    • 인터페이스에도 일을 하는 method를 넣고 싶으면 default method를 넣어 body가있는 method가 되어 일을 할 수 있다. (추상클래스와 크게 차이가 안나게 된다)
    • 추상메소드를 딱하나 가지고있는 인터페이스를 functional interface라고 하는데 자식클래스를 만들지 않고 사용하고 싶을때 람다식을 사용한다.
    • 세개의 클래스가 contoroller를 상속받아..오버라이딩(매개변수 다른게 오버로딩)
    • 이때 is a 자식은 부모이다.
    • is a는 꺼내서 쓰는코드가 확줄어든다 (한줄)
package day0402;
public class JeaHyun implements Person {
     public String execute() {
           return "저요";
     }//execute
}//class
package day0402;
public class SeonUi implements Person {
     public String execute() {
           return "어...";
     }//execute
}//class
package day0402;
public class TeackSung implements Person {
     public String execute() {
           return "배고프다";
     }//execute
}//class
package day0402;
import java.util.HashMap;
import java.util.Map;
public class Run {
     /**
      * is a 관계를 사용했을 때
      **is a -자식은 부모이다.(자식클래스로 부모를 얻어  사용하는것)
      */
     public void useIsA() {
           Map<String, Person> map=new HashMap<String,Person>();
           //값 할당
           map.put("gong", new SeonUi());
           map.put("lee", new JeaHyun());
           map.put("Jung", new TeackSung());
           
           //키
           String key="Jung";
           //Is a -객체 다형성을 사용하여 부모에 얻어낸 자식을  저장한다.
           if(map.containsKey(key)) {//nullPoint 방지
                Person person=map.get(key);
                System.out.println(person.execute());
           }//end if
     }//useIsA
     
     /**
      * is a 관계를 사용하지 않고 객체를 사용할 때
      **is a 안쓰고 ->코드가 더 줄어듦
      */
     public void notUseIsA() {
           Map<String, Object> map=new HashMap<String,Object>();
           //값 할당
           map.put("gong", new SeonUi());
           map.put("lee", new JeaHyun());
           map.put("Jung", new TeackSung());
           
           //값 사용
           //is a 를 쓰지 않으면 값 사용하는 코드가 길어진다.
           String key="gong"; //입력하는 값 = 커멘드=commend  
           //gong이 아니면 SeonUi는 Error 따라서 if로 확인해주어야  한다.
           if("gong".equals(key)) { //문자열은 널포인트 방지로  앞에두고 비교한다.
                SeonUi su=(SeonUi)map.get(key);
                System.out.println(su.execute());
           }//end if
           if("lee".equals(key)) {
                JeaHyun jh=(JeaHyun)map.get(key);
                System.out.println(jh.execute());
           }//end if
           if("Jung".equals(key)) {
                TeackSung ts=(TeackSung)map.get(key);
                System.out.println(ts.execute());
           }//end if
     }//notUseIsA
     
     
     public static void main(String[] args) {
           Run run=new Run();
           run.useIsA();
          System.out.println("=======================================");
           run.notUseIsA();
     }//main
}//class
  • //is  a
  • String key="gong";
  • Controller c=m.get(key); //캐스팅도 필요없음.
  • c.execute(); //오버라이딩 되었을때 자식의 것이 불려지기 때문에 잘나옴.
  • //=>어.., 저요, 배고프다
  • //=>같은메소드를 불렀는데 다른결과가 나오게되는것을 객체 다형성

package day0402;
public interface Person {
     public String execute();
     /*public default void test() {
           System.out.println("ddd");
     }//test-default method(일가능)
     */
}//interface
<%@ 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>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import  url="../common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>
     <div id="container">
     
     요청
     <a href="main.do">main</a>
     <a href="a.do">a</a>
     <a href="b.do">b</a>
     <a href="yana.do">yana</a>
     <!-- 어떤걸 눌러도 main으로 간다면 진입점을 하나로 설정한다고  하는것 -->
     
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>
package day0401;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class MainController extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
        //으로 post로 넘겨 진입점을 하나로 만듦
    }//doGet

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //response.sendRedirect("day0401/hello.jsp");//페이지의 변경을 알아 보안에 걸려서 쓰지 않는다.
        //RequestDispatcher rd=request.getRequestDispatcher("day0401/hello.jsp");
        RequestDispatcher rd=request.getRequestDispatcher("day0402/view.jsp");
        rd.forward(request, response);
        
    }//doPost
}//class

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  id="WebApp_ID" version="2.5">
  <display-name>model2_prj</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name></web-resource-name>
      <url-pattern>*.jsp</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name></role-name>
    </auth-constraint>
  </security-constraint>
  <error-page>
    <error-code>403</error-code>
    <location>/common/error/err_403.html</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/common/error/err_403.html</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/common/error/err_403.html</location>
  </error-page>
  <servlet>
    <description></description>
    <display-name>MainController</display-name>
    <servlet-name>MainController</servlet-name>
    <servlet-class>day0401.MainController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MainController</servlet-name>
<!--     <url-pattern>/MainController</url-pattern> -->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
     location.href="index.do";
</script>
</head>
<body>
</body>
</html>


  • //절대 컨트롤러에서 다오를 직접연결하지 않는다 비어도 서비스를 만든다!!!!
  • //어제는 JSP요청을 말은것뿐이고 진입점을 하나로 만들어야 함.

web.xml파일에 <url-pattern>*.do</url-pattern>로 변경해주면서 jsp파일의 진입을 막는다(?)

진입점에 대한 설정!=> do말고는 maincontroller가 동작하지 않는다. 에러페이지가 나타난다.

 



D001 : DeptController
E001 : EmpController

//maincontroller 는 진입점이자 JSP로 보내는 일 (맵으로 가 분배)->요청에 대한 처리 Controller실행, view페이지로 이동
//Controller는 요청파라메터 처리, 관계유지, Service사용, 이동할 페이지 URL, 이동방식설정
//Service 업무로직 처리

//index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
location.href="index.do";
</script>
</head>
<body>
</body>
</html>
//MainController.java
package kr.co.sist.dist;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.co.sist.controller.Controller;
import kr.co.sist.controller.DeptController;
import kr.co.sist.controller.EmpController;

/**
* 진입점 : 모든 요청을 받고, 요청을 처리할 Controller를 (Map에서) 찾아서 실행한다.
*          View로 이동
* @author owner
*/
@SuppressWarnings("serial")
public class MainController extends HttpServlet {
    
    private static Map<String, Controller> distMap=new HashMap<String,Controller>();//메소드를 불러 일하면 안됨 별도로 생성을 해버리면 불가능하다. 변수의 선언, 메소드만 가능하기 때문.
    
    //인스턴스 영역으로 딱 한번만 실행되게 된다.
    static { //영역 : 개발자가 호출하지 않고 자바코드를 자동으로 실행해야 할 때 사용한다.-생성자보다 빠르다.
        //-instance 영역(객체가 생성되면 자동 호출)
        //-static 영역(JVM이 실행되고 관련클래스가 생성되면 자동 호출)-제일먼저 읽힌다.
    distMap=new HashMap<String,Controller>();
    distMap.put("D001", new DeptController()); //부서조회 업무
    distMap.put("E001", new EmpController()); //사원조회 업무
    //static은 new 가 안되더라도 다른데서 불리면 실행된다?
    }//static
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);///GET방식의 요청이 있어도 doPost로 처리한다. 요청방식은 그대로 바뀌는건 아님.
    }//doGet
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        
        String cmd=request.getParameter("cmd");
        if(cmd==null || "".equals(cmd)) { //cmd가 없거나 또는 cmd에 값이 없을 때.
            cmd="D001";
        }//end if
        
        Controller controller=distMap.get(cmd);
        if(controller==null) { //cmd를 외부에서 임의로 변경했을 때 처리
            controller=distMap.get("D001"); //외부에서 임의로 변경하면 메인을 제공한다.
        }//end if
        //웹 파라메터 처리, 관계유지(Session),업무처리 결과를 Scope객체(request객체)에 설정하는 일.
        controller.execute(request, response);
        //이동할 페이지 URL받기
        String url=controller.moveURL();
        //이동 방식 받기
        boolean forwardFlag=controller.isForward();
        //System.out.println(url);
        
        pageMove(request, response, url, forwardFlag);//페이지 이동
        
    }//doPost

    public void pageMove(HttpServletRequest request, HttpServletResponse response, String moveURL, boolean isForward) throws ServletException, IOException{
        if(isForward) { //forward이동
            RequestDispatcher rd=request.getRequestDispatcher(moveURL);
            rd.forward(request, response);
        }else { //redirect이동
            response.sendRedirect(moveURL);
        }//end else
    }//pageMove
}//class

//web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  id="WebApp_ID" version="2.5">
  <display-name>model2_emp</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>MainController</servlet-name>
     <servlet-class>kr.co.sist.dist.MainController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MainController</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <security-constraint>
    <web-resource-collection>
      <web-resource-name></web-resource-name>
      <url-pattern>*.jsp</url-pattern>
      <http-method>GET</http-method>
      <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
      <role-name></role-name>
    </auth-constraint>
  </security-constraint>
</web-app>
//Controller.java
package kr.co.sist.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Controller {
    //HttpServletRequest 를 줌으로 일반 클래스에서도 관계유지 (파일다운, 파라메터 처리) 가 가능하게 된다.
    /**
     * 요청, 응답처리, 관계유지 객체(Session-서버의 메모리에 저장해 다 저장가능, Cookie-접속자의 정보를 접속자의 HDD에 저장)의 사용
     * @param request 웹 파라메터 요청처리
     * @param response 응답처리
     * @throws ServletException
     * @throws IOException
     */
    public void execute(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException;
    
    /**
     * 처리한 결과를 보여줄 JSP명을 반환
     * @return
     */
    public String moveURL();
    /**
     * 처리한 결과를 보여줄 JSP, HTML로 이동하는 이동 방식을 선정.
     * @return
     */
    public boolean isForward();
}
//DeptController.java
package kr.co.sist.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.co.sist.service.DeptService;
import kr.co.sist.vo.DeptVO;

/**
* 모든 부서정보를 조회하는 일(요청 하나를 클래스 하나가 처리한다.-일이 겹치지 않고 업무분담이 쉬움=>Spring MVC가 나와 편리해짐)
* @author owner
*/
public class DeptController implements Controller{
    private String url;
    private boolean forwardFlag;

    @Override
    public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        DeptService ds=new DeptService();
        List<DeptVO> deptList=ds.searchAllDept();
        //처리된 데이터를 jsp에서 보여주기 위해 Scope객체에 설정
        request.setAttribute("deptList", deptList);
        url="dept/dept.jsp";
        forwardFlag=true;
    }//execute

    @Override
    public String moveURL() {
        return url;
    }//moveURL

    @Override
    public boolean isForward() {
        return forwardFlag;
    }//isForward

}//class

//Model2DAO.java
package kr.co.sist.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import kr.co.sist.vo.DeptVO;
import kr.co.sist.vo.EmpVO;

public class Model2DAO {
    private static Model2DAO jes_dao;
    
    private Model2DAO() {            
    }//JsonEmpSearchDAO
    
    public static Model2DAO getInstance() {
        if(jes_dao==null) {
            jes_dao=new Model2DAO();
        }//end if
        return jes_dao;
    }//getInstance
    
    private Connection getConn() throws SQLException{
        Connection con=null;
        
        try {
        //1.JNDI 사용객체 생성
            Context ctx=new InitialContext();
        //2.DBCP에 저장된 DataSource 얻기
            DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/model2_dbcp");
        //3.Connection 얻기
            con=ds.getConnection();
        } catch (NamingException e) {
            e.printStackTrace();
        }//end catch
        
        return con;
    }//getConn
    
    public List<EmpVO> selectEmpList(int deptno) throws SQLException{
        List<EmpVO> list=new ArrayList<EmpVO>();
        
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        
        try {
        //1.JNDI 사용객체 생성
        //2.DataSource를 DBCP에서 꺼내온다.
        //3.Connection 얻기
            con=getConn();
        //4.쿼리문 수행 객체 얻기
            String selectEmp="select empno,sal,ename,job,to_char(hiredate,'yyyy-mi-dd dy') hiredate from emp where deptno=?";
            pstmt=con.prepareStatement(selectEmp);
            pstmt.setInt(1, deptno);
        //5.쿼리문 수행 후 결과 얻기
            rs=pstmt.executeQuery();
            EmpVO ev=null;
            while(rs.next()) {
                ev=new EmpVO(rs.getInt("empno"),rs.getInt("sal"),rs.getString("ename"),
                        rs.getString("job"),rs.getString("hiredate"));
                list.add(ev);
            }//end while
            
        }finally {
            //6.연결 끊기
            if(rs !=null) {rs.close();}//end if
            if(pstmt !=null) {pstmt.close();}//end if
            if(con !=null) {con.close();}//end if
        }//end finally
        
        return list;
    }//selectEmpList
    
    public List<DeptVO> selectDeptList() throws SQLException{
        List<DeptVO> list=new ArrayList<DeptVO>();
        
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        
        try {
        //1.JNDI 사용객체 생성
        //2.DataSource를 DBCP에서 꺼내온다.
        //3.Connection 얻기
            con=getConn();
        //4.쿼리문 수행 객체 얻기
            String selectDept="select deptno,dname,loc from dept";
            pstmt=con.prepareStatement(selectDept);
        //5.쿼리문 수행 후 결과 얻기
            rs=pstmt.executeQuery();
            DeptVO dv=null;
            while(rs.next()) {
                dv=new DeptVO(rs.getInt("deptno"), rs.getString("dname"), rs.getString("loc"));
                list.add(dv);
            }//end while
            
        }finally {
            //6.연결 끊기
            if(rs !=null) {rs.close();}//end if
            if(pstmt !=null) {pstmt.close();}//end if
            if(con !=null) {con.close();}//end if
        }//end finally
        
        return list;
    }//selectEmpList
}//class

//server.xml
  <Context docBase="model2_emp" path="/model2_emp"  reloadable="true"  source="org.eclipse.jst.jee.server:model2_emp">
           <Resource auth="Container"  driverClassName="oracle.jdbc.OracleDriver" maxIdle="10"  maxTotal="20" maxWaitMillis="-1" name="jdbc/model2_dbcp"  password="tiger" type="javax.sql.DataSource"  url="jdbc:oracle:thin:@127.0.0.1:1521:orcl" username="scott"/>
      </Context></Host>
//DeptService.java
package kr.co.sist.service;

import java.sql.SQLException;
import java.util.List;

import kr.co.sist.dao.Model2DAO;
import kr.co.sist.vo.DeptVO;

/**
* Business Logic을 처리하는 클래스
* @author owner
*/
public class DeptService {
    public List<DeptVO> searchAllDept(){
        List<DeptVO> list=null;
        
        Model2DAO m_dao=Model2DAO.getInstance();
        try {
            list=m_dao.selectDeptList();
        } catch (SQLException e) {
            e.printStackTrace();
        }//end catch
        
        return list;
    }//searchAllDept
}//class

//EmpService.java
package kr.co.sist.service;

import java.sql.SQLException;
import java.util.List;

import kr.co.sist.dao.Model2DAO;
import kr.co.sist.vo.EmpVO;

/**
* 업무로직 처리, DAO단(끝?)의 클래스를 사용
* @author owner
*/
public class EmpService {
    public List<EmpVO> searchEmp(int deptno){
        List<EmpVO> list=null;
        
        Model2DAO m_dao=Model2DAO.getInstance();
        try {
            list=m_dao.selectEmpList(deptno);
            
            for(EmpVO ev:list) { //사원명에 "님"을 붙인다.
                ev.setEname(ev.getEname()+"님");
            }//end for
            
        } catch (SQLException e) {
            e.printStackTrace();
        }//end catch
        
        return list;
    }//searchAllDept
}//class

//EmpController.java
package kr.co.sist.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.co.sist.service.EmpService;
import kr.co.sist.vo.EmpVO;

/**
* 모든 부서정보를 조회하는 일(요청 하나를 클래스 하나가 처리한다.-일이 겹치지 않고 업무분담이 쉬움=>Spring MVC가 나와 편리해짐)
* @author owner
*/
public class EmpController implements Controller{
    private String url;
    private boolean forwardFlag;

    @Override
    public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String deptno=request.getParameter("deptno");
        int tempDeptno=Integer.parseInt(deptno);
        
        EmpService es=new EmpService();
        List<EmpVO> list=es.searchEmp(tempDeptno);
        //처리한 결과를 scope객체에 저장하여 view로 전달
        request.setAttribute("empList", list);
        url="emp/emp_list.jsp";
        forwardFlag=true;
    }//execute

    @Override
    public String moveURL() {
        return url;
    }//moveURL

    @Override
    public boolean isForward() {
        return forwardFlag;
    }//isForward

}//class

//dept.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>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import  url="../common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>
     <div id="container">
     <table>
     <tr>
           <th width="40">번호</th>
           <th width="80">부서번호</th>
           <th width="100">부서명</th>
           <th width="100">위치</th>
     </tr>
     <c:if test="${empty deptList}">
     <tr>
           <td colspan="4" align="center">부서정보가 존재하지  않습니다.</td>
     </tr>
     </c:if>
     <c:forEach var="dept" items="${deptList}">
     <c:set var="i" value="${i+1}"/>
     <tr>
           <td><c:out value="${i}"/></td>
           <!-- emp.do는 emp자리에 무엇이 오든 상관이 없이 가진다  main으로~ -->
           <td><a  href="emp.do?cmd=E001&deptno=${dept.deptno}"><c:out  value="${dept.deptno}"/></a></td>
           <td><c:out value="${dept.dname}"/></td>
           <td><c:out value="${dept.loc}"/></td>
     </tr>
     </c:forEach>
     </table>
     
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>
//emp_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>Insert title here</title>
<link rel="stylesheet" type="text/css"  href="http://localhost:8080/jsp_prj/common/main_v190130.css"/>
<style type="text/css">
#wrap{margin:0px auto;width:800px; height:860px;}
#header{width:800px; height:140px; background:#FFFFFF  url(http://localhost:8080/jsp_prj/common/images/header_bg.png)  repeat-x;
           position: relative; }
#headerTitle{font-family: HY견고딕,고딕; font-size:35px;  font-weight:bold; text-align:center;
                /* padding-top: 35px */ position:absolute;  top:40px; left:290px; }
#container{width:800px; min-height: 600px; }
#footer{width:800px; height:120px; }
#footerTitle{float: right; font-size:15px; padding-top:20px;  padding-right:20px; }
</style>
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
      
});//ready
</script>
</head>
<body>
<div id="wrap">
     <div id="header">
           <div id="headerTitle">SIST Class4</div>
           <div style="padding-top:100px; ">
           <c:import  url="../common/jsp/main_menu.jsp"></c:import>
           </div>
     </div>
     <div id="container">
     <strong>${param.deptno}</strong> 번 부서조회<br/>
     <a href="dept.do?cmd=D001">뒤로</a><br/>
     <table border="1">
     <tr>
           <th width="40">번호</th>
           <th width="80">사원번호</th>
           <th width="100">사원명</th>
           <th width="80">연봉</th>
           <th width="150">입사일</th>
           <th width="80">직무</th>
     </tr>
     <c:if test="${empty empList}">
     <!-- 비어있을때를 위한 코드를 짜두어야 한다. -->
     <tr>
           <td colspan="6" align="center">해당 부서는 사원이  존재하지 않거나, 부서가 존재하지 않을 수 있습니다.</td>
     </tr>
     </c:if>
     <c:forEach var="emp" items="${empList}">
           <c:set var="i" value="${i+1}"/>
           <tr>
                <td><c:out value="${i}"/></td>
                <td><c:out value="${emp.empno}"/></td>
                <td><c:out value="${emp.ename}"/></td>
                <td><c:out value="${emp.sal}"/></td>
                <td><c:out value="${emp.hiredate}"  escapeXml="false"/></td><!-- 태그가 렌더링이 되어 보여진다. -->
                <td><c:out value="${emp.job}"/></td>
           </tr>
     </c:forEach>
     </table>
     
     
     </div>
     <div id="footer">
           <div id="footerTitle">copyright&copy; all right  reserved. class 4.</div>
     </div>
</div>
</body>
</html>

//이클립스의 Search 기능으로 그단어가 들은 파일들을 찾을 수 있다. 쉽게 어디서 왔는지 확인

 


*Model2 흐름
web browser--->MainController(진입점/Controller찾아 선택(cmd)/commend pattern이라고도 함/view로 이동)--->Controller(web parameter처리,관계유지(session,cookie),View페이지명,이동방식의 설정-forward|redirect)--->Service(업무로직(BusinessObject)처리,DAO사용)--->Model(DAO)(DB관련 처리)

 


반응형

'국비지원학원 > XML,JSON,AJAX' 카테고리의 다른 글

108일차-JSONArray+Model2  (0) 2019.04.11
107일차-AJAX  (0) 2019.04.11
106일차-JSON/AJAX  (0) 2019.04.10
105일차-XML+Parsing  (0) 2019.04.08
104일차-XML+Parser  (0) 2019.04.08