728x90
수업내용
1교시 (09:30-10:20)
- 앞으로의 일정
남은 3개월 강의 순서
1. Servlet
2. Ajax, JSON
3. Spring, Mybatis
jstl, el
Spring WEB MVC + Mybatis Framework
----------------------------
4. react (바벨, 컴포넌트), vue
===============================
5. python
6. Android
7. BigData
1/24 --> 4/25
취업 관련 : 4번까지
5번 어드밴티지 - 회사에서는 안드로이드, iOS 개발자 1~2명 - popup_2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!--
var win = window.open(url, name, specs, replace);
win.close();
1. win : 새로 만들어진 객체가 반환, 창 생성 실패하면 null 반환
2. url : 새창에 보여질 주소, 비워두면 빈창(about:blank)이 보임
3. name : 새로 열릴 창의 속성 또는 창의 이름 지정, 기본값은 _blank
_blank : 새창이 열림, 기본값
_parent : 부모 프레임이 열림
_self : 현재 페이지를 대체
_top : 로드된 프레임셋을 대체
name(임의의 이름) : 새창이 열리고 창의 이름을 지정
4. specs : 창의 위치, 창의 크기, 스크롤 여부, 리사이즈 가능 등 속성 지정
5. replace : true 현재 히스토리를 대체, false 히스토리에 새항목을 만듬
-->
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var win = window.open( "/KosMember/kos_script/popup_notice.jsp",
"_blank",
"left=100,top100,width=300,height=300",
false);
function popup_close(){
alert("3초 후 팝업을 자동으로 닫기");
alert("win >>> : " + win);
if (win) {
win.close();
}
}
setTimeout(popup_close, 3000);
});
</script>
</head>
<body>
<h3>공지사항 팝업 부모창(윈도우)</h3>
<hr>
</body>
</html>
- popup_notice.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>공지사항</title>
</head>
<body>
<h3>공지사항 팝업 자식창(윈도우)</h3>
<hr>
</body>
</html>
2교시 (10:30-11:20)
- Servlet
=========================================================
서블릿 Servlet : Server + Applet
=========================================================
1. servlet-api.jar 라이브러리 jdk에 포팅하기
----------------------------------------------
C:\Program Files\Apache Software Foundation\Tomcat 8.5\lib\servlet-api.jar
C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\servlet-api.jar <-- 카피
2. 서블릿 코드 서블릿 마법사로 생성하기
----------------------------------------------
Java Resources - src - 우클릭 - New - 패키지 생성
- 패키지 우클릭 - Servlet : Servlet 마법사 실행 -
Class name: HelloServlet - Next
URL mappings - Edit.. 버튼 클릭 -
Pattern: /abc - OK 클릭 - Next -
Domain은 대소문자를 구분하지 않지만 URL은 대소문자를 구분한다.
Which method stubs would you like to create?
불필요한 코드 삭제하고 - Finish
Context - Deployment Descripter:KosMember -
Servlet Mappings
/abc -> HelloServlet
Servlets
HelloServlet
3. 서블릿 실행
----------------------------------------------
서블릿은 WAS Server 영역에 있는 자바 클래스로 클라이언트에서
직접 URL으로 요청할 수 없다.
서블릿 파일이 있는 위치를 가상경로(URL) 매핑하여 요청해야 한다.
WEB-INF 경로 하위는
서버 영역으로 클라이언트에서 직접 요청할 수 없다.
3.1 웹 서블릿 어노테이션 매핑 WebServlet Anotation Mapping
javax.servlet.annotation.WebServlet
helloServlet.html
<form action="/Context/abc" method="GET"
@WebServlet("/abc")
public class HelloServlet extends HttpServlet {
HelloServlet.java - HelloServlet.class
서블릿 라이프 사이클
=============================================
init() - service - doGet() || doPOST() - destroy()
servlet() 함수에서
요청한 form tag의 메소드 속성의 값을 보고 매칭되는 함수를 호출한다.
<form
action=""
method="GET"
method="GET" -> doGet()
method="POST" -> doPost()
를 호출한다.
jsp 페이지는 디폴트가 GET 방식이다.
=============================================
3.2 서블릿 url 매칭 Servlet URL Mapping
web.xml 서블릿 매핑 Servlet Mapping 수동 설정
----------------------------------------------
WebContent - WEB-INF - web.xml
<!-- Servlet Class 정의 -->
<servlet>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<!-- Servlet Mapping 설정 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/abc.do</url-pattern>
</servlet-mapping>
helloServlet.html
<form action="/Context/abc" method="GET"
WEB-INF/web.xml
<url-pattern>/abc.do</url-pattern>
4. 서블릿 포워드 forward
---------------------------------------
포워드 기능
하나의 서블릿에서 다른 서블릿 또는 JSP와 연동하는 방법
포워드 용도
요청 request에 대한 추가 작업을 다른 서블릿, JSP에게 수행하게 하는 것
포워드 방법
dispatch 방법
javax.Servlet.RequestDispatcher.forward()
요청 request에 포함된 정보를 forward하는 서블릿, JSP와 같이 공유 함
redirect 방법
javax.servlet.Http.HttpServletRequest.sendRedirect()
웹 브라우저에 재요청하는 방식
3교시 (11:30-12:20)
- HelloKSY.java
package a.b.c.test.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloKSY
*/
@WebServlet("/ksy")
public class HelloKSY extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
- HelloKSY.java (수정)
package a.b.c.test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloKSY
*/
@WebServlet("/ksy")
public class HelloKSY extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
res.setCharacterEncoding("UTF-8");
res.setContentType("text/html; charset=UTF-8");
String name = "KSY";
String mid = request.getParameter("mid");
String mpw = request.getParameter("mpw");
System.out.println("mid >>> : " + mid);
System.out.println("mpw >>> : " + mpw);
// 화면에 출력하시오
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Class</title>");
out.println("</head>");
out.println("<body>");
out.println("Hello Servlet >>> : " + name + ": " + mid + " : " + mpw);
out.println("</body>");
out.println("</html>");
}
}
- formservlet.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- jQuery CDN -->
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#servletBtn").on("click", function(){
alert("servletBtn >>> : ");
// htttp://localhost:8088/KosMember/ksy
$("#formServlet").attr({
"action":"/KosMember/ksy",
"method":"GET"
}).submit();
});
// jsp_보내기 이벤트 처리 : /kos_jsp/helloServlet_jsp.jsp
$("#jspBtn").on("click", function() {
alert("jspBtn >>> : ");
// http://localhost:8088/KosMember/kos_jsp/helloServlet_jsp.jsp
$("$formServlet").attr({
"action":"/KosMember/kos_jsp/helloServlet_jsp.jsp",
"method":"GET"
}).submit();
});
// locationServletBtn 이벤트 시 LocationServlet으로 보내기
$("#locationServletBtn").on("click", function(){
// httpL//localhost:8088/KosMember/location
$("#formServlet").attr({
"action":"/KosMember/location",
"method":"GET"
}).submit();
});
});
</script>
</head>
<body>
<form name="formServlet" id="formServlet">
아이디 : <input type="text" class="mid" name="mid" id="mid" /> <br>
패스워드 : <input type="text" class="mpw" name="mpw" id="mpw" /> <br>
<input type="button" id="servletBtn" value="servlet_보내기" />
<input type="button" id="jspBtn" value="jsp_보내기"/>
<input type="button" id="locationServletBtn" value="location_보내기"/>
</form>
</body>
</html>
4교시 (12:30-13:20)
- LocationServlet.java
package a.b.c.test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LocationServlet
*/
@WebServlet("/location")
public class LocationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
String mid = request.getParameter("mid");
String mpw = request.getParameter("mpw");
System.out.println("mid >>> : " + mid);
System.out.println("mpw >>> : " + mpw);
ArrayList<String> aList = new ArrayList<String>();
aList.add(mid);
aList.add(mpw);
// 1. /kos_jsp/formServlet.html
// 2. a.b.c.test.servlet.LocationServlet.java
// 3. /kos_jsp/location_jsp.jsp
request.setAttribute("aList", aList);
// http://localhost:8088/KosMember/kos_servlet/location_jsp.jsp
RequestDispatcher rd = request.getRequestDispatcher("/kos_servlet/location_jsp.jsp");
rd.forward(request, response);
}
}
- location_jsp.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr>location_jsp.jsp
<hr>
<%
Object obj = request.getAttribute("aList");
if (obj == null) return;
ArrayList<String> aList = (ArrayList<String>)obj;
System.out.println(aList);
String mid = aList.get(0);
String mpw = aList.get(1);
String s = "";
for (int i=0; i < aList.size(); i++) {
System.out.println("aList.get(" + i + ") >>> : " + aList.get(i));
s += aList.get(i) + ",";
}
pageContext.setAttribute("mid", mid);
pageContext.setAttribute("mpw", mpw);
pageContext.setAttribute("s", s);
%>
<%= mid %> --> <%= mid %><br>
<%= mpw &> --> <%= mpw %><br>
<%= s &> --> <%= s %><br>
\${mid } --> ${mid }<br>
\${mpw } --> ${mpw }<br>
\${s } --> ${s }<br>
\${aList.get(0) } --> ${aList.get(0) }<br>
\${aList.get(1) } --> ${aList.get(1) }<br>
</body>
</html>
5교시 (14:30-15:20)
- web.xml ← 예전에서는 서블릿을 웹 서블릿 어노테이션을 사용할 때 xml 파일에서 읽어왔음
- C:\00.KOSMO108\30.Web\eclipse_web_1_work\KosMember\WebContent\WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>KosMember</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Web_xmlServlet</servlet-name>
<servlet-class>a.b.c.test.servlet.Web_xmlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Web_xmlServlet</servlet-name>
<url-pattern>*.ksy</url-pattern>
</servlet-mapping>
<!-- log4j setting -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.xml</param-value>
</context-param>
</web-app>
6교시 (15:30-16:20)
- @WebServlet 어노테이션(annotation)
- JDK 1.5(5.0)부터 시작한 자바로 만든 기술이다.
- 콘트롤러로 사용
- 어노테이션이 없어도 web.xml에서 지정할 수 있음
7교시 (16:30-17:20)
- Web_xmlServlet.java
package a.b.c.test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Web_xmlServlet
*/
// @WebServlet("/aa")
public class Web_xmlServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// forward : webxmlJsp.jsp : mid, mpw 화면에 출력하기
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
String mid = request.getParameter("mid");
String mpw = request.getParameter("mpw");
System.out.println("mid >>> : " + mid);
System.out.println("mpw >>> : " + mpw);
ArrayList<String> aList = new ArrayList<String>();
aList.add(mid);
aList.add(mpw);
// 1. /kos_jsp/webxmlServlet.html
// 2. a.b.c.test.servlet.Web_xmlServlet.java
// 3. /kos_hsp/webxmlJsp.jsp
request.setAttribute("aList", aList);
// http://localhost:8088/KosMember/kost_servlet/webxmlJsp.jsp
RequestDispatcher rd = request.getRequestDispatcher("/kos_servlet/webxmlJsp.jsp");
rd.forward(request, response);
}
}
- webxmlJsp.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>webxmlJsp.jsp</h3>
<hr>
<%
Object obj = request.getAttribute("aList");
if (obj == null) return;
ArrayList<String> aList = (ArrayList<String>)obj;
System.out.println(aList);
String mid = aList.get(0);
String mpw = aList.get(1);
String s = "";
for (int i=0; i < aList.size(); i++) {
System.out.println("aList.get(" + i + ") >>> : " + aList.get(i));
s += aList.get(i) + ",";
}
pageContext.setAttribute("mid", mid);
pageContext.setAttribute("mpw", mpw);
pageContext.setAttribute("s", s);
%>
<%= mid %> --> <%= mid %><br>
<%= mpw %> --> <%= mpw %><br>
<%= s %> --> <%= s %><br>
\${ mid } --> ${ mid }<br>
\${ mpw } --> ${ mpw }<br>
\${ s } --> ${ s }<br>
\${ aList.get(0) } --> ${ aList.get(0) }<br>
\${ aList.get(1) } --> ${ aList.get(1) }<br>
</body>
</html>
- webxmlServlet.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- jQuery CDN -->
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#webxmlBtn").on("click", function(){
alert("webxmlBtn >>> : ");
// http://localhost:8088/KosMember/ksy
$("#formServlet").attr({
"action":"/KosMember/aaa.ksy",
"method":"GET"
}).submit();
});
});
</script>
</head>
<body>
<form name="formServlet" id="formServlet">
아이디 : <input type="text" class="mid" name="mid" id="mid"/><br>
비밀번호 : <input type="text" class="mpw" name="mpw" id="mpw"/><br>
<input type="button" id="webxmlBtn" value="webxml_보내기"/>
</form>
</body>
</html>
- 게시판 만들기 : Model 2 + Web MVC 패턴
모델 2 : jsp + Servlet
Model : java
View : jsp
Controller : Servlet
요구사항 : 일반 게시판 만들어 주세요
회원제 게시판 : 회원 아이디 O
일반 게시판 : 회원 아이디 X
글번호 B0000 : B 접두어 + XXXX 숫자 4개
글제목 길이 100
글 쓴 사람 길이 50
글 쓸 때 사용한 패스워드 길이 300 8자리 이상 : 단방향 암호화
글 내용 길이 2000자
삭제여부 삭제여부 : Y : N
등록일 YYYY-MM-DD
수정일 YYYY-MM-DD
1. 데이터베이스 설계
데이터베이스, JDBC 드라이버
Oracle 11g 2 Release
jdbc 드라이버 : ojdbc6.jar
데이터 소스
// DataSource 정보 : 데이터베이스 연결 정보
드라이버 : oracle.jdbc:thin:@localhost:1521:orclKSY00
사용자 계정 : scott
사용자 계정 패스워드 : tiget
오라클 SID : Service name 확인하기
-----------------------------------
DB_UNIQUE_NAME 이름 사용하기
콘솔에서
sqlplus / as sysdba 또는 sqlplus "/as sysdba"
SQL > SELECT NAME, DB_UNIQUE_NAME FROM V$DATABASE;
NAME DB_UNIQUE_NAME
------------------ ------------------------------------------------------------
ORCLKSY0 orclKSY00
SQL > SELECT INSTANCE FROM V$THREAD;
INSTANCE
--------------------------------------------------------------------------------
orclksy00
테이블 이름 : MVVC_BOARD
컬럼
BNUM VARCHAR2(20)
BSUBJECT VARCHAR2(100)
BWRITER VARCHAR2(30)
BPW VARCHAR2(300)
BMEMO VARCHAR2(2000)
DELETEYN VARCHAR2(1)
INSERTDATE DATE
UPDATEDATE DATE
CREATE TABLE MVC_BOARD(
BNUM VARCHAR2(20) PRIMARY KEY
,BSUBJECT VARCHAR2(100) NOT NULL
,BWRITER VARCHAR2(30)
,BPW VARCHAR2(300)
,BMEMO VARCHAR2(2000)
,DELETEYN VARCHAR2(1) NOT NULL
,INSERTDATE DATE
,UPDATEDATE DATE
);
인덱스 확인
채번 확인
2. 클래스 설계
Context : kosServlet
package : a.b.c.com.kosmo.board
사용할 라이브러리 포팅하기
-----------------------------------
Context/WebContent/WEB-INF/lib/
디비 연결하는 jdbc 드라이버
로그 찍기
....
8교시 (17:30-18:30)
- 게시판 만들기 : Model 2 + Web MVC 패턴 (계속)
공통 클래스
----------------------------
a.b.c.com.common
Controller
----------------------------
a.b.c.com.kosmo.board.controller
BoardController
Service
----------------------------
a.b.c.com.kosmo.board.service
BoardService
public ArrayList<BoardVO> boardSelectAll();
public ArrayList<BoardVO> boardSelect(BoardVO bvo);
public boolean boardInsert(BoardVO bvo);
public boolean boardUpdate(BoardVO bvo);
public boolean boardDelete(BoardVO bvo);
BoardServiceImpl
DAO
----------------------------
a.b.c.com.kosmo.board.dao
BoardDAO
public ArrayList<BoardVO> boardSelectAll();
public ArrayList<BoardVO> boardSelect(BoardVO bvo);
public boolean boardInsert(BoardVO bvo);
public boolean boardUpdate(BoardVO bvo);
public boolean boardDelete(BoardVO bvo);
BoardDAOImpl
SQL
----------------------------
a.b.c.com.kosmo.board.sql
BoardSqlMap
public static String getBoardSelectAll(){ return null;}
public static String getBoardSelect(){ return null;}
public static String getBoardInsert(){ return null;}
public static String getBoardUpdate(){ return null;}
public static String getBoardDelete(){ return null;}
VO
----------------------------
a.b.c.com.kosmo.board.vo
BoardVO
private String bnum;
private String bsubject;
private String bwriter;
private String bpw;
private String bmemo;
private String deleteyn;
private String insertdate;
private String updatedate;
view : jsp
----------------------------
/kosServlet/WebContent/kosmo/board
board.html
boardSelectAll.jsp
boardSelect.jsp
boardInsert.jsp
boardUpdate.jsp
boardDelete.jsp
Notes
728x90