안녕하세요 오늘은 사이트메쉬라는 프레임워크를 알아보도록하겠습니다.

새로운 임무를 부여받고 소스를 분석하는 중에 완전 기똥찬 프레임워크를 하나 발견해서 감동하고 눈물납니다.

어여 개발해 봅시다.


공통단을 빼기 위해 기존의 include로 삽질했던 것들을 이제는 sitemesh라는 프레임워크를 사용함으로써 너무 쉽게 처리 할 수 있었음을 알 수 있었습니다.


아래 내용을 보면서 설정 및 사용해 보자.




maven update

더보기



decorators.xml

더보기



sitemesh.xml

더보기



layout.jsp

더보기

PHP에서 소켓 통신을 하려면, 먼저 소켓을 지원할 수 있도록 모듈을 추가해야 한다.

php.ini 파일을 열어 아래 라인을 수정.
;extension=php_sockets.dll

-> 맨 앞의 ;(세미콜론)을 삭제하고 웹서버(아파치)를 재시작 하도록 하자!

※ 참고. 리눅스에서는 다시 컴파일을 시도해야할 수도 있음.

1. 소켓 생성
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

2. 서버 접속
define("IP", "127.0.0.1");
define("PORT", 3122);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
sock_connect($sock, IP, PORT);

3. 데이터 보내기
define("IP", "127.0.0.1");
define("PORT", 3122);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
sock_connect($sock, IP, PORT);
$data = 'Hello Socket';
sock_write($sock, $data, strlen($data));

<?php
// 제거할 태그들
unset($tag
);
$tag[] = 'form'
;
$tag[] = 'iframe'
;
$tag[] = 'meta'
;
$tag[] = 'object'
;
$tag[] = 'script'
;
$tag[] = 'style'
;
$tag[] = 'textarea'
;
.
.
.
$tags implode('|',$tag
);

// 제거 함수
function stripTags(&$str,&$tags
)
{
  
$str eregi_replace('</?('.$tags.')[^>]*>','',$str
);
  return 
$str
;
}
?>

'웹 프로그래밍 > PHP' 카테고리의 다른 글

소켓통신  (0) 2011.12.14
웹을 공부해 보자 PHP- PEAR()를 이용한 프로그래밍~  (0) 2010.06.18
ㅋㅋ 간만입니다. 요즘술과의 전쟁때문에 블러그를 마니 다루줄 못했습니당 ㅎㅎ
이클립스가 깔렸다는 전제하에 시작하겠습니.

1. web.xml에 파일을 연다
<context-param>
        <param-name>adminEmail</param-name>
        <param-value>XXXX@nate.com</param-value>
    </context-param>
    <servlet>
        <servlet-name>Init</servlet-name>
        <servlet-class>InitServlet</servlet-class>
        <init-param>
            <param-name>email</param-name>
            <param-value>XXXX@email.net</param-value>
        </init-param>
    </servlet>
--- 다음과 같이 셋팅을 합니다.
2. 소스를 엽니다.

1) ServletConfig config = this.getServletConfig();
    email = config.getInitParameter("email");
       
2) ServletContext context = this.getServletContext();
    String adminEmail = context.getInitParameter("adminEmail");
    context.setAttribute("adminEmail", adminEmail);
1) config 정보를 바인딩 하기위한 초기화 과정입니다.
2) context 정보를 바인딩 하기위한 초기화 과정입니다.

3. 바인딩응용편!
ServletContext context = this.getServletContext();
String adminEmail = (String)context.getAttribute("adminEmail");

위와 같이 context 객체를 선언하여 getAttribute 메소드를 이용하여 바인딩된 정보를 가지고 와서
클라이언트에 뿌리듯, DB에 저장하듯 하면 될듯!!!


ps. 요즘은 글쓸시간이 별로 없네요 ㅠㅠ 앞으로 자주 블러그 업글좀 해야 겠네요.




PEAR() 레퍼런스는 디자인 + 코딩 부분을 구별하여 제작할 수 있어서 좋다.
허나 블럭을 잘 알아야 한다.

아래 소스를 보자. 다음 멤버 테이블에 카드 부분을 피어로 뿌리는 소스이다.

$sql = "SELECT * FROM MEMBER ";

$res = $db->query($sql);
if (PEAR::isError($db)) {
die($db->getMessage());
}


while ($res->fetchInto($row)) {
if (!$tpl->setCurrentBlock("row")) Error("setCurrentBlock"); // 블럭 시작 부분이다.
$tpl->setVariable("CARD"      , $CARD);

$tpl->parseCurrentBlock("row");                                    // 블럭 끝 부분이다.
if (!$tpl->parse("row")) Error("parseCurrentBlock");         // 블럭의 에러를 검출하는 부분
}

   $tpl->show(); // 블럭한 부분을 화면에 보여준다.

다음은 디자인 부분을 보자
<html>
<link href="../css/global.css" rel="stylesheet" type="text/css">

<table width="720" cellpadding="5" cellspacing="1" bgcolor="cccccc">
  <!-- BEGIN row --> // 블럭 시작 부분
  <tr>
    <td width="80" align="center" bgcolor="ffffff"> {CARD}</td>

  </tr>
  <!-- END row -->  // 블럭 끝 부분
</table>
</html> 

거두 절미 하게 필요한 부분만 남기고 지워버렸다. 위에서 보는것과 같이 블럭 시작 부분에서는 row라는 변수로 파싱을 하기 위해 소스에 진하게 칠한 부분과 이름을 동일하게 해야 값이 올바르게 출력되는것을 알 수 있다.
이제까지 피어 프로그래밍에 대해서 공부해 보았다. 사실 PHP는 겉 핧기 식으로 공부했기 때문에 완벽하게 잘하진 못한다. 하지만 배우면 배울수록 재밌는것 같다.
물론 웹에서 가장 중요한 것은 프로그래밍 기술도 필요하지만 정규화된 데이터베이스 설계와 해당 데이터베이스 테이블에 값을 얼마나 효율적으로 보여주느냐에 따라서 실력 차이가 나는것 같다.
공부를 하면서 느끼는 것이지만 역시 학교다니던 시절 자료구조, 알고리즘 파트가 얼마나 중요한 과목인지 다시한번 생각하게 만드는 계기가 된 것 같다. 







'웹 프로그래밍 > PHP' 카테고리의 다른 글

소켓통신  (0) 2011.12.14
특정 태크 제거 소스.  (0) 2011.12.14

아침부터 일어나 문뜩 커스텀태그를 꼭 올려야 겠다는 사명감이 불타 이렇게 올리게 된다.

1. 커스텀 태그는 태그를 자신이 직접 정의할 수 있으며, 반복적으로 사용되는 기능을 만들어두면 그대로 가져다 쓸 수 있으므로 매우 편리하다. 커스텀 태그는 다음과 같은 흐름을 가지고 있다.

2. JSTL은 자주 사용되는 커스텀 태그를 모아놓은 것들이며, 기본적인 기능들은 우리가 힘들게 커스텀태그로 만들지 않더라도 JSTL에서 제공해준다.
JSTL 다운로드 사이트 주소 : http://jakarta.apache.org/

3. EL은 Expression Language로 표현 언어를 의미하며 복잡한 자바 코드로 표현하는 대신 다른 표현 기호를 사용한다. 그 외 다양한 연산자와 많은 내장 객체를 지원하므로, EL을 사용하면 코드의 가독성을 높일 수 있다.
EL 사용 예 : <%=hello%>의 코드를 ${hello}로 표현할 수 있다.

처음에 웹프로그래밍을 공부하기전에는 태그라는 말에 문뜩 아 html태그같은거구나 했지만 막상 공부하고 나니전혀 딴판이였다. 일종에 셀프로그래밍 정도??? 암튼 공부를 하면할수록 신기하고 재밌다.

[참고도서] jsp 2.1 혜지원

'웹 프로그래밍 > JSP' 카테고리의 다른 글

커넥션 풀을 이용한 DB연결 방법  (0) 2010.06.04
커스텀 태그  (0) 2010.06.04
jsp + 서블릿을 이용한 DB설정 방법.  (0) 2010.06.04
jsp 환경설정~^^  (0) 2010.05.30

커넥션풀은 데이터베이스와 연결된 connection 객체를 미리 생성하여 풀(Pool)속에 저장 해두고 필요할 때마다 이 풀에 접근하여 connection 객체를 사용하고, 모두 사용하였다면 다시 반환하는 것을 말한다.

커넥션풀의 장점
커넥션풀을 사용하면 풀속에 미리 커넥션이 생성되어 있기 때문에 커넥션을 생성하는데 드는 연결 시간이 소비되지 않는다. 또 커넥션 재사용이 가능하기 때문에 사용자가 접속할 때마다 계속해서 커넥션을 생성할 필요가 없다. 즉, 커넥션 풀을 사용한다면 프로그램 효율과 성능이 전체적으로 증가하게 된다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>

<%
 Connection con = null;
 PreparedStatement pstmt = null;
 ResultSet rs = null;
 
 try
 {
  Context initCtx = new InitialContext();
  Context envCtx = (Context) initCtx.lookup("java:comp/env");
  DataSource ds = (DataSource)envCtx.lookup("jdbc/test");
  con = ds.getConnection();
  
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
 finally
 {
  if(rs != null)try{rs.close();}catch(SQLException sqle){}
  if(pstmt != null)try{pstmt.close();}catch(SQLException sqle){}
  if(con != null)try{con.close();}catch(SQLException sqle){}  
 }
 %>





이것은 커넥션 풀이 사용되는 구조이다. 사용자가 웹 사이트에 접속하면 서버는 커넥션 풀에서 커넥션 객체를 얻어와서 데이터베이스에 접속하여 데이터베이스 작업을 수행한다. 수행을 완료하였다면 커넥션 객체를 다시 커넥션 풀로 반환하는 작업을 한다. 커넥션 풀은 이 같은 구조로 이루어져있기 때문에, 웹 사이트 접속시 매번 커넥션 객체를 만들어 사용하는 것보다 효율적이다.

참고서적 : 기초에서 활용까지 JSP 2.1 [혜지원]

'웹 프로그래밍 > JSP' 카테고리의 다른 글

커스텀태그 Key-Point  (0) 2010.06.04
커스텀 태그  (0) 2010.06.04
jsp + 서블릿을 이용한 DB설정 방법.  (0) 2010.06.04
jsp 환경설정~^^  (0) 2010.05.30

진하게 표시된 부분을 유념해야 해야 한다. 저부분이 프리픽스 되어 있지 않으면 아무리 set var나 out value를 쳐도 값을 가져오지 못한다. 처음에는 링크가 되어 있어서 아무생각없이 지워버리고 열심히 실행해 보았지만 되질 않아서 내가 뭘 잘못했나 하고 계속 눈을뜨고 찾아본 결과 어이없게 하이퍼링크되어 있는 저 링크가 꼭 있어야 실행된다는 사실을 뒤늦게 깨닫고 삽질에서 벗어날 수 있었다.


<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>간단한 테스트 입니다.</title>
</head>
<body>
결과 : <c:set var="result" value="${requestScope.result}"/>
<c:out value="${result}" />

 </body>
</html>


'웹 프로그래밍 > JSP' 카테고리의 다른 글

커스텀태그 Key-Point  (0) 2010.06.04
커넥션 풀을 이용한 DB연결 방법  (0) 2010.06.04
jsp + 서블릿을 이용한 DB설정 방법.  (0) 2010.06.04
jsp 환경설정~^^  (0) 2010.05.30

+ Recent posts