반응형
*객체다형성의 특징(장점)
-
중복코드를 줄임으로 편리함을 보쟈
-
추상메소드를 만들어(구현의 강제성)
-
=>추상클래스,인터페이스
-
쓸데없이 클래스의 크기가 커질 수 있다는 단점을 가진다.
-
인터페이스는 안에 추상메소드와 상수를 가지는데 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© 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© 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© 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 |