[JSP] Scriptlet

Java 2014. 8. 26. 17:38

JSP 에서 html 코드내에 Java 코드를 삽입하는 Scriptlet 기술에 대해 간략히 알아보자.

  • Scriptlet
    • 스크립틀릿은 JSP 에 쓰이는 기술이다.
      • JSP는 HTML기반에 자바코드가 결합되어 있으며, 스크립틀릿인 부분은 웹서버에서 실행되고 그 결과만 웹 브라우져로 전송된다.
    • 스크립틀릿은 JSP 파일내에 <% %>으로 구성되며, 그안에는 자바 코드를 기입할 수 있다.
    • 표현식
      • <%@ %> : 지시자(page, include, taglib)
      • <% %>   : 스크립틀릿
      • <%= %> : 표현식
        • 자바식 이 대입될수 있고 자바식은 상수나 변수 이름, 연산자를 포함한 식 또는 리턴 값이 있는 메서드 호출식이 될 수도 있다.
    •  예제

      • java.util.Calendar 클래스를 import로 추가 하여 <%%> 안에서 Java 로 계산 , HTML 에서 <%=> 로 변수값을 출력하는 예제


      • <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

        <%@ page import="java.util.Calendar"%>

        <%

        Calendar calendar = Calendar.getInstance();

        int hour = calendar.get(Calendar.HOUR_OF_DAY);

        int minute = calendar.get(Calendar.MINUTE);

        int second = calendar.get(Calendar.SECOND);

        %>

        <html>

        <head>

            <title>Scriptlet</title>

        </head>

        <body>

          <h1>시간 <%=hour %>시 <%=minute %>분 <%=second %>초.</h1>

        </body>

        </html>


  • JSP(Java Server Page)
    • 자바로 동적 HTML을 만들기 위해 서버에서 실행되는 언어 
    • JSP 구성과 흐름도
      • 4. 웹서버는 jsp 요청이 오면 분석하여 서블릿컨테이너에 요청을 넘긴다
      • 5. 서블릿컨테이너에서는 jsp 파일에 해당하는 서블릿이 있는지 확인하고 없을 경우 jsp 파일을 서블릿으로 컴파일한다.
      • 6. 컴파일된 jsp 는 서블릿으로 변환되어 컨테이너에 적재
      • 8,9. 화면에 보일 내용을 정리해서 html 문서로 클라이언트에 전송
    • JSP/서블릿 컨테이너
      • jsp 요청이 오면 상응하는 서블릿이 처리한다.
      • jsp 요청에 상응하는 서블릿이 없다면 서블릿 컨테이너는 jsp 파일을 서블릿 소스로 변환해서 컴파일하고 서블릿으로 관리한다.
    • 서블릿
      • 웹어플리케이션(자바 웹프로그래밍)
      • 서블릿으로 컴파일된 후에는 메모리에서 처리되기 때문에 많은 사용자 접속도 원할히 처리할 수 있다.
      • jsp또는 다른 서블릿간의 데이터 공유가 쉽다. (page, request, session, application, scope 로 가능)


Posted by leechwin
,

[Browser] Bookmarklet

Web 2014. 8. 23. 00:35

브라우져의 북마크를 응용하는 기술인 Bookmarklet 에 대해 알아보도록 하자.


  • Bookmarklet
    • 북마크(Bookmark)와 애플릿(Applet)의 합성어.
    • 웹브라우저의 북마크를 활용한 작은 어플리케이션
    • 브라우져가 로딩된이후 북마크를 클릭하여 내부 자바스크립트가 동작는 플로우를 가진다.
  • Usage
    • 로딩된 브라우져의 정보를 외부 URL 의 Query 로 날려서 RestAPI 를 호출하거나 Dictionary lookup 등으로 영어사전등으로 활용가능하다.
    • 로딩된 DOM 등의 정보를 얻거나 수정하여 현재 배경화면 색등을 자신의 Theme 으로 변환가능하다.
    • Browser 의 window, document 등의 객체 정보와 외부 REST API 등을 활용한 다양한 방면으로 응용가능하다.


  • Basic
    • Previous knowledge for Bookmarklet
      • 다음과 같은 코드를 Browser 에서는 URL 에 "javascript" prefix 문자를 가진 contents 에 대해서는 자체적으로 파싱해서 처리
      •  <a href="javascript:alert('this is not uri');">link</a>

        Browser에서는 Bookmarklet 의 URL 정보에 기술된 Bookmarklet script 를 page 로드가 완료된뒤에 실행

      • Anonymous function 을 사용하여 namespace 충돌을 방지한다.

    • Simple Bookmarklet

      • 북마크를 클릭하였을경우 현재 브라우져의 엔진정보를 확인하는 북마클릿을 만들어보자.
        • Bookmarklet 생성 및 URI 수정
          • 임의의 북마크를 생성
          • 생성된 북마크를 수정하여 URL 에 다음과 같이 입력

          •  javascript:(function (){ alert(navigator.product);})();  

  • Advanced
    • External javascript library 삽입
      • 현재로딩된 페이지에 새로운 javascript 를 주입하는 기법
      • 기존 code symbol 과의 conflict 에 주의
      • 과한 용량의 파일을 주입하면 페이지가 멈출 수 있다
      •  javascript: (function () {

            var jsCode = document.createElement('script');
            jsCode.setAttribute('src', 'http://path/to/external/file.js');                 
          document.body.appendChild(jsCode);
         }());
    • HTML, Javascript 라이브러리나 REST 라이브러리 등의 테스트에 사용가능
      • Bookmarklet 만 배포 후 외부 URL 로 REST API 에 인자를 전달하여 테스트 가능
      • Cross-browser Test 가능
    • Validator 연동가능
    • 사용자 정의 Theme 가능
      • 사용자가 원하는 Theme 정의 가능
      •  javascript:void(document.body.style.background = 'black');


  • Practice
    • 구글검색기
      •  javascript:(function() {

        function se(d) {
         return d.selection ? d.selection.createRange().text : d.getSelection()
        }
        s = se(document);
        for (i=0; i<frames.length && !s; i++) s = se(frames[i].document);
        if (!s || s=='') s = prompt('Enter%20search%20terms%20for%20Google','');
        open('https://www.google.co.kr' + (s ? '#newwindow=1&q=' + encodeURIComponent(s) : '')).focus();
        })();
    • 메모장
      • Twitter 에 Mike Francis 가 bookmarklet code snippet 을 올린것이 화재
      • https://twitter.com/_mikefrancis/status/469788991668383744
      •  data:text/html, <body contenteditable style="font: 2rem/1.5 monospace; max-width:60rem; margin:0 auto; padding:4rem; ">

    • 게임
      • http://kathack.com/
      •  javascript:var i,s,ss=['http://kathack.com/js/kh.js','http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'];for(i=0;i!=ss.length;i++){s=document.createElement('script');s.src=ss[i];document.body.appendChild(s);}void(0);

    • The Printliminator
      • http://css-tricks.com/examples/ThePrintliminator/



Posted by leechwin
,

[Ubuntu] libssl-dev

OS/Linux 2014. 8. 17. 19:26

 Ubuntu 에서 아파치웹서버나 TLS/SSL 에 관한 서비스 개발등을 이용하려고 할때 다음과 같은 에러가 발생하는 경우가 있다.

  • SSL/TLS libraries were missing or unusable

 이런경우는 SSL 개발에 관련된 라이브러리가 설치가 안되어서 발생하는 문제로 다음 명령어로 libssl-dev

build-essential 패키지를 설치하면 해결이 된다.

  • sudo apt-get install libssl-dev


 libssl-dev 패키지는 SSL 개발에 필요한 라이브러리와 헤더파일등을 가지고 있으며 아래에 링크에 자세한 내용을 살펴 볼수 있다.


'OS > Linux' 카테고리의 다른 글

[Ubuntu] disk usage  (0) 2015.12.20
UNIX TOOLBOX  (2) 2015.08.26
[Ubuntu] build-essential  (3) 2014.08.17
[Ubuntu] Terminal 관련 단축키  (0) 2014.06.08
[Ubuntu] grep 으로 원하는 문자열이 들어있는 파일 검색  (0) 2013.04.23
Posted by leechwin
,