금요일, 1월 10
Shadow

#003 Java programming basics

미분류
Lab Exercises Exercise 1: Declare, Initialize, Print variables (30 minutes) Exercise 2: Conditional operator (30 minutes) Exercise 3: Averaging numbers (20 minutes) Exercise 4: Find greatest number (20 minutes) Homework Exercise (for people who are taking Sang Shin's "Java Programming online course")   Exercise 1: Declare, Initialize, Print variables   In this exercise, you are going to learn how to declare, initialize a variable.  You also learn how to modify and display a value of a variable. Build and run OutputVariable Java program using NetBeans IDE Build and run OutputVariable Java program using "javac" and "java" command (1.1) Build and run OutputVariable Java program using NetBeans IDE 0. Start the NetBeans IDE if you have not done so. 1...

#002 Introduction to Java technology

미분류
   javaintro.pdf Java"Java" generally refers to a combination of three things: the Java programming language (a high-level, object-oriented programming language); the Java Virtual Machine (a high-performance virtual machine that executes bytecodes on a specific computing platform, typically abbreviated JVM); and the Java platform, a JVM running compiled Java bytecodes, usually calling on a set of standard libraries such as those provided by Java Standard Edition (SE) or Enterprise Edition (EE). Though coupled by design, the language does not imply the JVM, and vice versa. In this Article The Java Programming Language The Java Platforms The Java Virtual Machine The JVM Without Java The Java Community Process Conclusions We recently received an email asking for a "...

#001 Java 첫번째 이야기 – javapassion.com

미분류
워낙 유명한 신상철 박사님의 사이트 javapassion에서 공부한지 벌써 1년이 다되어 가지만 항상 하다가 끊기고 하다가 끊기고 해서 이번주 ~ 마음을 잡고 처음부터 한번 다시 도전을 해보기로 했다. 새해가 된 만큼 열심히 노력해서 꼭 가고 싶은 회사에 들어가고야 말곘다라고~~ 사이트는 이렇게 생겼다.  이번주내로 javase는 끝낼수 있도록 해보자~~ 파이팅~

#044 패턴과 스트럿츠

미분류
엔트프아이즈 디자인 패턴 성능과 다수의 "~성" 가장 중요한 3가지 비기능적인 요구사항 입니다. 1. 성능 2. 모듈화 3. 유연성, 유지보수성, 확장성 우선 용어부터 정의하죠 ㅇ 인터페이스를 사용하라 인터페이스란 두 객체간의 일종의 계약이라고 말할수 있습니다. 하나의 ㅋ르래스가 어떤 인터페이스를 구현했다면 다음과 같은 의미가 있죠 내가 만든 객체는 당신이 하는 얘기를 이해할수 있어요. 인터페이스가 가지는 또 하나 장점으로 다형성을 들수 있습니다. 다수의 클래스가 한개의 인터페이스를 동시에 구현한 경우 동일 인터페이스라면 어떤 클래스도 호출할수 있지요 예를들어 웹 컨테이너는 Servlet 인터페이스를 구현한 어떤 컴포넌트도 사용할수 있는 것처럼요 ㅇ관심영역의 분리 및 응집성 소프트웨어의 특정 기능만 특화시켜 컴포넌트화 하면 개발하기도 쉽고 유지보수 하기 편하며, 재사용성도 높일수 있지요 고나심 영역을 분리하게 되면 자연스럽게 응집도는 높아지기 마련이죠 응집도란 하나의 클래스가 하나의 단위 작업 목적에 얼마나 충실한가 하는정도를 나타냅니다. ㅇ복잡성을 숨겨라 복잡성을 숨긴다는것 관심 영역의 분리는 사실 같은 문제기도 합니다. 예를 들어 시스템이 검색 서비스를 사용해야 하는 경우, 실제 구현 부분을 하나의 컴포넌트로 구현하여 다른 모든 컴포넌트들이 이를 사용하게 하는 방식이 최선일겁니다. 디자인 원식, 이어서 느슨한 결합도 객체지향 시스템은 그 본성상 객체 간 대화로 이루어져 있습니다. 이 대화에 인터페이스를 이요하면 두개의 클래스가 서로 대화하기 위하여 서로간의 알아...

#043 필터와 랩퍼

미분류
막강 필터 전체 웹 애플리케이션 기능을 확장해보자 다양한 유스케이스가 산재한 시스템에서 그 기능을 확장해야 하는 경우가 더러있죠 필터를 한번 써보는 건 어떨까? 필터는 그냥 자바 컴포넌트 입니다. 서블릿과 비슷하죠 필터로 처리하면 좋은것들 Request 필터 : ㅇ 보안 관련 내용을 체크합니다. ㅇ 요청헤더와 바디 포맷팅을 수정합니다. ㅇ 요청을 감시하건 기록으로 남깁니다. Response 필터 : ㅇ 응답 스트림을 압축합니다. ㅇ 응답 스트림에 내용을 추가하거나 수정합니다. ㅇ 완전히 다른 새로운 응답을 만듭니다. 필터는 모듈식으로 DD에 설정합니다. 필터는 체인속으로 이것 다음에 저것을 실행하세요 같이 연결해서 사용할수 있습니다. 필터는 그 자체로 하나의 오나전한 컴포넌트 입니다. DD 설정 1 DD를 사용해서 다음과 같이 컨테이너한테 지시 할수 있죠. 이 URL에 대한 요청이 들어오면 필터1, 필터7, 필터3을 차례대로 실해아고 마지막으로 요청한 서블릿을 실행하세요 DD 설정 2 DD 서정을 조금만 바꾸면, 순서를 바꾼다든지, 필요없는 필터를 제거한다든지 하는 적업을 쉽게 할수 있죠. 이 URL에 대한 요청이 들어오면 필터3, 필터 7을 실행하고 곧바로 요청한 서블릿을 실행하도록 필터가 서블릿하고 비슷한 3가지 이유 1. 컨테이너가 이들의 API를 알고 있습니다. 2. 컨테이너가 생명주기를 관리합니다. 3. DD에 설정합니다. 누가 요청을 날렸는지 기록하는 필터를 만들어 봅시다. package com.example.web; ...

#042 웹 애플리케이션 보안

미분류
비밀스럽게, 안전하게 콜치아픈 녀석들은 어디에도 있는법... 웹 애플리케이션 개발자라면 웹 사이트를 보호할 의무가 있습니다. 다음 세가지 유형의 해커들을 경계해야 합니다. 임퍼스네이터 : 마치 자신을 다른사람인양 속이는 녀석 업그레이더 : 자신의 등급을 속이는 녀석 이즈드롭퍼 : 중요한 정보를 몰래 훔쳐보는 녀석 서블릿 보안의 4요소 임퍼스네이터, 업그레이더, 이즈드롭퍼 녀석들 때문에 곤경에 처한 웹 사이트를 구할 방법은 서블릿 보안 밖엔 없습니다. 서블릿 스펙에서는 서블릿 보안을 다음의 4가지 개념으로 압축하여 다릅니다. : 인증, 인가, 비밃보장, 데이터 무결성 1. 인증 : 임퍼스네이터 계획을 차단하기 위하여 2. 인가 : 업그렝더 계획을 차단하기 위하여 3.비밀보장, 데이터 무결성 : 이즈드롭퍼 계획을 차단하기 위하여 HTTP환경에서 어떻게 인증하는가: 드랜잭션 보안 기초과정 HTTP관점에서 보면.. 1. 브라우저가 제일 먼저 update.jsp를 요청합니다. 2. update.jsp는 제약조건이 걸린 자원임을 알아차린 컨테이너는 3. HTTP 401(Unauthorized)응답을 보냅니다. 여기에는 www-인증헤더와 보안영역 정보가 들어있습니다. 4. 401 코드를 받아본 브라우저, 보안영역 정보에 기초하여 사용자 이름과 패스워드가 들어있지요. 5. 다시한번 update.jsp를 요청합니다. 하지만 이번 요청엔 보안 관련 HTTP 헤더에 사용자 이름과 패스워드가 들어있지요 6. 사용자 이름과 패스워드가 일치하는지 체크한다음, 맞다면 사용할수 있는 권한을 인가...

#041 웹 애플리케이션 배포

미분류
웹 애플리케이션을 배포해보자 배포는 즐거워라 1. 웹애플리케이션은 어디에 개발한 것을 저장하나요? 2. 컨테이너는 웹 애플리케이션 어디에서 어떤 자원을 찾을까요? 3. 웹 애플리케이션 컨텐츠를 어떻게 요청하면 되나요? 어떤 녀석이 어디에 있어야 하나요? 태그 파일은 /WEB-INF/tags 또는 그 하위 디렉토리에 JAR로 배포한 경우 /META-INF/tags 또는 그 하위 디렉토리에 배포 해야 한다등 여기 아닌 다른곳에 태그 파일을 배포하면, 컨테이너는 그냥 무시해버리거나, 정적인 컨텐츠로 서비스 해버리니 조심해야 합니다. WAR 파일 WAR 파일은 우베 애플리케이션 구조에 대한 이식성이 좋으며, 압축된 스냅샷이라고 보면 됩니다. 젠체 웹 애플리케이션 디렉토리를 jar로 압축하여 확장자를 .war로 바꾼 것입니다. 이렇게 했을 경우 한 가지 문제가 있는데, 컨테이너가 어떻게 웹 애플리케이션의 컨텍스트 즉 이름을 아냐는 거죠 이름을 추출하는 방법은 컨테이너에 따라 다릅니다.톰켓의 경우, WAR파일 이름이 웹 애플리케이션 이름이 됩니다. WAR파일의 경우 /META-INF?MANIFEST.MF 파일에 라이브러리 의존성을 작성두면, 배포시 컨테이너가 애플리케이션을 실행하기 위해 필요한 라이브러리가 있는지 사전 체크할수 있습니다. 따라서 웹 애플리케이션을 배포하고  난 다음 실행해보니 무슨 무슨 라이브러리가 없어 실행이 안되더라와 같이 늦게 후회하는 경우는 없죠 서블릿 매핑은 실제로는 존재하지 않는 지어낸 것입니다. 1. 정확히 읆까지 일치하는것 <url-pa...

#040 사용자 정의 태그 개발

미분류
JSTL 만으로 만족스럽지 않을때 <jsp:include>와 <c:import>로 코드가 엉망일수 있습니다. 태그파일:include 철머 행동하지만, 좀더 개선된 방식 1. 포함할 파일(Header.jsp)을 복사해서 확장자를 .tag로 바꿉니다. <img src="images/web-services.jpg"><br> 2. "WEB-INF" 밑에 tags 디렉토리를 새로 만들고 여기에 태그파일 (Header.tag)을 옮깁니다. 3. 태그 파일을 호출할 JSP를 만들고 taglib 지시자를 아래와 같이 작성합니다. <%@ taglib prefix="myTags" tagdi"/WEB-INF/tags" %> <html><body> <myTags:Header/> </body></html> 파라미터를 보낼 방법은 있습니까? <jsp:include>를 사용해서 파일을 포함할때 포함할 파일에 정보를 제공하기 위하여 <jsp:param 태그를 사용했었죠 복습삼아<jsp:incldue>가 어떻게작동하는지 다시 한번 짚어보도록 하죠 <strong>${param.subTitle}</strong> 이전방식 : <jsp:include>, <jsp:param>코드 <jsp:include apge="header.jsp"> <jsp:param name="subTitle" value=yes we can...

#029 JSTL 사용하기

미분류
막강 커스텀 태그 <c:forEach> JSTL의 <c:forEach> 태그를 사용하면 배열과 컬렉션 데이터를 루프로 돌리는 작업을 간단히 처리할수 있다. JSP 코드 <% taglib prefix="c" urihttp://java.sun.com/jsp/jstl/core %> <html> <body> <strong> movie list : </strong> <br> <table> <c:forEach var ="movie" items ="${movieList}"> <tr> <td> ${movie}</td> </tr> </c:forEach> </table> </body> </html> <c:forEach>태그 <c:forEach var ="movie" items="${movieList}"> ${movie} </c:forEach> //같은 의미 String[] items = (String[]) request.getAttribute("movieList"); for(int i = 0; i< items.length; i++){ String movie = items[i]; out.println(movie); } varStatus 속성으로 루핑횟수 알기 <table> <c:forEach var="movie"...

#028 스크립트가 없는 JSP

미분류
스크립트가 없는 페이지 속성이 string이 아니라 person 객체가 인스턴스라면? 서블릿 코드 foo.Person p = new foo.person(); p.setName("evam"); request.setAttribute("person", "p); JSP코드 : <html> <body> Person is : <%= request.getAttribute("person:) %> </body> </html> 표준 액션을 사용하려면 <html> <body> <jsp:useBean id ="person" scope ="request" /> Person created by servlet : <jsp:getProperty name ="person" property ="name" /> </body> </html> <jsp:useBean>은 객체를 생성하기까지 합니다. <jsp:useBean id ="person" scope="request" /> _jspService() 메소드 내에 다음과 같은 코드로 바뀝니다. foo.Person person = null; synchronied(request){ person=(foo.Person)_jspx_page_context.getAttribute("person", pageContext.REQUEST_SCOPE); if(person ==null){ person = n...