Context라는 개념은 정말 정말 최고로 잘 만들어놓은 개념이 아닌가 싶다.

AppletContext, XletContext, MidletContext, ActionContext 라는 용어..

 

Webwork에서는 ActionContext를 이용하여 Context객체를 얻어오면, 많은 일을 할 수 있다.

그중의 샘플로 파라미터 받기..

 

 

String[] params = (String[])(ActionContext.getContext().getParameters().get("turtle"));
String userName = "";
if (params != null) {

    userName = params[0];

}

 

 

사실 스트러츠1과 비교해 볼때, 파라미터로 받지 않고, Context로 받는 것외엔 다른 점은 없다.

Posted by '김용환'
,

하도 Webwork쪽 가이드를 안하다 보니. 다 까먹는다.. 평상시에 좋은 팁있으면 올려야곘다.

 

 

    <action name="search" class="com.google.search.SearchKorea">  

       <result name="success" type="chain">SearchInUSA</result>  

       <result name="fail" type="dispatcher">/monitor/showdefault.jsp</result>  

    </action>  

 

패키지 이름이 "/"라고 가정하면.

 

search라는 Action이 호출될 떄, 바인됭 클래스 (com.google.search.SearchKorea)를 실행시켜서 return 결과값에 맞춰 동작을 시키는데.

 

chain은 보통 Action을 호출한다. (이는 스트러츠 1과 비슷하도록 한 것)

그리고, 실패하면 단순히 jsp를 호출하도록 한다.

 

 

chain type은 Action을 다시 호출할 수 있다. 그러나 dispatcher type은 jsp를 호출한다.

 

 

참고로 .. Action 잘못 호출하면.. 이렇게 된다. 무한 반복 회출될 수 있다..

서로가 서로를 호출하는 구조가 되지 않도록 한다.

 

com.opensymphony.xwork.XworkException: infinite recursion detected
 at com.opensymphony.xwork.ActionChainResult.execute(ActionChainResult.java:137)
 at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:312)
 at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:207)
 at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
 at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:233)

 

 

Posted by '김용환'
,

java jstl에서 c.tld 파일

web 2008. 4. 5. 08:26

머 다 아는 거지만, 오랜만에 jsp 코딩때문에 해맸다.

c.tld 파일이 없다라는 에러였다..

 

 

과거에는 jsp에서 jstl 의 core 를 사용하려면

 

  1. WEB-INF/web.xml에 deployment descriptor에 추가


  1.      <taglib>
           <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
           <taglib-location>/WEB-INF/tlds/c.tld</taglib-location>
         </taglib>

 

다음과 같은 작업을 했었다.

 

하지만, jstl standard (standard-1.1.2.jar)를 classpath로 잡으면 . 굳이 web.xml에 포함하지 않아도 된다.

 

그 이유는 standard-1.1.2.jar파일의 META-INF 디렉토리 안에. 각종 TLD 파일이 존재하는데. 그중에 c.tld 파일이 존재한다.

그래서, 굳이 tomcat의 web.xml파일안에 태그 라이브러리 선언이 없어도 된다.

 

 

Posted by '김용환'
,

 

 

static void parse_cookie(const char *cookies, char *value, const char *key);

 

사용하기

parse_cookie(cookies, value, "GOOGLE-LOGIN");

 

다음은 코드..

 

 

 

#include <stdio.h>

  

static void parse_cookie(const char *cookies, char *value, const char *key)

{

  register const char *p;

  int key_len;

 

  if (!cookies) return;

 

  p = cookies;

  key_len = strlen(key);

 

  while (*p) {

    const char *name;

    while (*p == ' ' || *p == ';') p++;

    name = p;

    do {

      if (*p == '\0') break;

      p++;

    } while (*p != '=');

    if (p - name == key_len && !strncmp(key, name, key_len)) {

      register char *c = value;

      p++;

      do {

        if (*p == '\0' || *p == ' ' || *p == ';') break;

        *c++ = *p++;

      } while (*p != ' ' && *p != ';');

      *c = '\0';

      return;

    }

    else {

      do {

        if (*p == '\0' || *p == ' ' || *p == ';') break;

        p++;

      } while (*p != ' ' && *p != ';');

    }

  }

}

 

 

 

Posted by '김용환'
,

jsp내에서 태그라이브러리 사용시 중요한 점.

 

잘못된 경로를 사용하면 EL을 사용할 수 없다.

<%@ taglib uri=http://java.sun.com/jstl prefix="c" %>

 

따라서 올바른 uri 경로를 사용하면 된다.

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

 

 

 

Posted by '김용환'
,

 

출처 : http://hc.apache.org/httpclient-3.x/cookies.html

 

쿠키 스펙은 RFC2109 RFC2965에 정의되어 있다.

HTTP Client를 이용해서 다음과 같이 사용이 가능하다.

 

 

        HttpClient client = new HttpClient();
        HttpMethod method = new GetMethod("http://www.google.com/");
            method.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
            method.setRequestHeader("Cookie", "NND=qfeqve1;login=123gd3rth");

 

이렇게 사용하면, 쿠키 테스트를 쉽게 할 수 있다.

 

 

Posted by '김용환'
,

 

HTTPD –L은 다음과 같습니다.

 

-L          Output a list of directives together  with  expected  argu-ments and places where the directive is valid.

 

[e61128 /usr/local/apache/bin]# httpd -L > module

11.txt 참조하세요.

아파치에서 사용하는 directivedirective를 포함하는 모듈과의 상관관계와 설명이 나와있습니다.

 

 

 

Httpd –l static module list를 알려주는 것입니다.

-l          Output a list of modules compiled into the server.

 

[e61128 /usr/local/apache/bin]# httpd -l

Compiled in modules:

  core.c

  mod_access.c

  mod_auth.c

  mod_include.c

  mod_log_config.c

  mod_env.c

  mod_setenvif.c

  prefork.c

  http_core.c

  mod_mime.c

  mod_status.c

  mod_autoindex.c

  mod_asis.c

  mod_cgi.c

  mod_negotiation.c

  mod_dir.c

  mod_imap.c

  mod_actions.c

  mod_userdir.c

  mod_alias.c

  mod_so.c

 

 

우리가 보던 설정파일 httpd.conf의 내용중 Dynamic Shared Object는 위의 httpd –l 리스트에 나오면 안나오도록 설계가 되어 있죠.

 

#

# Dynamic Shared Object (DSO) Support

#

# To be able to use the functionality of a module which was built as a DSO you

# have to place corresponding `LoadModule' lines at this location so the

# directives contained in it are actually available _before_ they are used.

# Statically compiled modules (those listed by `httpd -l') do not need

# to be loaded here.

#

# Example:

# LoadModule foo_module modules/mod_foo.so

#

Include conf/mod_charset.conf

Include conf/mod_deflate.conf

Include conf/mod_dosevasive20.conf

Include conf/mod_headers.conf

Include conf/mod_jk.conf

Include conf/mod_proxy.conf

Include conf/mod_proxy_connect.conf

Include conf/mod_proxy_ftp.conf

Include conf/mod_proxy_http.conf

Include conf/mod_rewrite.conf

Include conf/mod_security.conf

Include conf/mod_url.conf

 

 

, LoadModule.conf파일의 경우는 Load를 하되. Load가 되면, forcecharset을 먹이라는 뜻이죠.

LoadModule charset_module     modules/mod_charset.so

 

<IfModule mod_charset.c>

        ForceCharset KSC5601

</IfModule>

 

모듈 리스트에는 mod_charset.c이 포함되어 있습니다.

[e61128 /usr/local/apache/modules]# ll

ÇÕ°è 1388

drwxr-xr-x   2 www www   4096  8¿ù 31 15:45 .

drwxr-xr-x  15 www www   4096  8¿ù 31 15:45 ..

-rw-r--r--   1 www www   8504  8¿ù 31 15:44 httpd.exp

-rwxr-xr-x   1 www www  26687  8¿ù 31 15:45 mod_charset.so

-rwxr-xr-x   1 www www  22892  8¿ù 31 15:45 mod_comicsession2.so

-rwxr-xr-x   1 www www  38228  8¿ù 31 15:45 mod_deflate.so

-rwxr-xr-x   1 www www  36115  8¿ù 31 15:45 mod_dosevasive20.so

-rwxr-xr-x   1 www www  35061  8¿ù 31 15:45 mod_headers.so

-rwxr-xr-x   1 www www 462702  8¿ù 31 15:45 mod_jk.so

-rwxr-xr-x   1 www www 177095  8¿ù 31 15:45 mod_nvidsession.so

-rwxr-xr-x   1 www www  96087  8¿ù 31 15:45 mod_proxy.so

-rwxr-xr-x   1 www www  26845  8¿ù 31 15:45 mod_proxy_connect.so

-rwxr-xr-x   1 www www  67218  8¿ù 31 15:45 mod_proxy_ftp.so

-rwxr-xr-x   1 www www  64674  8¿ù 31 15:45 mod_proxy_http.so

-rwxr-xr-x   1 www www 115709  8¿ù 31 15:45 mod_rewrite.so

-rwxr-xr-x   1 www www 152415  8¿ù 31 15:45 mod_security.so

-rwxr-xr-x   1 www www  21083  8¿ù 31 15:45 mod_url.so

 

만약 mod_charset.so 파일이 없는 상태에서, httpd restart를 하면 다음의 결과가 나옵니다.

[e65004 /usr/local/apache/modules]# mv mod_charset.so mod_charset1.so

[e65004 /usr/local/apache/modules]# ../bin/httpd -k graceful

Syntax error on line 2 of /usr/local/apache/conf/mod_charset.conf:

Cannot load /usr/local/apache/modules/mod_charset.so into server: /usr/local/apache/modules/mod_charset.so: cannot open shared object file: No such file or directory

 

참고하세요.

 

결론은

, 정적인 모듈은 httpd –l 로 확인할 수 있고, 동적인 모듈은 LoadModule시 에러가 나지 않으면 동적으로 로딩됨을 확인이 가능합니다.

 

l  혹시 잼난거 있으면 서로 공유해요~~

 

Manual httpd는 아래의 주소를 참조했습니다.

http://www.hmug.org/man/8/httpd.php

Posted by '김용환'
,

아파치에서 서비스를 막고, 특정 페이지만 다로 403, 404 페이지를 보여주기..

 

Location 태그를 이용하면 된다.

 

 

 

 

 <Location ~ "wt.nhn">
    Order deny,allow
    Deny from all
    ErrorDocument 403 /common/under/wt_under.html
    ErrorDocument 404 /common/under/wt_under.html
</Location>

 

 

 

이와는 별개로 사실은 다른 시도가 있었다.

 

SetEnv FOO 1

SetEnvIf FOO 1 under

 

<File ~ (*.txt)>

     Order deny,allow
    Deny from env=under
    ErrorDocument 403 /common/under/wt_under.html

</File>

 

이렇게 해보려고 했다.

 

실제 어떤 property를 apache에서 지정하고, 해당되는 변수의 값으로 먼가를 하려고 했지만.. 할 수 없는 구조이다.

그것은 아파치는 실제 그런 기능이 없다. (-D로 주는 property를 제외하고는...)

 

SetEnv의 역할은 environment variable, 즉 환경변수만을 지정할 뿐이다.

SetEnvIf의 역할은 HTTP Request Header에서의 필드만을 Filter만 할 뿐..

 

SetEnv와 SetEnvIf는 전혀 상관성이 없었다.

 

이외.

 

PassEnv라는 것이 있었으나.

이것은 shell에서의 환경변수만을 그대로 아파치에게 넘겨주는 것뿐이니...

 

참조할 것.

 

Property를 주는 것은 httpd를 띄울 때 -D 에 넣어서 실행시켜야 한다. 아니면, httpd.conf 파일을 약간 수정할 것~^^

 

 

 

'web' 카테고리의 다른 글

HTTPClient에서의 Cookie 사용하기  (0) 2008.03.26
아파치에서 동적, 정적 모듈 확인하기.  (0) 2007.12.11
subversion 설치 스크립트  (0) 2007.12.04
php 설치 스크립트  (0) 2007.12.04
php, asp, jsp 확장자 바꿔보기  (0) 2007.12.04
Posted by '김용환'
,

subversion 설치 스크립트

web 2007. 12. 4. 20:20

 #!/bin/csh

set WWW_HOME="/home/www"
set SRC_HOME="${WWW_HOME}/src"

echo ">> Install Subversion"
cd ${SRC_HOME}
\rm -rf subversion*

# subversion을 깔기 위해서는 apr,apr-util library가 필요하다.
# 혹시 예전 버젼이면,  다음을 사용하라
# wget http://ftp.kaist.ac.kr/pub/Apache/apr/apr-0.9.17.tar.gz
# wget http://mirror.apache-kr.org/apr/apr-util-0.9.15.tar.gz
# 만약 apr을 설치하면, .configure가 바뀌어 진다....
# ./configure --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
wget http://subversion.tigris.org/downloads/subversion-1.4.3.tar.gz
tar zxf subversion-1.4.3.tar.gz
cd subversion-1.4.3
chmod 755 configure
./configure
make
sleep 1
make install

Posted by '김용환'
,

php 설치 스크립트

web 2007. 12. 4. 20:19

 #!/bin/csh

set WWW_HOME="/home/www"
set SRC_HOME="${WWW_HOME}/src"
set SCRIPT_HOME="${WWW_HOME}/script"
set PHP_VERSION="5.1.0"
set APACHE_HOME="/usr/local/apache2"
set MYSQL = "$1"

wget http://xmlsoft.org/sources/libxml2-2.6.13-1.i386.rpm
wget http://xmlsoft.org/sources/libxml2-devel-2.6.13-1.i386.rpm
wget http://xmlsoft.org/sources/libxml2-python-2.6.13-1.i386.rpm

rpm -Uvh ./libxml2-*

echo ">> Install PHP ${PHP_VERSION}"
cd ${SRC_HOME}
\rm -rf php-${PHP_VERSION}
tar zxf php-${PHP_VERSION}.tar.gz
cd php-${PHP_VERSION}
chmod 755 configure
./configure --prefix=/usr/local/php --with-regex=php --with-apxs2=/usr/local/apache/bin/apxs --with-exec-dir=/usr/local/apache/bin --with-config-file-path=/usr/local/apache/conf --with-language=korea --with-charset=euc_kr --enable-track-vars=yes --enable-ftp  --with-zlib --with-gd
make
sleep 1
make install

Posted by '김용환'
,