JSP 프로그래밍 #02 서블릿과 JSP 시작하기
2.1 톰캣 애플리케이션 만들기 (온라인 강의: https://youtu.be/04LIGWKCFjY)
2.2 간단한 서블릿 만들기 (온라인 강의: https://youtu.be/4ajw5EsxYE8)
2.3 간단한 JSP 만들기 (온라인 강의: https://youtu.be/6h-qH8pGdT8)
2.4 간단한 자바빈즈 만들기 (온라인 강의: https://youtu.be/TlgXkAWi1sc)
In JavaScript, almost "everything" is an object.
-Booleans can be objects (if defined with the new keyword)
-Numbers can be objects (if defined with the new keyword)
-Strings can be objects (if defined with the new keyword)
-Dates are always objects
-Maths are always objects
-Regular expressions are always objects
-Arrays are always objects
-Functions are always objects
-Objects are always objects
Code Obfuscation, PHP shells & more
What hackers do once they get passed your code - and how you can detect & fix it.
Content:
- What happens when I get hacked?
- What's code obfuscation?
- What are PHP shells?
- Show me some clever hacks!
- Prevention
- Post-hack cleanup
What is this not about:
- How can I hack a website?
- How can I DoS a website?
- How can I find my insecure code?
In JavaScript, almost "everything" is an object.
-Booleans can be objects (if defined with the new keyword)
-Numbers can be objects (if defined with the new keyword)
-Strings can be objects (if defined with the new keyword)
-Dates are always objects
-Maths are always objects
-Regular expressions are always objects
-Arrays are always objects
-Functions are always objects
-Objects are always objects
Code Obfuscation, PHP shells & more
What hackers do once they get passed your code - and how you can detect & fix it.
Content:
- What happens when I get hacked?
- What's code obfuscation?
- What are PHP shells?
- Show me some clever hacks!
- Prevention
- Post-hack cleanup
What is this not about:
- How can I hack a website?
- How can I DoS a website?
- How can I find my insecure code?
JSP 프로그래밍 #01 웹 프로그래밍
1.1 웹 (온라인 강의: https://youtu.be/qDZXXHhMr4A)
1.2 서블릿 (온라인 강의: https://youtu.be/a8hHeUhbz2k)
1.3 JSP(Java Server Page) (온라인 강의: https://youtu.be/Q4ezLP6KLwM)
1.4 프로그래밍을 위한 환경 설정 (온라인 강의: https://youtu.be/k2eR6gLULA8)
“오라클자바몰”이라는 회사를 만들어서 내가 잘 아는 분야인 차를 팔기로 정했다. 차량의 구매는 현대자동차와하고, 현대자동차에 돈을 지불하고 차를 받기로 했다.
STS
New → Project → Spring Legacy Project
Project Name : carmaker
Simple Projects : Simple Spring Maven
프로젝트생성후
- 프로젝트 루트 아래의 pom.xml 파일을 오픈 후 스프링 버전을 4.2.0으로 변경
src/main/java 아래에서 edu.biz.ioc 패키지 생성
(추천자마린교육)Xamarin.android에서 안드로이드 자바 라이브러리 바인딩 하는 방법_EmbeddedJar, 자바 JAR 파일을 자...탑크리에듀(구로디지털단지역3번출구 2분거리)
안드로이드 앱에서 사용할 수있는 많은 자바 라이브러리가 있다. 바인딩 라이브러리를 만들어 Java 라이브러리를 Xamarin.Android 응용 프로그램에 통합하는 방법에 대해 알아보자
Android용 라이브러리는 방대하기 때문에 새로운 Android 라이브러리를 만드는 것보다 기존 Android 라이브러리를 사용하는 것이 좋다. Xamarin.Android는 이러한 라이브러리를 사용하는 두 가지 방법을 제공한다.
C#에서 Java 코드를 호출 할 수 있도록 C# 래퍼로 라이브러리를 자동으로 래핑하는 바인딩 라이브러리를 만드는 방법과 Java Native Interface (JNI)를 사용하여 Java 라이브러리 코드에서 직접 호출을 호출하는 방법이 있다. JNI는 Java 코드가 네이티브 응용 프로그램 또는 라이브러리에 의해 호출 될 수있게 해주는 프레임 워크이다.
아래는 첫 번째 방법인 하나 이상의 기존 Java 라이브러리를 응용 프로그램에 연결할 수있는 어셈블리로 래핑하는 Bindings 라이브러리를 만드는 방법에 대한 설명이다.
Xamarin.Android는 Managed Callable Wrappers (MCW)를 사용하여 바인딩을 구현하는데 MCW는 Java 코드를 호출해야 할 때 사용되는 JNI 브리지로 호출 가능 래퍼는 Java 유형의 서브 클래스 작성 및 Java 유형의 가상 메소드 대체를 지원한다.
마찬가지로 Android 런타임 (ART) 코드가 관리 코드(C#)를 호출하기를 원한다면 Android Callable Wrappers (ACW)라고하는 다른 JNI 브리지를 통해 코드를 호출한다.
2018년 7월 5일에 있었던 한국인터넷거버넌스포럼(KrIGF)에서 발표한 "오픈 데이터와 인공지능" 발표자료입니다.
다음과 같은 내용을 담고 있습니다.
* 오픈데이터의 정의
* 오픈데이터의 중요성
* 인공지능
* 인공지능에서 데이터의 중요성
* 제한된 데이터 환경에서의 문제점
* 인공지능을 위한 오픈데이터의 중요성
* 더 나은 인공지능 시대를 위한 제언
2017년 4월에 진행된 도서관최신동향 과정에 있었던 발표자료입니다.
서지 분야에서의 Linked Data의 개념과 활용에 대한 내용을 담고 있습니다.
구체적으로는 아래와 같은 내용을 포함합니다.
- Linked Data란 무엇인가?
- 왜 도서관에서 Linked Data를 이야기하는가?
- Linked Data를 누가 쓰고 있나?
This is a lecture note #10 for my class of Graduate School of Yonsei University, Korea.
It describes SPARQL to retrieve and manipulate data stored in Resource Description Framework format
4. 2.1.1 톰캣의 웹 애플리케이션
▣ 웹 애플리케이션이란?
◈ 웹 환경에서 디렉터리는 애플리케이션의 의미를 담고 있다.
◈ webapps 디렉터리 밑에 존재하는 디렉터리들
– webapps 디렉터리
• 톰캣의 웹 애플리케이션들이 존재하는 디렉터리
▣ 웹 애플리케이션의 구성
◈ 웹 애플리케이션 디렉터리
– JSP(.jsp), HTML(.html) 파일들이 위치하는 곳
– 웹을 통해 공개되므로, 파일들을 직접 실행 가능하다.
◈ WEB-INF 디렉터리
– 클래스(.class) 파일과 web.xml 파일이 위치하는 곳
– 서블릿 파일이 위치하는 곳
– 웹을 통해 공개되지 않으므로, 직접 접근이 불가능하다.
◈ web.xml
– 웹 애플리케이션의 환경설정 파일
웹 애플리케
이션들
웹 애플리케이션이
되려면 WEB-INF
디렉터리와
web.xml 파일이 있
어야 한다.
5. 2.1.2 웹 애플리케이션을 위한 파일들의 저장 위치
▣ HTML(.html, .htm)과 JSP(.jsp) 파일
◈ WEB-INF 상위에 작성해야 한다.
▣ web.xml 파일
◈ WEB-INF 디렉터리에 저장해야 한다.
▣ 클래스 파일
◈ WEB-INF/classes 디렉터리에 존재해야 한다.
◈ classes 폴더가 존재하지 않으면, 만들어서 사용하면 된다.
웹 애플리케이션을
위해 모든 파일들
은 특정 디렉터리
에 존재해야 한다.
6. 2.1.3 ROOT 애플리케이션과 디폴트 웹 페이지
▣ ROOT 애플리케이션
◈ 톰캣의 홈 디렉터리
◈ 위치
– %CATALINA_HOME%webappsROOT
▣ 디폴트 웹 페이지란?
◈ 웹 애플리케이션에 접근할 때 가장 먼저 실행되는 파일
◈ index.jsp, index.html, index.htm
▣ ROOT 애플리케이션의 접근
◈ http://localhost:8080
◈ 디폴트 웹 페이지인
index.jsp가 자동 실행된다.
http://localhost:8080
ROOT 애플리케이
션에서 index.jsp 파
일이 디폴트 웹 페
이지이다.
7. 2.1.4 ROOT 애플리케이션에 HTML 파일 만들기
▣ hello.html 소스코드
▣ hello.html 파일의 위치
◈ %CATALINA_HOME%webappsROOT
▣ hello.html 실행하기
◈ http://localhost:8080/hello.html
http://localhost:8080/hello.html
<html>
<body>
<h1>Hello! ROOT Application</h1>
</body>
</html>
8. 2.1.5 사용자 정의 웹 애플리케이션
▣ 사용자 정의 웹 애플리케이션이란?
◈ ROOT 디렉터리와 같은 웹 애플리케이션을 사용자가 직접 새롭게 만든 웹
애플리케이션
◈ %CATALINA_HOME%webapps에 디렉터리 형태로 관리된다.
▣ 사용자 정의 웹 애플리케이션 작성 절차
webapps 디렉터리 하위에
웹 애플리케이션으로 사용할
디렉터리를 만든다.
작성된 디렉터리의 하위에
WEB-INF 디렉터리를 만든다.
WEB-INF 디렉터리 밑에
web.xml 파일을 작성한다.
클래스 파일(.class) 파일이
있을 경우
WEB-INF 디렉터리 밑에
classes 디렉터리를 만들고,
그곳에 위치시킨다.
HTML과 JSP 파일을
작성한다.
웹 애플리케이션을
실행한다.
9. 2.1.6 새로운 웹 애플리케이션 만들기 (1)
1. %CATALINA_HOME%webapps 하위에 새로운 웹 애플리케이션을
위한 MySample 디렉터리를 만든다.
◈ 웹 애플리케이션은 하나의 디렉터리로 관리된다.
2. MySample 디렉터리 하위에 WEB-INF 디렉터리를 만든다.
▣ WEB-INF 디렉터리는 web.xml 파일과
클래스 파일들을 작성하기 위한
디렉터리이다.
새로운 웹 애플리케이션을
만들기 위해서는 webapps
디렉터리에 웹 애플리케이
션을 위한 디렉터리를 만
들고, 그 하위에 WEB-INF
디렉터리를 만든다.
10. 2.1.7 새로운 웹 애플리케이션 만들기 (2)
3. WEB-INF 디렉터리 밑에 web.xml 파일을 작성한다.
◈ web.xml : 웹 애플리케이션을 실행하기 위한 환경설정 파일
◈ ROOTWEB-INF 디렉터리에 있는 web.xml 파일을 복사해서
MySampleWEB-INF 디렉터리에 붙여 넣는다.
4. 클래스 파일들을 저장하기 위한 디렉터리인 classes 디렉터리를 WEB-
INF 디렉터리 밑에 만든다.
복사
web.xml 파일은 WEB-
INF 디렉터리 밑에 작성
하며, 서블릿 파일과 클
래스 파일들은 WEB-
INFclasses 디렉터리에
작성한다.
web.xml 파일이
반드시 있어야
만 하나의 웹 어
플리케이션으
로써 동작한다.
11. 2.1.8 새로운 웹 애플리케이션 만들기 (3)
5. MySample 디렉터리에 HTML 파일 작성
◈ myhello.html
◈ myhello.html 파일의 위치
– %CATALINA_HOME%webappsMySample
6. 웹 애플리케이션 실행
◈ http://localhost:8080/MySample/myhello.html
<html>
<body>
<h1>Hello! MySample Application</h1>
</body>
</html>
HTML과 JSP 파일
은 WEB-INF 디렉
터리 상위에 위치
해야 한다.
디렉터리 이름 HTML 파일 이름
사용자 정의 웹 애플리케이션은
[디렉터리 이름HTML 파일 이름]
형식으로 접근한다.
13. 2.2.1 톰캣의 환경 설정 (1)
▣ 톰캣의 환경 설정 파일 설정하기 (1)
◈ %CATALINA_HOME%conf 디렉터리의 web.xml 파일 수정
▣ web.xml 파일 변경 이유
◈ 톰캣에서 서블릿을 실행할 수 있도록 서블릿의 접근 방법을 지정해 주어야
만 서블릿을 실행할 수 있다.
톰캣에서 서블릿을
실행하기 위해서는
web.xml 파일을 수
정해야만 한다.
◈ 99번째 ~ 109번째 줄 주석 해제 ◈ 348번째 ~ 351번째 줄 주석 해제
두 군데 주석을
풀어주어야만 서
블릿을 실행할
수 있다.
14. 2.2.1 톰캣의 환경 설정 (2)
▣ 톰캣의 환경 설정 파일 설정하기 (2)
◈ %CATALINA_HOME%conf 디렉터리의 context.xml 파일 수정
▣ context.xml 파일 수정
톰캣 6.0에서는 서블
릿을 실행하기 위해
web.xml 파일을 수정
한 후 context.xml 파
일도 수정해 주어야
한다.
15. 2.2.2 간단한 서블릿 만들기
▣ 톰캣에서 서블릿을 만드는 절차
▣ 주의 사항
◈ 웹 애플리케이션의 WEB-INF 하위의 classes 디렉터리 내에서 작업
◈ classpath로 servlet-api.jar 파일이 잡혀 있어야 한다.
– 서블릿을 지원하는 클래스들을 프로그램적으로 이용하기 위해서 servlet-api.jar
파일을 클래스 패스에 추가해 주어야 한다.
– %CATALINA_HOME%commonlibservlet-api.jar
서블릿 코드(.java)를 작성한 후
classes 폴더 하위에 저장
서블릿 코드(.java) 컴파일
서블릿 실행
서블릿 또한 자바
코드(.java)이므로
컴파일 한 후 웹 브
라우저를 이용해서
실행할 수 있다.
16. 2.2.3 HelloServlet 코드 작성
▣ 서블릿 클래스 import
▣ HttpServlet 클래스
◈ 서블릿을 만들기 위해서는 HttpServlet을 반드시 상속받아야 한다.
▣ doGet() 메소드
◈ 클라이언트의 Get 방식 호출을 처리하기 위해서는 doGet() 메소드를 재정의
하고 그곳에 코드를 작성하면 된다.
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
...
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 서블릿 코드 작성
}
17. 2.2.4 HelloServlet 코드 저장, 컴파일 및 실행
▣ HelloServlet 코드 저장 위치
◈ 파일명 : HelloServlet.java
◈ 디렉터리 : %CATALINA_HOME%webappsMySampleWEB-INFclasses
▣ HelloServlet.java 컴파일
▣ 웹 브라우저에서 HelloServlet 실행
◈ http://localhost:8080/MySample/servlet/HelloServlet
C:...MySampleWEB-INFclasses> javac HelloServlet.java
서블릿의 클래스
파일은 WEB-INF
의 classes 디렉터리
밑에 존재해야 한
다.
디렉터리 이름 URL 패턴 서블릿 이름
18. 2.2.5 패키지 형태의 서블릿
▣ 패키지 형태의 서블릿
◈ 서블릿을 패키지(폴더)로 묶어서 관리하기 위해 사용
▣ 패키지로 묶는 이유
◈ 서블릿 페이지가 많아지면 한 곳에서 관리하기 어렵다.
◈ 프로젝트 관리가 가능하며 작업 분류가 쉽다.
▣ 패키지 형태의 HelloPackageServlet 만들기
1. 서블릿 코드 작성
2. 서블릿 코드 컴파일
3. 웹 브라우저를 이용해서 실행
19. 2.2.6 HelloPackageServlet 코드 작성 및 저장
▣ 패키지 형태의 서블릿을 만드는 방법
◈ 소스 코드 첫 줄에 package 명령어를 붙여주면 된다.
◈ package org.jabook.myhello;
▣ 서블릿 코드 저장
◈ 파일명 : HelloPackageServlet.java
◈ 디렉터리 : %CATALINA_HOME%webappsMySampleWEB-INFclasses
명령어 패키지 이름
패키지는 package 명
령어와 함께 패키지의
이름을 적어주면 된다.
이때 "."은 디렉터리
구분자인 ""와 동일한
의미이다.
20. 2.2.7 HelloPackageServlet 컴파일 및 실행
▣ HelloPackageServlet.java 컴파일
◈ -d 옵션
– -d 옵션을 이용해서 컴파일을 하면 패키지 디렉터리와 class 파일이 자동으로 생
성된다.
▣ 웹 브라우저에서 HelloPackageServlet 실행
◈ 패키지 형태의 서블릿 실행 시 서블릿 이름과 함께 패키지 명을 기술해 주
어야 한다.
C:...MySampleWEB-INFclasses> javac -d . HelloPackageServlet.java
-d 옵션 뒤의 "."은
현재 디렉터리를
기준으로 패키지
디렉터리를 생성하
겠다는 의미이다.
http://localhost:8080/MySample/servlet/org.jabook.myhello.HelloPackageServlet
디렉터리 이름 URL 패턴 패키지 이름 서블릿 이름
22. 2.3.1 HelloJSP 코드 작성
▣ JSP 페이지의 한글 설정
◈ 한글 설정을 해 주어야만 한글을 제대로 출력할 수 있다.
▣ JSP 코드
◈ JSP는 페이지코드 안에 자바 코드와 HTML 코드가 섞여있다.
<%@page contentType="text/html; charset=euc-kr"%>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<%
out.println("<h1> Hello World JSP Test!!</h1>");
%>
</body>
</html>
한글을 출력하기
위해서는 JSP 코드
의 맨 위에 한글 사
용을 위한 선언을
해주어야 한다.
23. 2.3.2 HelloJSP 저장 및 실행
▣ JSP 코드 저장
◈ 파일명 : hello.jsp
◈ 디렉터리 : %CATALINA_HOME%webappsMySample
▣ HelloJSP 실행
http://localhost:8080/MySample/hello.jsp
디렉터리 이름 JSP 이름
JSP 코드는 컴
파일을 할 필
요가 없다.
처음 JSP 파일을
접속할 때 내부에
서 자동으로 컴파
일이 이루어진다.
25. 2.4.1 자바빈즈(JavaBeans)
▣ 자바빈즈란?
◈ 비즈니스 로직을 담고 있으며 자바빈즈 규약을 따르는 클래스
– http://java.sun.com/products/javabeans/docs/spec.html
◈ 특정 데이터를 관리하고 표현하기 위해 JSP에서 사용하는 특수한
형태의 클래스
▣ 자바빈즈의 구성
◈ 생성자
◈ 멤버 필드
◈ 데이터 저장을 위한 set~ 형태의 멤버 메소드
◈ 데이터 추출을 위한 get~ 형태의 멤버 메소드
자바빈즈는 특정
데이터나 데이터
집합을 관리하기
위해 JSP에서 사용
하는 특수한 형태
의 클래스를 일컫
는다.
26. 2.4.2 HelloBean 코드 작성
▣ 패키지 선언
◈ 자바빈즈는 패키지 형태로 관리된다.
▣ 멤버 필드
▣ set~ 멤버 메소드
▣ get~ 멤버 메소드
package hello;
private String name;
public void setStatement(String name) {
this.name = name;
}
public String getStatement() {
return "Hello " + this.name;
}
용도에 따라 set~
메소드나 get~ 메소
드가 없는 형태의
자바빈즈도 있다.
27. 2.4.3 JSP에서 자바빈즈 사용하기
▣ 자바 코드를 이용하는 방법
◈ JSP 내에서 자바 코드를 이용하여 자바빈즈 객체를 생성하고 이용
하는 방법
▣ JSP의 액션 태그(Action Tag)를 이용하는 방법
◈ JSP의 액션 태그 중 <jsp:useBean> 액션 태그를 이용해서 자바빈즈
객체를 생성하고 이용하는 방법
◈ 액션 태그(Action Tag)란?
– JSP 페이지에서 특별한 기능을 위해 정의된 XML 형태의 태그
◈ <jsp:useBean> 액션 태그
– JSP 페이지에서 자바빈즈를 이용하기 위한 태그
자바빈즈를 이
용하는 방법에
는 두 가지가 있
다.
28. 2.4.4 자바 코드를 이용한 HelloBean 이용하기
▣ HelloBean을 사용하기 위한 클래스 임포트
◈ HelloBean 클래스를 임포트 해야지만 HelloBean 객체를 생성해서 사용할 수
있다.
▣ HelloBean 객체 생성
▣ HelloBean 객체 사용
<%@page import="hello.HelloBean"%>
HelloBean myHello = new HelloBean();
myHello.setStatement("Grace Byun!!");
str = myHello.getStatement();
자바 코드를 이용해서
자바빈즈를 사용하는
방법은 우리가 자바 프
로그래밍에서 일반적
으로 객체를 생성하는
것과 동일하다.
29. 2.4.5 helloBean.jsp 저장과 실행
▣ JSP 코드 저장
◈ 파일명 : helloBean.jsp
◈ 디렉터리 : %CATALINA_HOME%webappsMySample
▣ helloBean 실행
http://localhost:8080/MySample/helloBean.jsp
디렉터리 이름 JSP 이름
30. 2.4.6 액션 태그를 이용한 HelloBean 이용하기
▣ <jsp:useBean> 액션 태그
◈ 자바빈즈 클래스의 객체를 생성하기 위한 액션 태그
▣ <jsp:useBean> 액션 태그의 사용법
◈ id 어트리뷰트
– 객체의 이름
◈ class 어트리뷰트
– 사용하려는 자바빈즈 클래스 이름
– 패키지 명과 자바빈즈 클래스 이름을 함께 기술
◈ scope 어트리뷰트
– page 값을 가질 경우 자바빈즈의 유효범위를 현재 페이지로 제한
◈ 위 구문은 아래와 동일한 구문이다.
<jsp:useBean id="hello" class="HelloWorld" scope="page" />
객체의 이름 자바빈즈 클래스 이름 자바빈즈의 유효범위 지정
HelloWorld hello = new HelloWorld();
31. 2.4.7 helloBeanTag.jsp 코드 작성
▣ <jsp:useBean> 액션 태그를 사용해서 객체 생성
▣ HelloBean 객체 사용
<jsp:useBean id="myHello" class="hello.HelloBean" scope="page" />
myHello.setStatement("MyungJin Lee!!");
str = myHello.getStatement();
<%@page import="hello.HelloBean"%>
<%
HelloBean myHello = new HelloBean();
%>
두 개는 동
일한 구문
이다.
32. 2.4.8 helloBeanTag.jsp 저장과 실행
▣ JSP 코드 저장
◈ 파일명 : helloBeanTag.jsp
◈ 디렉터리 : %CATALINA_HOME%webappsMySample
▣ helloBeanTag 실행
http://localhost:8080/MySample/helloBeanTag.jsp
디렉터리 이름 JSP 이름
액션 태그를 이
용하면 코드를
간결화 시킬 수
있다.