HTTP
에러코드 |
에러 메시지 |
100 | Continue |
101 | Switching Protocols |
200 | OK, 에러 없이 전송 성공 |
202 | Accepted, 서버가 클라이언트의 명령을 받음 |
203 | Non-authoritative Information, 서버가 클라이언트 요구 중 일부만 전송함 |
204 | Non Content, 클라이언트 요구를 처리했으나 전송할 데이터가 없음 |
205 | Reset Content |
206 | Partial Content |
300 | Multiple Choices, 최근에 옮겨진 데이터를 요청함. |
301 | Moved Permanently, 요구한 데이터를 변경된 임시 URL에서 찾음 |
302 | Moved Permanently, 요구한 데이터가 변경된 URL에 있음 |
303 | See Other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음 |
304 | Not modified |
305 | Use Proxy |
400 | Bad Request, 요청 실패 – 문법상 오류가 있어서 서버가 요청 사항을 이해하지 못함. |
401.1 | Unauthorized, 권한 없음 – 접속 실패, 이 에러는 서버에 로그온 하려는 요청 사항이 서버에 들어있는 권한과 비교했을 시 맞지 않을 경우 발생. 이 경우, 요청한 자원에 접근할 수 있는 권한을 부여받기 위해서 서버 운영자에게 요청해야 함. |
401.2 | Unauthorized, 권한 없음 – 서버 설정으로 인한 접속 실패, 이 에러는 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지 않을 경우 발생. 이것은 일반적으로 적절한 www-authenticate head field를 전송하지 않아서 발생함. |
402.3 | Unauthorized, 권한 없음 – 자원에 대한 ACL에 기인한 권한 없음. 이 에러는 클라이언트가 특정 자원에 접근할 수 없을 때 발생. 이 자원은 페이지가 될 수도 있고, 클라이언트의 주소 입력란에 명기된 파일일 수도 있다. 또한, 클라이언트가 해당 주소로 접속할 때 이용되는
또 다른 파일일 수도 있다. 접근할 전체 주소를 다시 확인해 보고 웹 서버 운영자에게 여러분이 자원에 접근할 권한이 있는지를 확인한다. |
401.4 | Unauthorized, 권한 없음 – 필터에 의한 권한 부여 실패. 이 에러는 웹 서버가 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음을 의미함. 서버에 접속하는데 이용되는 인증 과정이 이런 필터 프로그램에 의해 거부된 것임 |
404.5 | Unauthorized, 권한 없음 – ISA PI/CGI 어플리케이션에 의한 권한 부여 실패. 이 에러는 이용하려는 웹 서버의 어드레스에 ISA PI나 CGI 프로그램이 설치되어 있어 사용자의 권한을 검증함. 서버에 접속하는데 이용되는 인증 과정이 이 프로그램에 의해 거부됨. |
402 | Payment Required, 예약됨 |
403.1 | Forbidden, 금지 – 수행 접근 금지. 이 에러는 CGI나 ISA-PI, 혹은 수행시키지 못하도록 되어 있는 디렉터리 내의 실행 파일을 수행시키려고 했을 때 발생함. |
403.2 | Forbidden, 금지 – 읽기 접근 금지. 이 에러는 브라우저가 접근한 디렉터리에 가용한 디폴트 페이지가 없을 경우에 발생함. |
403.4 | Forbidden, 금지 – SSL 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생. |
403.5 | Forbidden, 금지 – SSL 128이 필요. 이 에러는 접근하려는 페이지가 SSL로 보안 유지되고 있는 것일 때 발생. 브라우저가 128비트의 SSL을 지원하는지를 확인해야 함. |
403.6 | Forbidden, 금지 – IP 주소 거부됨. 이 에러는 서버가 사이트에 접근이 허용되지 않은 IP주소로 사용자가 접근하려 했을 때 발생함. |
403.7 | Forbidden, 금지 – 클라이언트 확인 필요. 이 에러는 접근하려는 자원이 서버가 인식하기 위해서 브라우저에게 클라이언트 SSL을 요청하는 경우 발생함. 자원을 이용할 수 있는 사용자임을 입증하는데 사용됨. |
403.8 | Forbidden, 금지 – 사이트 접근 거부. 이 에러는 웹 서버가 요청사항을 수행하고 있지 않거나, 해당 사이트에 접근하는 것을 허락하지 않았을 경우에 발생함. |
403.9 | Forbidden, 금지 – 연결된 사용자수 과다. 이 에러는 웹 서버가 busy한 상태에 있어서 요청을 수행할 수 없을 경우에 발생함. |
403.10 | Forbidden, 금지 – 설정이 확실하지 않음. 이 에러는 웹 서버의 설정 부분에 문제가 있을 경우 발생함. |
403.11 | Forbidden, 금지 – 패스워드 변경. 이 에러는 사용자 인증 단계에서 잘못된 패스워드를 입력했을 경우 발생함. |
403.12 | Forbidden, 금지 – Mapper 접근 금지. 이 에러는 클라이언트 인증용 맵(map)이 해당 웹 사이트에 접근하는 것을 거부할 경우에 발생. |
404 | Not Found, 문서를 찾을 수 없음 – 이 에러는 클라이언트가 요청한 문서를 찾지 못한 경우에 발생함. URL을 다시 잘 보고 주소가 올바로 입력되었는지를 확인함. |
405 | Method not allowed, 메소드 허용 안 됨 – 이 에러는 Request 라인에 명시된 메소드를 수행하기 위한 해당 자원의 이용이 허용되지 않았을 경우에 발생함. |
406 | Not Acceptable, 받아들일 수 없음 – 이 에러는 요청 사항에 필요한 자원은 요청 사항으로 전달된 Accept header에 따라 “Not Acceptable” 내용을 가진 사항이 있을 경우에 발생함. |
407 | Proxy Authentication Required, Proxy 인증이 필요함 – 이 에러는 해당 요청이 수행되도록 proxy 서버에게 인증을 받아야 할 경우에 발생함. |
408 | Request timeout, 요청 시간이 지남 |
409 | Conflict |
410 | Gone, 영구적으로 사용할 수 없음. |
411 | Length Required |
412 | Precondition Failed, 선결조건 실패 – 이 에러는 Request-header filed에 하나 이상에 선결 조건에 대한 값이 서버에서의 테스트 결과 false로 나왔을 경우에 발생 |
413 | Request entity too large |
414 | Request-URI too long, 요청한 URI가 너무 김 – 이 에러는 요청한 URI의 길이가 너무 길어서 서버가 요청 사항의 이행을 거부했을 경우 발생 |
415 | Unsupported media type |
500 | Internal Server Error, 서버 내부 오류 – 이 에러는 웹 서버가 요청사항을 수행할 수 없을 경우에 발생함 |
501 | Not Implemented, 적용 안 됨 – 이 에러는 웹 서버가 요청사항을 수행하는데 필요한 기능을 지원하지 않는 경우에 발생 |
502 | Bad gateway, 게이트웨이 상태 나쁨 – 이 에러는 게이트웨이 상태가 나쁘거나 서버의 과부하 상태일 때 발생한다. |
503 | Service Unavailable, 서비스 불가능 – 이 에러는 서비스가 현재 멈춘 상태 또는 현재 일시적인 과부하 또는 관리 상황일 때 발생될 수 있다. |
504 | Gateway timeout |
505 | HTTP Version Not Supported |
Author Archives: heewoo
HTTP 요청/응답 스펙 간략히 이해하기
HTTP 요청/응답 스펙 간략히 이해하기 최근 La Scala 코딩단에서 Scala로 정적서버를 구현하는 스터디를 진행하게 되면서 HTTP 스펙을 다시 보게되었다. 웹개발을 하다보니 HTTP 프로토콜을 많이 사용해서 익숙하기는 하지만 그렇다고 스펙을 찬찬히 본적은 없었기에 이번 기회를 삼아서 스펙을 좀 살펴보았고 HTTP 스펙을 잘 아시는 셈틀노리님의 설명도 들었다. HTTP 1.1의 스펙은 IETF에 잘 나와있다. 일반적으로 웹프레임워크에서 대부분 처리해줘서 직접 헤더를 다뤄본 적은 없기 때문에 스터디의 범위에는 포함되어 있지 않았지만 HTTP 스펙을 좀 이해해보자는 차원에서 헤더 파싱도 간단하게 나마 시도해 봤었다. 스펙의 양이 아주 많지는 않은데 그렇다고 다 읽어본 것은 아니고 필요한 부분만 좀 찾아보았는데 셈틀노리님이 정리해서 설명도 해주었기 때문에 간단하게 나마 정리한다. Request 요청 메시지는 스펙상 다음과 같이 생겼다. Request-Line *(( general-header | request-header | entity-header ) CRLF) CRLF [ message-body ] 간단히 말하면 첫줄은 Request-Line이 오고 이어서 여러 종류의 헤더가 나온 다음에 줄바꿈을 두번하고(한줄 건너띄고) 메시지 바디가 오게된다. Request Line 요청의 첫 줄은 Request Line이라고 부르는데 스펙상은 Method SP Request-URI SP HTTP-Version CRLF 와 같이 정의하는데 보통 다음과 같이 생겼다. GET /index.html HTTP/1.1 맨 앞의 GET은 요청 Method를 의미하는데 OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT 8가지가 있다. OPTIONS : 요청 URI에서 사용할 수 있는 Method를 물어본다.(스펙 참고) GET : 요청 URI의 정보를 가져온다.(스펙 참고) HEAD : GET 요청에서 body는 제외하고 헤더만 가져온다.(스펙 참고) POST : 요청 URI의 리소스의 새로운 정보를 보낸다.(스펙 참고) PUT : 요청 URI에 저장될 정보를 보낸다. (스펙 참고) DELETE : 요청 URI의 리소스를 삭제한다.(스펙 참고) TRACE : 보낸 메시지를 다시 돌려보낸다. (스펙 참고) CONNECT : 프록시에 사용하기 위해 예약된 메서드이다.(스펙 참고) 메서드 다음에는 요청 URI가 온다.(/index.html 부분) 말그대로 URI이고 절대경로의 URI가 될수도 있고 *이 될수도 있다. Request Line의 마지막에는 HTTP 버전을 의히한다. 스펙상으로는 "HTTP" "/" 1*DIGIT "." 1*DIGIT 와 같이 정의되는데 현재 HTTP/1.0과 HTTP/1.1이 있다. 마지막에는 <CRLF>가 있어야 한다. 즉, 줄바꿈을 한다는 얘기인데 CR은 carriage return(13)이고 LF는 linefeed(10)이다.(각 기호에 대한 정의는 스펙의 Basic Rule부분에 나와있다.) 추가: 김관래의 제보로 PATCH 메서드 추가합니다. partial resource modification 용도라는데 HTTP 1.1 스펙에 안들어있는걸 보면 진행중인 상태가 아닐까 혼자 추측해 봅니다. PATCH for HTTP Headers Request-Line 다음에는 header가 위치하는데 앞에서 본 스펙대로 general-header, request-header, entity-header 3가지 종류가 있고 요청에 따라 필요한 헤더만 사용하게 된다. General Header에는 Cache-Control, Connection, Date, Pragma, Trailer, Transfer-Enco, Upgrade, Via, Warning가 있고 Request Header에는 Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, Expect, From, Host, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Max-Forwards, Proxy-Authorization, Range, Referer, TE, User-Agent등이 있고 Entity Header에는 Allow, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, Expires, Last-Modified, extension-header가 있다. 헤더는 name : content의 형식이 되는데 content 부분은 각 헤더에 대한 상세 내용을 확인해 보면 되는데 각 값들은 공백이나 탭으로 구분될 수 있고 각 헤더는 CRLF로 구분된다. Response 응답 메시지는 다음과 같이 정의되어 있다. Status-Line *(( general-header | response-header | entity-header ) CRLF) CRLF [ message-body ] 첫줄이 요청라인대신에 상태라인인것과 요청헤더 대신 응답헤더가 들어간 것만 빼면 요청 메시지와 동일한 형태이다. Status Line Status Line은 HTTP-Version SP Status-Code SP Reason-Phrase CRLF로 정의되어 있고 보통 다음과 같이 생겼다. HTTP/1.1 200 OK HTTP 버전은 요청부분에서 설명한 것과 동일하고 상태코드(Status-Code)는 흔히 보는 3자리 숫자로 된 상태를 나타내는 코드로 각 번호대 별로 다음과 같은 의미를 가지고 있다. 1xx : 정보성 2xx : 성공 3xx : 리다이렉트 4xx : 클라이언트 오류 5xx : 서버 오류 각 상태코드에 대한 설명도 스펙에 잘 나와있다. Headers 헤더 부분의 General Header와 Entity Header는 요청부분에서 설명한 것과 동일하고 Response Header는 Accept-Ranges, Age, ETag, Location, Proxy-Authenticate, Retry-After, Server, Vary, WWW-Authenticate가 있다.
해당 필드에 중복된 값 찾기
중복된 전부
select FIELD, count(*) from TABLE group by FIELD
중복된 갯수가 한개 이상인 것
select FIELD, count(*) as num from TABLE group by FIELD having num>1
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction;
현재 mybatis는 3.1.1 까지 나와 있다.
하지만 뭐가 문제인지 spring 3.1.1에서 같이 사용해보니 아래와 같은 오류가 난다.
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction;
그래서 3.1.0으로 해봤으나 결과는 같은 오류가 났다.
다시 버전을 하나더 내려서 3.0.6으로 해봤더니 정상적으로 동작하는걸 확인할 수 있었다.
======================================================================================================================
위의 문제가 발생한 원인은
mybatis-3.1.1.jar 과 mybatis-spring-1.0.0-RC3.jar를 사용하여 발생한 문제 인것으로 추측 된다.
mybatis-3.1.1.jar 과 mybatis-spring-1.1.1.jar을 사용하니 위와 같은 문제는 해결 되었다.
어찌보면 너무나도 당연한것 같은데 모르고 있었을때는 한없이 어렵다.
java.net.BindException: Address already in use: JVM_Bind
문제:
JEUS를 설치하고 끄고 켜기를 몇 번 하다보니, 아래와 같은 에러가 발생했다.
java.net.BindException: Address already in use: JVM_Bind
아무래도 기존 프로세스가 죽지 않아서 그런 것 같은데,
무슨 오류일까…
해결책:
해당 포트가 이미 사용 중이란 오류이므로, 해당 포트를 사용하는 프로세스를 종료해주면 된다.
그 프로세스가 어떤 건지 모를 경우, cmd 에서
또는 작업 관리자에서 PID 를 보이게 한 후, 종료하면 된다.
** 추가: 2010.01.21
위 에러 발생이 잦아 매번 찾기 번거로워 간단한 배치파일을 하나 만들었다.
포트를 사용하는 프로세스를 찾아 죽이는 기능을 한다.
배치 파일을 실행시켜 찾을 포트를 입력하면, 해당 포트의 목록을 보여준다.
(맨 오른쪽 컬럼이 PID 를 가리킨다.)
포트 목록을 확인하고, 삭제할 PID 를 입력하면 해당 프로세스가 죽는다.
좋아요 |
한 명이 좋아합니다. 친구들이 무엇을 좋아하는지 알아보려면 가입하기 |
‘Daylogs > Java‘ 카테고리의 다른 글
JSP, Servlet Spec 버전과 WAS (0) | 2009/12/04 |
---|---|
자바는 기본적으로 값에 의한 전달(Pass-by-value)을 한다. (0) | 2009/12/03 |
java.net.BindException: Address already in use: JVM_Bind (1) | 2009/11/25 |
Servlet Thread – Serlvet 은 Runnable을 구현하나? (0) | 2009/11/24 |
동기화를 지원하는 컬렉션 (0) | 2009/11/24 |
정규식 (Regular Expression) (0) | 2009/11/20 |
Elements (jsoup 1.7.4-SNAPSHOT API)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
org.jsoup.select
Class Elements
java.lang.Object org.jsoup.select.Elements
A list of Elements
, with methods that act on every element in the list.
To get an Elements object, use the Element.select(String)
method.
- Author:
- Jonathan Hedley, jonathan@hedley.net
Constructor Summary | |
---|---|
Elements() |
|
Elements(Collection<Element> elements) |
|
Elements(Element... elements) |
|
Elements(int initialCapacity) |
|
Elements(List<Element> elements) |
Method Summary | ||
---|---|---|
boolean |
add(Element element) |
|
void |
add(int index, Element element) |
|
boolean |
addAll(Collection<? extends Element> c) |
|
boolean |
addAll(int index, Collection<? extends Element> c) |
|
Elements |
addClass(String className) Add the class name to every matched element’s class attribute. |
|
Elements |
after(String html) Insert the supplied HTML after each matched element’s outer HTML. |
|
Elements |
append(String html) Add the supplied HTML to the end of each matched element’s inner HTML. |
|
String |
attr(String attributeKey) Get an attribute value from the first matched element that has the attribute. |
|
Elements |
attr(String attributeKey, String attributeValue) Set an attribute on all matched elements. |
|
Elements |
before(String html) Insert the supplied HTML before each matched element’s outer HTML. |
|
void |
clear() |
|
Elements |
clone() Creates a deep copy of these elements. |
|
boolean |
contains(Object o) |
|
boolean |
containsAll(Collection<?> c) |
|
Elements |
empty() Empty (remove all child nodes from) each matched element. |
|
Elements |
eq(int index) Get the nth matched element as an Elements object. |
|
boolean |
equals(Object o) |
|
Element |
first() Get the first matched element. |
|
List<FormElement> |
forms() Get the FormElement forms from the selected elements, if any. |
|
Element |
get(int index) |
|
boolean |
hasAttr(String attributeKey) Checks if any of the matched elements have this attribute set. |
|
boolean |
hasClass(String className) Determine if any of the matched elements have this class name set in their class attribute. |
|
int |
hashCode() |
|
boolean |
hasText() |
|
String |
html() Get the combined inner HTML of all matched elements. |
|
Elements |
html(String html) Set the inner HTML of each matched element. |
|
int |
indexOf(Object o) |
|
boolean |
is(String query) Test if any of the matched elements match the supplied query. |
|
boolean |
isEmpty() |
|
Iterator<Element> |
iterator() |
|
Element |
last() Get the last matched element. |
|
int |
lastIndexOf(Object o) |
|
ListIterator<Element> |
listIterator() |
|
ListIterator<Element> |
listIterator(int index) |
|
Elements |
not(String query) Remove elements from this list that match the Selector query. |
|
String |
outerHtml() Get the combined outer HTML of all matched elements. |
|
Elements |
parents() Get all of the parents and ancestor elements of the matched elements. |
|
Elements |
prepend(String html) Add the supplied HTML to the start of each matched element’s inner HTML. |
|
Elements |
remove() Remove each matched element from the DOM. |
|
Element |
remove(int index) |
|
boolean |
remove(Object o) |
|
boolean |
removeAll(Collection<?> c) |
|
Elements |
removeAttr(String attributeKey) Remove an attribute from every matched element. |
|
Elements |
removeClass(String className) Remove the class name from every matched element’s class attribute, if present. |
|
boolean |
retainAll(Collection<?> c) |
|
Elements |
select(String query) Find matching elements within this element list. |
|
Element |
set(int index, Element element) |
|
int |
size() |
|
List<Element> |
subList(int fromIndex, int toIndex) |
|
Elements |
tagName(String tagName) Update the tag name of each matched element. |
|
String |
text() Get the combined text of all the matched elements. |
|
Object[] |
toArray() |
|
|
toArray(T[] a) |
|
Elements |
toggleClass(String className) Toggle the class name on every matched element’s class attribute. |
|
String |
toString() Get the combined outer HTML of all matched elements. |
|
Elements |
traverse(NodeVisitor nodeVisitor) Perform a depth-first traversal on each of the selected elements. |
|
Elements |
unwrap() Removes the matched elements from the DOM, and moves their children up into their parents. |
|
String |
val() Get the form element’s value of the first matched element. |
|
Elements |
val(String value) Set the form element’s value in each of the matched elements. |
|
Elements |
wrap(String html) Wrap the supplied HTML around each matched elements. |
Methods inherited from class java.lang.Object |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
Elements
public Elements()
Elements
public Elements(int initialCapacity)
Elements
public Elements(Collection<Element> elements)
Elements
public Elements(List<Element> elements)
Elements
public Elements(Element... elements)
Method Detail |
---|
clone
public Elements clone()
attr
public String attr(String attributeKey)
- Get an attribute value from the first matched element that has the attribute.
-
-
- Parameters:
attributeKey
– The attribute key.- Returns:
- The attribute value from the first matched element that has the attribute.. If no elements were matched (isEmpty() == true), or if the no elements have the attribute, returns empty string.
- See Also:
hasAttr(String)
hasAttr
public boolean hasAttr(String attributeKey)
- Checks if any of the matched elements have this attribute set.
-
-
- Parameters:
attributeKey
– attribute key- Returns:
- true if any of the elements have the attribute; false if none do.
attr
public Elements attr(String attributeKey, String attributeValue)
- Set an attribute on all matched elements.
-
-
- Parameters:
attributeKey
– attribute keyattributeValue
– attribute value- Returns:
- this
removeAttr
public Elements removeAttr(String attributeKey)
- Remove an attribute from every matched element.
-
-
- Parameters:
attributeKey
– The attribute to remove.- Returns:
- this (for chaining)
addClass
public Elements addClass(String className)
- Add the class name to every matched element’s
class
attribute. -
-
- Parameters:
className
– class name to add- Returns:
- this
removeClass
public Elements removeClass(String className)
- Remove the class name from every matched element’s
class
attribute, if present. -
-
- Parameters:
className
– class name to remove- Returns:
- this
toggleClass
public Elements toggleClass(String className)
- Toggle the class name on every matched element’s
class
attribute. -
-
- Parameters:
className
– class name to add if missing, or remove if present, from every element.- Returns:
- this
hasClass
public boolean hasClass(String className)
- Determine if any of the matched elements have this class name set in their
class
attribute. -
-
- Parameters:
className
– class name to check for- Returns:
- true if any do, false if none do
val
public String val()
- Get the form element’s value of the first matched element.
-
-
- Returns:
- The form element’s value, or empty if not set.
- See Also:
Element.val()
val
public Elements val(String value)
- Set the form element’s value in each of the matched elements.
-
-
- Parameters:
value
– The value to set into each matched element- Returns:
- this (for chaining)
text
public String text()
- Get the combined text of all the matched elements.Note that it is possible to get repeats if the matched elements contain both parent elements and their own children, as the Element.text() method returns the combined text of a parent and all its children.
-
-
- Returns:
- string of all text: unescaped and no HTML.
- See Also:
Element.text()
hasText
public boolean hasText()
html
public String html()
- Get the combined inner HTML of all matched elements.
-
-
- Returns:
- string of all element’s inner HTML.
- See Also:
text()
,outerHtml()
outerHtml
public String outerHtml()
- Get the combined outer HTML of all matched elements.
-
toString
public String toString()
- Get the combined outer HTML of all matched elements. Alias of
outerHtml()
.
tagName
public Elements tagName(String tagName)
- Update the tag name of each matched element. For example, to change each
<i>
to a<em>
, dodoc.select("i").tagName("em");
-
-
- Parameters:
tagName
– the new tag name- Returns:
- this, for chaining
- See Also:
Element.tagName(String)
html
public Elements html(String html)
- Set the inner HTML of each matched element.
-
-
- Parameters:
html
– HTML to parse and set into each matched element.- Returns:
- this, for chaining
- See Also:
Element.html(String)
prepend
public Elements prepend(String html)
- Add the supplied HTML to the start of each matched element’s inner HTML.
-
-
- Parameters:
html
– HTML to add inside each element, before the existing HTML- Returns:
- this, for chaining
- See Also:
Element.prepend(String)
append
public Elements append(String html)
- Add the supplied HTML to the end of each matched element’s inner HTML.
-
-
- Parameters:
html
– HTML to add inside each element, after the existing HTML- Returns:
- this, for chaining
- See Also:
Element.append(String)
before
public Elements before(String html)
- Insert the supplied HTML before each matched element’s outer HTML.
-
-
- Parameters:
html
– HTML to insert before each element- Returns:
- this, for chaining
- See Also:
Element.before(String)
after
public Elements after(String html)
- Insert the supplied HTML after each matched element’s outer HTML.
-
-
- Parameters:
html
– HTML to insert after each element- Returns:
- this, for chaining
- See Also:
Element.after(String)
wrap
public Elements wrap(String html)
- Wrap the supplied HTML around each matched elements. For example, with HTML
<p><b>This</b> is <b>Jsoup</b></p>
,doc.select("b").wrap("<i></i>");
becomes<p><i><b>This</b></i> is <i><b>jsoup</b></i></p>
-
-
- Parameters:
html
– HTML to wrap around each element, e.g.<div></div>
. Can be arbitrarily deep.- Returns:
- this (for chaining)
- See Also:
Element.wrap(java.lang.String)
unwrap
public Elements unwrap()
- Removes the matched elements from the DOM, and moves their children up into their parents. This has the effect of dropping the elements but keeping their children.
This is useful for e.g removing unwanted formatting elements but keeping their contents.
E.g. with HTML:
<div><font>One</font> <font><a href="/">Two</a></font></div>
doc.select("font").unwrap();
HTML =<div>One <a href="/">Two</a></div>
-
-
- Returns:
- this (for chaining)
- See Also:
Node.unwrap()
empty
public Elements empty()
- Empty (remove all child nodes from) each matched element. This is similar to setting the inner HTML of each element to nothing.E.g. HTML:
<div><p>Hello <b>there</b></p> <p>now</p></div>
doc.select("p").empty();
HTML =<div><p></p> <p></p></div>
-
-
- Returns:
- this, for chaining
- See Also:
Element.empty()
,remove()
remove
public Elements remove()
- Remove each matched element from the DOM. This is similar to setting the outer HTML of each element to nothing.E.g. HTML:
<div><p>Hello</p> <p>there</p> <img /></div>
doc.select("p").remove();
HTML =<div> <img /></div>
Note that this method should not be used to clean user-submitted HTML; rather, use
Cleaner
to clean HTML. -
-
- Returns:
- this, for chaining
- See Also:
Element.empty()
,empty()
select
public Elements select(String query)
- Find matching elements within this element list.
-
-
- Parameters:
query
– ASelector
query- Returns:
- the filtered list of elements, or an empty list if none match.
not
public Elements not(String query)
- Remove elements from this list that match the
Selector
query.E.g. HTML:<div>One</div> <div>Two</div>
Elements divs = doc.select("div").not("#logo");
Result:divs: [<div>Two</div>]
-
-
- Parameters:
query
– the selector query whose results should be removed from these elements- Returns:
- a new elements list that contains only the filtered results
eq
public Elements eq(int index)
- Get the nth matched element as an Elements object.See also
get(int)
to retrieve an Element. -
-
- Parameters:
index
– the (zero-based) index of the element in the list to retain- Returns:
- Elements containing only the specified element, or, if that element did not exist, an empty list.
is
public boolean is(String query)
- Test if any of the matched elements match the supplied query.
-
-
- Parameters:
query
– A selector- Returns:
- true if at least one element in the list matches the query.
parents
public Elements parents()
- Get all of the parents and ancestor elements of the matched elements.
-
-
- Returns:
- all of the parents and ancestor elements of the matched elements
first
public Element first()
- Get the first matched element.
-
-
- Returns:
- The first matched element, or
null
if contents is empty.
last
public Element last()
- Get the last matched element.
-
-
- Returns:
- The last matched element, or
null
if contents is empty.
traverse
public Elements traverse(NodeVisitor nodeVisitor)
- Perform a depth-first traversal on each of the selected elements.
-
-
- Parameters:
nodeVisitor
– the visitor callbacks to perform on each node- Returns:
- this, for chaining
forms
public List<FormElement> forms()
- Get the
FormElement
forms from the selected elements, if any. -
-
- Returns:
- a list of FormElements pulled from the matched elements. The list will be empty if the elements contain no forms.
size
public int size()
isEmpty
public boolean isEmpty()
contains
public boolean contains(Object o)
iterator
public Iterator<Element> iterator()
toArray
public Object[] toArray()
toArray
public <T> T[] toArray(T[] a)
add
public boolean add(Element element)
remove
public boolean remove(Object o)
containsAll
public boolean containsAll(Collection<?> c)
-
- Specified by:
containsAll
in interfaceCollection<Element>
- Specified by:
containsAll
in interfaceList<Element>
-
addAll
public boolean addAll(Collection<? extends Element> c)
addAll
public boolean addAll(int index, Collection<? extends Element> c)
removeAll
public boolean removeAll(Collection<?> c)
retainAll
public boolean retainAll(Collection<?> c)
clear
public void clear()
equals
public boolean equals(Object o)
hashCode
public int hashCode()
get
public Element get(int index)
set
public Element set(int index, Element element)
add
public void add(int index, Element element)
remove
public Element remove(int index)
indexOf
public int indexOf(Object o)
lastIndexOf
public int lastIndexOf(Object o)
-
- Specified by:
lastIndexOf
in interfaceList<Element>
-
listIterator
public ListIterator<Element> listIterator()
-
- Specified by:
listIterator
in interfaceList<Element>
-
listIterator
public ListIterator<Element> listIterator(int index)
-
- Specified by:
listIterator
in interfaceList<Element>
-
subList
public List<Element> subList(int fromIndex, int toIndex)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Copyright © 2009-2013 Jonathan Hedley. All Rights Reserved.
[Linux] 디렉토리나, 파일 개수 세기
[Linux] 디렉토리나, 파일 개수 세기 by Sigel
- 2008/11/21 20:02
- Computer & Program
- entireboy.egloos.com/3988262
- 2 comments
우선 간단히 오뜨케하는지 방법부터 알아보자.
현재 디렉토리 내에 있는 디렉토리 개수를 알고 싶으면..
Prompt>ls -l | grep ^d | wc -l
현재 디렉토리 내에 있는 파일의 개수를 알고 싶으면..
Prompt>ls -l | grep ^– | wc -l정규식(Regular Expression)을 이용해서 보다 세밀하게 파일명을 필터링하고 싶으면..
(대충 설명은 아래에..)
Prompt>ls -l | grep ^- | awk ‘{print $9}’ | grep [정규식] | wc -l서브 디렉토리를 포함하려면 ls -Rl을 사용하면 되겠다.
자.. 저게 뭐라고 쓰인건지 해석을 해보자. 해석하다 보면 내가 필요에 따라 변경해서 재미나게 사용할 수 있을 것 같다. 우선.. “ls” 명령어 부분부터 보자.
Prompt>ls -l | grep ^- | wc -l
누구나 알겠지만, “ls” 명령어는 현재 디렉토리의 파일이나 디렉토리를 보여준다. “-l” 옵션을 붙여주면 아래와 같이 디렉토리의 내용을 보여준다. 역시 누구나 알겠지만 매 줄의 시작 부분을 보고 해당 내용의 종류를 알 수 있다. “d”로 시작하면 디렉토리이고, “-“로 시작하면 일반 파일이며, “l”로 시작하면 simbolic link이며, 더는 모르겠다. @ㅅ@ 자세한 것은 “man ls”에게 물어보도록 ㅋㅋ (다시 말하지만 난 수업 시간에 배운 아주 간단한 것 이외에는 기억에 남은게 없다. TㅅT)
“-l”옵션을 주면 아래와 같이 리스트로 나온다. 맨 앞부분이 해당하는 아이템의 종류이다.
[/test]$ls -l
합계 16
lrwxrwxrwx 1 root root 10 11월 21 16:34 README -> manual.txt
–rw-r–r– 1 root root 7155 11월 21 16:50 manual.txt
drwxr-xr-x 2 root root 4096 11월 21 16:46 test1
drwxr-xr-x 2 root root 4096 11월 21 17:19 test2
여기서 하위 디렉토리(서브 디렉토리)의 파일이나 디렉토리도 함께 세고 싶다면 “ls” 명령의 옵션인 “-R” 옵션도 추가하여 “ls -Rl”로 사용하면 된다. 그러면 아래와 같이 각 디렉토리의 내용이 보이게 된다.
[/test]$ls -Rl
.:
합계 16
lrwxrwxrwx 1 root root 10 11월 21 16:34 README -> manual.txt
-rw-r–r– 1 root root 7155 11월 21 16:50 manual.txt
drwxr-xr-x 2 root root 4096 11월 21 16:46 test1
drwxr-xr-x 2 root root 4096 11월 21 17:19 test2./test1:
합계 12
-rw-r–r– 1 root root 237 11월 21 16:46 BlackSheepWall
-rw-r–r– 1 root root 54 11월 21 16:45 OperationCWAL
-rw-r–r– 1 root root 182 11월 21 16:44 ShowMeTheMoney./test2:
합계 8
-rw-r–r– 1 root root 2224 11월 21 16:28 test.jpg
-rw-r–r– 1 root root 53 11월 21 16:28 test.txt
그리고 다음 “grep” 명령어 부분을 보자. “grep”은 내가 원하는 패턴을 가지고 있는 라인만을 골라서 볼 수 있다. “grep”의 패턴은 정규식(Regular Expression)으로 설정한다.
Prompt>ls -l | grep ^- | wc -l
여기서는 “grep”의 패턴으로 “^-“를 줬다. 정규식에서 “^”는 줄의 가장 첫부분을 나타낸다. “$”는 줄의 가장 마지막을 나타낸다. 따라서 “^-“는 줄의 맨 앞이 “-“로 시작하는 것을 찾는 것이다. “ls -l” 명령어의 결과로 일반 파일은 “-“로 시작하니 파일의 개수를 세기 위해 “^-“를 패턴으로 사용한 것이다. 만일 디렉토리의 개수를 세고 싶으면 “grep ^d”로 바꿔주면 되고, “.class”를 확장자로 가지는 파일을 찾고 싶으면 “grep ^-.*\.class$”로 바꿔주면 되겠다. (파일명 필터링에 관해서는 아래 부분에 또 다른 설명이 있다.) 정규식은 무궁무진한 표현이 가능하니 필요한 파일이나 디렉토리, 링크 등 원하는 것을 골라 잡자. ㅋㅋ
만일 위의 디렉토리에서 “.txt” 확장자를 가진 파일을 보고 싶다면 다음과 같이 입력하면 되겠다.
[/test]$ls -Rl | grep ^-.*\.txt$
-rw-r–r– 1 root root 7155 11월 21 16:50 manual.txt
-rw-r–r– 1 root root 53 11월 21 16:28 test.txt
하위 디렉토리의 파일도 검색하고 싶으니 “ls”명령에 “-R” 옵션도 주었다. 그러면 현재 디렉토리의 하위에 있는 모든 “.txt” 확장자를 가진 파일이 검색된다. 자.. 이제 이 목록의 줄 수만 세면 “.txt” 확장자를 가진 파일의 개수를 알 수 있다.
자.. 라인수를 세서 파일의 개수를 알아보자.
Prompt>ls -l | grep ^- | wc -l
하위 디렉토리도 포함해서 “.txt” 확장자를 가진 파일을 세면.. 2개가 나온다.
[/test]$ls -Rl | grep ^-.*\.txt$ | wc -l
2
여기서 대문자로 시작하는 파일이나 숫자를 포함하는 파일명 등 조금 더 구체적으로 파일이나 디렉토리의 이름을 필터링해서 검색하려면 앞에 썼던 “grep” 명령어의 정규식을 잘 이용하면 되겠지만, 아래와 같이 “ls” 명령어의 형태로 출력이 되기 때문에 정규식을 만들기가 어렵다. 이 때 “awk” 명령으로 필요한 부분만 잘라내서 다시 “grep” 명령을 사용할 수 있다.
[/test]$ls -Rl | grep ^-
-rw-r–r– 1 root root 7155 11월 21 16:50 manual.txt
-rw-r–r– 1 root root 237 11월 21 16:46 BlackSheepWall
-rw-r–r– 1 root root 54 11월 21 16:45 OperationCWAL
-rw-r–r– 1 root root 182 11월 21 16:44 ShowMeTheMoney
-rw-r–r– 1 root root 2224 11월 21 16:28 test.jpg
-rw-r–r– 1 root root 53 11월 21 16:28 test.txt
“awk ‘{print $9}'”를 이용하여 파일명에 해당하는 9번째 열만을 뽑아내자.
[/test]$ls -Rl | grep ^- | awk ‘{print $9}’
manual.txt
BlackSheepWall
OperationCWAL
ShowMeTheMoney
test.jpg
test.txt
그러면 파일명만이 남기 때문에 보다 수월하게 정규식을 이용하여 파일명을 필터링할 수 있다. 그럼 대문자로 시작하는 파일을 찾아보자. 개수는 3개..
[/test]$ls -Rl | grep ^- | awk ‘{print $9}’ | grep ^[A-Z]
BlackSheepWall
OperationCWAL
ShowMeTheMoney
[/test]$ls -Rl | grep ^- | awk ‘{print $9}’ | grep ^[A-Z] | wc -l
3
혹은 아래와 같이 파일명에 숫자가 포함된 파일을 찾을 수도 있겠다. 여기서는 파일명에 숫자가 포함된 파일이 없기 때문에 아무 것도 나오지 않는다. ㅋㅋ
[/test]$ls -Rl | grep ^- | awk ‘{print $9}’ | grep ^.*[0-9].*
[/test]$ls -Rl | grep ^- | awk ‘{print $9}’ | grep ^.*[0-9].* | wc -l
0
“grep” 명령을 2번이나 쓰는 이유는, 첫번째 “grep” 명령은 파일인지, 디렉토리인지 종류를 구분하기 위해 사용하고, 두번째 “grep”은 선택된 파일(또는 디렉토리)의 이름을 필터링하기 위해 사용한다.
vo, dao, dto란 무엇인가
VO 개념 Value Object는 DTO와 동일한 개념이나 차이 점은 read only 속성을 갖습니다. Value Object는 관계데이터베이스의 레코드에 대응되는 자바클래스입니다. 형태는 db레코드를 구성하는 필드들을 Value Object의 Attribute로 하고 해당 변수에 접근 할 수 있는 Getter Setter 메소드의 조합으로 클래스를 형성되어진 클래스입니다. 특성은 대체로 불변성이고 equals()로 비교할 때 객체의 모든 값을 비교해야 합니다. 필요성 Network traffic을 줄임으로 인해서 효과적입니다. 기대효과 Network traffic이 줄어듭니다. 장 단점 장점으로는 비 서버 측 클라이언트도 네트워크 오버헤드 없이 영속성 데이터에 액세스 할 수 있다는 점입니다. 데이터 전달을 위해 가장 효율적인 방법이지만, 클래스의 선언을 위해 많은 코드가 필요합니다. 즉 파일수가 많아지게 되고 관리도 힘들어지게 됩니다. 예제 소스코드 view plaincopy to clipboardprint? Public class Data extent ValueObject // VO패턴에 따라 상태가 변하지 않는 Immutable { // 클래스를 상속 받는다. private String Data; private int nNo; public String getData() { return Data; } public void setData(String data) {this.Data = data;} public int getNumber() {return nNo;} public void setNo(int no) { this.nNo = no;} } DTO 개념 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체입니다. Vo와 dto의 차이점은 vo는 특정한 비즈니스 값을 담는 객체를 vo라 하고 dto는 레이어간의 통신용도로 오가는 객체를 dto라고 합니다. Vo와 DTO의 비교 DTO의 나머지 속성은 vo와 똑같다고 생각하여서 차라리 차이점을 비교하려고 합니다. Core J2EE Patterns 라는 책에서는... Value Object랑 Transfer Object를 동일한 뜻으로 사용합니다만 반대로 Martin Fowler는 저서 Patterns of Enterprise Application Architecture에서 약간 다른 의미로 이야기 합니다. DTO는 메소드 호출 횟수를 줄이기 위해 데이터를 담고 있는 녀석으로, VO는 값이 같으면 동일 오브젝트라고 볼 수 있는 녀석으로 표현을 하고 있습니다. 쉽게 DTO a = new DTO(1); DTO b = new DTO(1); 이라고 했을 때 a != b 이지만, VO a = VO(1); VO b = VO(1); 이라고 했을때는 a == b라고 정의하는 형태입니다. 사실 이러한 내용도 헷갈리는 부분이 있는게 대부분의 검색에서 사람들은 vo와 dto를 같은 개념으로 이야기 하고 있어서 아직도 vo와 dto가 “이런거다”라기 보다 거의 똑 같은 개념으로 생각하고 있습니다. DAO 개념 데이터 접근을 목적하는 객체입니다. 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근 하도록 하는 것이 DAO의 개념입니다. 필요성 모든 데이터베이스에 공통적으로 접속 할 수 있는 ODBC가 나왔지만 완벽하진 못했습니다. 여전히 로우 레벨의 API를 포함하고 있었기 때문에 개발 장벽이 여전히 높았습니다. 이런 이유 때문에 개발자들은 정작 데이터베이스에 들어 있는 데이터를 어떻게 이용할지에 초점을 맞추기 보다, 어떻게 데이터베이스에 접속해서 데이터베이스와 교류하는지에 더 초점을 기울였습니다. 즉 데이터를 활용하는 논리적 고민보다 기술적 고민에 더 많은 신경을 썻었습니다. 이런 이유로 DAO란 대안이 나왔습니다. 기대효과 사용자는 자신이 필요한 Interface를 DAO에게 던지고 DAO는 이 인터페이스를 구현한 객체를 사용자에게 편리하게 사용 할수 있도록 반환해줍니다. 장 단점 DB에 대한 접근을 DAO가 담당하도록 하여 데이터베이스 엑세스를 DAO에서만 하게 되면 다수의 원격호출을 통한 오버헤드를 VO나 DTO를 통해 줄일수 있고 다수의 DB 호출문제를 해결할 수 있습니다. 또한 단순히 읽기만 하는 연산이므로 트랜잭션 간의 오버헤드를 감소할 수 있습니다. 그러나 Persistent Storage를 너무 밀접하게 결합해서 작성을 하게 되면 Persistent Stroage를 다시 작성할 경우가 생기는데 이러한 경우 유지 보수의 문제가 생길수도 있습니다. 예제 소스코드 view plaincopy to clipboardprint? // XXX 에 대한 DAO 생성자로 Connection 을 받습니다. // 그러면 해당 DAO 인스턴스는 해당 Connection 을 계속 재사용하게 됩니다. // 이 Connection 은 외부에서 넘겨 준것이므로 해당 DAO 는 release 는 할수 없습니다. // DAO 에서는 ResultSet 과 Statement 만을 생성하고 close 합니다. public class XXXDao { Connection dbConnection = null; public XXXDao( Connection dbConnection ) { this.dbConnection = dbConnection ; } public Vector doXXXDBLogic( String param1 ) throws Exception { // … Statement stmt = null; ResultSet rset = null; try { stmt = dbConnection.createStatement(); stmt.executeQuery( “select 어쩌구.. “); // Vector 에 결과 저장 & return } catch (Exception ex) { // exception 처리 throw ex; } finally { DBUtil.closeStatement( stmt ) ; // statement close DBUtil.closeResultSet( rset ) ; // resultset close } } }
맥에서 자바 버전 바꾸기
맥에 jdk를 설치하면, jdk7부터는 /Library/Java/JavaVirtualMachines/ 아래 설치됩니다. 시스템 환경변수에서 중요한 것이 JAVA_HOME인데, 이 경로를 참고해서 설정을 해야할 것입니다.
이를 편하게 변경하는 기능을 만든 것이 있습니다.
http://www.guigarage.com/downloads/jvc.jar
다운로드를 받으면 적당한 위치로 옮기고, 터미널에서 다음과 같이 명령을 내리면 됩니다.
java -jar jvc.jar
원하는 버전을 선택하고 아래 set Version 버튼을 클릭하면 됩니다. 시스템 비번을 입력하면 설정이 완료됩니다.
터미널을 새로 띄우고, 아래 명령으로 확인합니다.
java -version
맥에서 자바 버전 확인
export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)
그리고 1.7로 변경하려면
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)