한국은 유난히 익스플로러[IE]를 많이 사용한다.

하지만 익스플로러는 너무나 많은 버전이 존재하고 버전별로 호환이 되는 기능들도 천차만별이다.

웹표준을 맞추는 문제도 익스플로러 버전때문에 힘든경우가 이만저만이 아니다.

 

정말 호환이 어려운 또는 버전별로 경고문이나 효과(?)를 주기위해서도 사용하고,

사용 용도는 개발자 마다 다르리라고 본다.

 

기본 사용법은 <!--[if IE 버전]><![endif]--> 이다.

하지만 버전별로 일일히 써주는 번거로움을 덜기 위해서는 다음 사항을 참고하자

 

 

 

        <!--[if IE 9]>표시하고 싶은 내용<![endif]-->

              : IE9 버전에만 표시할 내용


        <!--[if gte IE 9]>표시하고 싶은 내용<![endif]-->

              : IE9 이상 버전에만 표시할 내용

 

        <!--[if gt IE 9]>표시하고 싶은 내용<![endif]-->

              : IE9 초과 버전에만 표시할 내용

 

        <!--[if lte IE 9]>표시하고 싶은 내용<![endif]-->

              : IE9 이하 버전에만 표시할 내용

 

        <!--[if lt IE 9]>표시하고 싶은 내용<![endif]-->

              : IE9 미만 버전에만 표시할 내용

 

 

 

버전별로 스크립트나 스타일을 적용하는데 유용하다.

<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script>

 

다음을 삽입하면 익스플로러 6, 7 버전에서 조금이나마 웹표준을 맞출 수 있다. 

가장 유용한 기능은 익스플로러 6에서 투명 이미지?가 적용되지 않는 문제를 해결 할 수 있다는 점이다.

<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>

IE9버전 이하에서 HTML5 태그를 사용할 수 있도록 해주는 스크립트이다.

전 회사에서도 모바일웹을 제작하고 모바일로 접속 시 모바일 페이지로 가도록 포워딩 하는 방식을 작업했었다.

그당시에는 찾아 보다가 스크립트를 이용한 방식으로 작업을 진행한 적이 있다.

 

var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
if (mobile == true) {
location.href="모바일페이지";
}

 

 

대략 이런식으로 작업했던 기억이 있다.

하지만 요즘엔 미디어쿼리가 대세!!

그래서 나의 블로그에는 미디어쿼리를 적용해 보았다. 미디어 쿼리는 브라우저의 사이즈에 따라 스타일이 변경되는

장점이 있기 때문에 해상도가 작은 컴퓨터나 기기등 다양하게 적용이 가능하다.

단 CSS노가다를 해야한다는 점이 힘들긴하다.

일단 480 사이즈와 내가 아이폰을 사용하기 때문에 380정도의 사이즈 이렇게 2가지 스타일을 더 작업하였다.

처음에는 480이하 사이즈만 적용을 하려고했지만 나의 아이폰으로 테스트한 결과 화면이 더 작다는 문제...

더불어 아이폰에서 사용하고 있는 사파리는 다른 브라우저와 웹표준부분에서 차이가 있어 따로 380사이즈를 적용하였다.

미디어 쿼리는 CSS부분에 원하는 사이즈를 지정해 놓고 그안에 스타일을 적용하면된다.

 

@media all and (max-width: 480px){

적용할 스타일 ( 예: .table{background:#dddddd} )

}

 

이런식으로 진행해 주면된다. 하면서 깨닳은 점은 기존에 써있는 스타일을 없애기 위해선 반드시 지정을 해줘야 된다는점

예를 들어 margin:5px 를 넣었는데 이것이 필요 없다고 지우면 그대로 남아있다. 그 이유는 기존에 있는 스타일은 그대로

가져다 쓰고 수정할 부분만 추가해 주는 방식이기 때문이다.

따라서 mrgin:0px; 로 수정해 주어야지 없어 진다는 점..

스타일 적용을 완료했으면 스타일시트를 링크하는 페이지에 다음과 같은 매타태그를 입력해 줘야지 사용이 가능하다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
<title>:: 진리닷컴 - Zinlee.com ::</title>
<link rel="stylesheet" href="./css/common.css" type="text/css" media="all">
<link rel="stylesheet" href="./css/common_mobile.css" type="text/css" media="all">

 

아직 완벽하게 적용한 것은 아니다. 완벽하게 하기 위해선 기기별로 테스트를 해 보아야 하기 때문에 일단은 아이폰4에만

맞게 작업을 해 놓았다.

시간나는대로 미디어 쿼리에 대한 정보를 정리해 두어야 겠다.

게시판과같이 작성 페이지에서 엔터를 치지 않고 길게 글을 작성 후 DB에 저장한 뒤 다시 불러올 경우

엔터값이 없으면 지정한 with값을 무시하고 글이 길어 지는 경우가 있다.

IE도 버전별로 방법이 다르고 브라우저 별로도 다르기 때문에 브라우저 별로 작성해 주어야 한다.

 

보통 게시판 뷰 화면의 pre태그에 많이 사용하는 방법이다.

 

화면을 감싸는 테이블은 사이즈 지정 후 table-layout:fixed; 속성을 주어야 한다.

어떤 브라우저인지는 기억이 나지 않지만 해당 속성을 테이블에 주지 않을 경우 적용이 안되는 브라우저가 있다.

 

그리고 줄바꿈을 하려는 태그에는 다음과 같은 스타일을 적용해 주자!

 

 

board_view{

white-space: pre-wrap;

white-space: -pre-wrap;

white-space: -o-pre-wrap;

word-break: break-all;

table-layout:fixed;

}

 

 

첫번째 줄은 기본 CSS3 태그이고, 두번째줄과 세번째줄은 오페라브라우져이다.

네번째줄은 IE구버전과 파이어폭스 구버전, 다섯번째줄은 IE버전과 사파리, 마지막 줄은 파이어폭스 스타일이다.

자주 사용하지만 항상 사용하려고 보면 찾게 되는 스타일 중에 하나이다.

-- 락이 걸려있는 테이블을 조회한다 --

SELECT vo.session_id,do.object_name, do.owner, do.object_type,do.owner, 
vo.xidusn, vo.locked_mode 
FROM v$locked_object vo , dba_objects do 
WHERE vo.object_id = do.object_id
;

 

-- 락이 걸려있는 테이블이 몇개인지 확인한다 --

SELECT count(*)
FROM v$locked_object vo , dba_objects do 
WHERE vo.object_id = do.object_id

select a.sid, a.serial#
from v$session a, v$lock b, dba_objects c
where a.sid=b.sid and
b.id1=c.object_id and
b.type='TM' 
;

 

-- 해당되는 테이블 락을 해제시킨다 --

alter system kill session '10,23779';
alter system kill session '14,22484';
commit;

1. 디비링크 생성

create [public] database link 링크이름

connect to 원격디비 아이디 identified by 원격디비 비밀번호

using ‘TNS명’

public : public 을 사용하면 공용 디비링크가 생성된다.

사용하지 않으면 생성한 사용자만 사용이 가능하다.

* NLS_CHARACTER_SET이 동일하지 않으면 한글이 깨져서 보인다.

예) create public database link linkWebHR

connect to ksprg identified by pw1234

using ‘WEB_HR’

2. 디비링크 사용

select * from table@링크이름

예) select * from table@linkWebHR

3. 디비링크 삭제

drop public database link 생성된 링크명칭

* 디비링크 현황

select * from all_db_links;

요즘은 대부분 스프링 프레임워크를 사용하지만 예전에 작업된 싸이트나 아직 스트럿츠를 사용하는 곳도 간혹 있다.

간단하게 스트럿츠에서 제공하는 태그에 대해 정리해본다.

 

 

1. if , else , elseif

- 기본적 if구문

<s:if test="1==1">1=1이 참일 경우 나타남</s:if>

 

2. append

- 여러 리스트를 하나의 iterator로 묶어줌 (첫번째 리스트에 두번째리스트가 합쳐진 형태)

<s:append id = "totalList">

<s:param value="%{list1}"/>

<s:param value="%{list2}"/>

</s:append>

<s:iterator value="%{totalList}">

<s:property/>

</s:iterator>

 

3. generator

- val 속성 값으로 iterator를 생성

cf) separator - 구분자

count - 최대요소수

<s:generator separator="," val="%{'aaa,bbb,cc,dd'} count="3">

<s:iterator>

<s:property/>

</s:iterator>

</s:generator>

cf) 결과.. aaa,bbb,ccc

 

4. merge

- 여러리스트를 하나의 iterator로 묶음 (첫번째리스트의 첫번째아이템, 두번째리스트 의 두번째아이템, 다시 첫번째리스트의 두번째 아이템 순서로 합쳐짐 )

<s:merge id= "totalList">

<s:param value="%{lsit1}"/>

<s:param value="%{list2}"/>

</s:merage>

<s:iterator value="%{totalList}">

<s:property />

</s:iterator>

 

5. sort

- 태그속성으로 설정되는 comparator를 사용하여 목록을 정렬하는 태그

예) list 에 {b,a,c}를 저장하고 comparator를 사용 정열하면 {a,b,c}가 됨

<s:sort comparator="myComparator" source ="list">

<s:iterator>

<s:property/>

</s:itertator>

</s:sort>

 

6. subset

- iterator의 서브셋을 취하는 태그

cf) count - subset iterater에 담을 요소의 수

start - 시작 인덱스값(0부터)

decider - 메소드사용시 메소드 명

<s:subset source="list" count="3" start ="3">

<s:iterator>

<s:property/>

</s:iterator>

</s:subset>

 

7. a

- HTML 의 <a href =""/>태그

<s:url id="test" action="link"></s:url>

<s:a href="${test}">링크</s:a>

 

8. action

- jsp에서 직접 액션을 호출

cf) executeResult-리절트

실행여부

<s:action name="action1" executeResult="true"/>

 

9. bean

- 자바빈 규정에 따라 클래스를 인스턴스화

<s:bean name="com.bean.User" id="user">

<s:param name="first" value="'a'"/>

<s:param name="last" value="'b'"/>

first : <s:property value="first"/>

last: <s:property value="last"/>

</s:bean>

<br/>

first :<s:property value="#user.first"/>

last:<s:property value="#user.last"/>

 

10. date

- date형식 가져오기

<s:date name="currDate" format="yyyy-MM-dd hh:mm:ss"/>

 

11. debug

- debug하이퍼 링크를 출력링크를 클릭하면 밸류스택의 내용과 스택 컨텍스트 내용을 출력

<s:debug/>

 

12. i18n

- 리소스 번들을 얻고 그 내용을 벨류 스택에 저장한다(미리 리소스 번들에 "abc= 가나다" 라고 만들어 둠)- 국제화

<s:i18n name="example.i18n.myBundle">

리소스 번들예제 <s:text name= "abc"/>

</s:i18n>

 

13. include

- jsp include 역활

<s:include value="includeTag1.jsp">

<s:param name="a" value="'abc'"/>

</s:indclude>

 

14. param

- 파리미터로 사용

<s:param name="a" value="'a'"/>

<s:param name="a">a</s:param>

 

15. push

- 밸류스택 안에 값을 저장한다

<s:push value= "user">

first:<s:property value="first"/>

se<s:property value="se"/>

</s:push>

 

16. set

- 특정 스코프의 변수에 값을 할당

<s:set name="a" value="user.first" scope="session"/>

<s:porperty value="#a"/>

 

17. text

- i18n 텍스트 메시지를 렌더링

i18n예 참고

url

url생성

param 태그사용가능

<s:url id="a" value="/jsp/a.jsp">

<s:param name="id" value="'a23'"/>

</s:url>

 

18. propery

- 프로퍼티값을 출력

cf) value값을 지정안하면 밸류스택의 맨 위의 값을 취함

<s:property value="a"/><s:property />

서버에 수정 권한이 없어 TNS설정을 하지 못할 경우 DB에서 바로 DB링크를 사용하는 방법을 사용한다.

 

create database link 링크이름
       connect to 원격디비 아이디 identified by 원격디비 비밀번호
       using
      '(DESCRIPTION=
             (ADDRESS=
             (PROTOCOL=TCP)
             (HOST=원격디비아이피)
             (PORT=1521))
             (CONNECT_DATA=
                  (SID=orcl)
 

             ) 

       )'
 

DB링크와 방식은 같지만 TNS설정이 없기 때문에 바로 DB링크를 걸때 TNS정보를 입력해 준다.

오라클에서 데이터를 뽑아올 때 if문과 같이 조건에 따라 값을 정할 수 있는 함수가 DECODE 함수이다. 

 

적용 쿼리)

decode(검색컬럼, 조건1, 결과값1,..., 기본값 )

  

    

예) 

select   

      count(decode(to_char(hiredate,'mm'), '01', 1)) "1월",
      count(decode(to_char(hiredate,'mm'), '02', 1)) "2월",
      count(decode(to_char(hiredate,'mm'), '03', 1)) "3월",
      count(decode(to_char(hiredate,'mm'), '04', 1)) "4월",
      count(decode(to_char(hiredate,'mm'), '05', 1)) "5월",
      count(decode(to_char(hiredate,'mm'), '06', 1)) "6월",
      count(decode(to_char(hiredate,'mm'), '07', 1)) "7월",
      count(decode(to_char(hiredate,'mm'), '08', 1)) "8월",
      count(decode(to_char(hiredate,'mm'), '09', 1)) "9월",
      count(decode(to_char(hiredate,'mm'), '10', 1)) "10월",
      count(decode(to_char(hiredate,'mm'), '11', 1)) "11월",
      count(decode(to_char(hiredate,'mm'), '12', 1)) "12월",
      count(*) "전체"
from  

      emp
where  

      to_char(hiredate,'mm') >= '01'  

      and to_char(hiredate,'mm') <= '12';  

+ Recent posts