오늘 코딩을 하다가 놀라운 사실을 발견했다.
아래와 같은 코드를 디버깅용으로 만들어 넣고 테스트해 보았다.
System.out.println("ignore:"+ignore+",characterencoding:"+request.getCharacterEncoding());
그런데, 분명히 콘솔에 찍혀야 되는데 안 찍히길래 컴파일이 제대로 된 건가 확인하기 위해 디컴파일러로 소스를 다시 보니 아래와 같은 코드가 보이는 것이다.
System.out.println((new StringBuilder("ignore:")).append(ignore).append(",characterencoding:").append(request.getCharacterEncoding()).toString());
흠, String concatenation 때문에 하도 문제가 생기니 JDK 1.5부턴 컴파일할 때 아예 이렇게 바이트코드를 만드는 모양이군...
요 몇달동안 String concatenation해야 할 게 많아서 그때마다 StringBuffer에 append하느라고 눈 빠질 뻔 했는데, 이게 언제 바뀐 거야.
바꾸면 나한테 전화라도 미리 해 줬어야 되는 거 아닌감? ㅋㅋ
'Java_Web' 카테고리의 다른 글
ASM - 자바 바이트코드 분석하기 (1) | 2008.03.07 |
---|---|
클래스 위치 찾아 주는 프로그램 (0) | 2007.08.15 |
웹개발을 위한 Power Tool - Firefox + Firebug (0) | 2007.08.04 |
프린트 관련 CSS 속성 (0) | 2007.06.14 |
중복 클래스 확인 프로그램 (0) | 2007.05.08 |
한동안 X-Internet 프로젝트를 하다 보니 순수 웹 개발에 대해서 잘 몰랐었는데
올해 순수 웹 개발을 하다 보니 말로만 듣던 Firefox + Firebug의 기능을 확인하게 되었다.
진작 이런 게 있었으면 웹개발 진짜 쉽게 할 수 있었는데, 왜 이제야 나온 거니? 왜 그런 거니?
1. Firebug 설치
Firefox만으로는 안 되고, Firebug라는 플러그인을 추가해야 강력한 무기를 완성하게 되는 것이다.
Firefox의 메뉴에서 "도구 > 부가기능"으로 들어간다.
이 다이얼로그는 이미 설치되어 있는 것이고, 없다면 아래의 "유용한 확장 기능 찾기"로 들어가 Firebug를 찾아 설치해야 한다.
설치되면 위와 같은 다이얼로그를 볼 수 있다.
설치된 후에 Firebug와 관련된 설정은 "도구 > Firebug"에서 조정할 수 있는데, Firefox를 오직 개발용으로 사용한다면 문제가 없지만 웹서핑용으로도 사용한다면 자신이 디버그를 원하는 주소를 등록하는 것이 좋다. 아무래도 디버깅툴이다 보니 Firebug가 동작하면 사이트가 뜨고 동작하는데 시간이 좀 걸린다.
2. Inspect Element
나를 반하게 한 기능 중의 하나가 Inspect Element이다. 이건 특정 element의 현재 속성을 HTML로 표현해 준다. 중요한 건 자바스크립트 등으로 변경되거나 추가된 각종 속성을 모두 보여 준다는 것이다. 그러니까, 서버에서 받은 코드가 아닌 현재 웹브라우저가 갖고 있는 실제 내용을 직접 확인할 수 있다는 얘기다.
이것은 화면상의 특정 부분에 오른쪽 클릭을 하고 메뉴에서 "Inspect Element"를 선택한다.
여기서는 맨 위의 플러스 이미지에서 오른쪽 클릭을 했다.
그러면, Firefox 하단에 아래와 같은 내용이 나타난다.
왼쪽 부분에는 현재 메모리상의 HTML 코드가 나오고, 오른쪽에는 이 element에 적용된 스타일이 표시된다.
HTML 코드에 마우스를 올려 놓으면 그 코드가 화면에서 어떤 부분인지 화면에 하늘색으로 표시가 되니 코드가 실제 화면에서 어떻게 나타나는지 확인하는 데도 유용하다.
3. 자바스크립트 디버그
이리저리 Firebug를 사용해 보다가 가장 놀란 기능이다. 자바스크립트를 디버그하다니...
먼저 위의 그림에서 Script 탭을 선택하고, 바로 위에서 디버그할 js나 자바스크립트를 포함한 html을 선택하면 아래에 코드가 나타난다.
코드에서 실행을 멈출 설정할 라인을 골라 클릭하면 breakpoint가 표시된다.
여기서 화면의 버튼을 클릭해서 자바스크립트를 실행시키거나, 화면을 다시 로딩하거나 하면 설정해 놓은 breakpoint에서 멈춰서 다음과 같은 화면이 나타난다.
여기부터는 이클립스에서 디버그를 해 본 사람이라면 편하게 사용할 수 있다.
오른쪽에 변수의 값들을 확인할 수 있고, New watch expression...에서 표현식을 입력하고 중간중간 확인해 볼 수도 있다.
프로그램 진행은 오른쪽 위의 각종 화살표를 누르면서 진행해 볼 수 있다. 단, 이클립스와 모양은 같지만 기능이 다르니 잘 확인해서 눌러야 한다.
이 포스트에선 내가 가장 유용하다고 생각되는 기능만을 다뤘는데 그 외의 버튼을 눌러보다 보면 정말 강력한 플러그인이라는 걸 느끼게 될 것이다.
단, Firefox는 IE에서 사용하는 비표준 태그나 자바스크립트 함수, ActiveX 등이 동작하지 않으므로 제한이 있다고 할 수도 있는데, 요즘 세상의 흐름이 표준을 준수하는 모든 브라우저를 사용할 수 있도록 사이트를 구성하는 것이기 때문에 이 기회에 이런 흐름을 따르는 것도 좋을 것 같다.
'Java_Web' 카테고리의 다른 글
클래스 위치 찾아 주는 프로그램 (0) | 2007.08.15 |
---|---|
놀라운 발견 (0) | 2007.08.12 |
프린트 관련 CSS 속성 (0) | 2007.06.14 |
중복 클래스 확인 프로그램 (0) | 2007.05.08 |
JVM Monitoring (0) | 2007.04.14 |
화면을 개발하다 보면 출력해야 하는 페이지가 꼭 있기 마련이다.
그런데, 통프레임이거나 프레임이 분리되는 경우라도 화면에는 보여야 하지만 출력할 때는 빼고 싶은 내용이 있다.
이거 찾는 데 시간이 걸리긴 했는데, 막상 적용하기는 무척 간단하다.
아래의 내용을 HTML의 style 태그 내에 넣거나, include하는 CSS 파일에 넣는다.
@media print
{
.noprint { display:none; }
}
설명 : @media print 는 print되는 결과물에만 적용되는 스타일이라는 뜻이다.
.noprint { display:none; } 잘 아는 바와 같이 display:none은 영역을 차지하지 않고, 보여주지도 않는다.
결과적으로 noprint라는 스타일을 적용한 객체는 프린트할 때 제외된다는 뜻이다.
이렇게 선언이 되었으니 적용만 하면 된다.
table, tr, td, div, input 등 어떤 객체든 일반 스타일 적용하듯class="noprint"속성만 붙이면 출력할 때 제외된다.
만약에 그 객체에 이미 화면용 스타일이 적용되어 있다면,
적용된 화면용 스타일이 "input_text"라면 그냥 그 옆에 noprint만 추가해 주면 된다.
다음과 같이class="input_text noprint"하면 된다.
그리고, 자바스크립트로 window.print()만 실행하면 noprint 속성이 적용 안 된 내용만 프린터로 출력된다.
이것을 응용하면 @media print 내에 프린트용 폰트나 속성을 적용해서, 화면과 출력물의 모양을 달리 할 수도 있다.
하지만, 이런 귀찮은 작업을 누가 하겠는가? 하라고 하면 짜증날 것 같다. ^^;
참고로 아래에는 window.print()로 인쇄 다이얼로그가 떴을 때 기본 종이 방향이 가로가 되도록 하는 CSS이다.
화면 내용의 폭이 커서 가로 출력이 필요할 때 유용하다.
(그런데, IE6에선 동작하고, FireFox2에선 동작 안 한다. FireFox는 세로로 해도 알아서 넘어가지 않게 자동축소출력해 주니 문제없다.)
이것도 마찬가지로 HTML의 style 태그 내에나, include하는 CSS 파일 내에 추가시켜 주면 된다.
@page { size: landscape; }
'Java_Web' 카테고리의 다른 글
놀라운 발견 (0) | 2007.08.12 |
---|---|
웹개발을 위한 Power Tool - Firefox + Firebug (0) | 2007.08.04 |
중복 클래스 확인 프로그램 (0) | 2007.05.08 |
JVM Monitoring (0) | 2007.04.14 |
Query Generator (1) | 2007.01.30 |