J2EE Servlet 명세에서 인코딩된(content type : application/x-www-form-urlencoded) HTTP PUT 메소드는 지원하지 않기 때문에 폼에 값을 담은 후 PUT으로 서버에 전송할 경우 Command Object 바인딩이 자동으로 되지 않는다.


해결책은 아래와 같다. 


자료 찾느라 열라 고생함 ㅠㅠ 

(아직 spring 기반의 RESTful 서비스가 많지 않아서 그런가? 아님 너무 당연해서 나만 몰랐던 건가?)


출처 : http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html

16.3.3.11 Working with "application/x-www-form-urlencoded" data

The previous sections covered use of @ModelAttribute to support form submission requests from browser clients. The same annotation is recommended for use with requests from non-browser clients as well. However there is one notable difference when it comes to working with HTTP PUT requests. Browsers can submit form data via HTTP GET or HTTP POST. Non-browser clients can also submit forms viaHTTP PUT. This presents a challenge because the Servlet specification requires the ServletRequest.getParameter*() family of methods to support form field access only for HTTP POST, not for HTTP PUT.

To support HTTP PUT requests, the spring-web module provides the filter HttpPutFormContentFilter, which can be configured in web.xml:

<filter>
  <filter-name>httpPutFormFilter</filter-name>
  <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>

<filter-mapping>
  <filter-name>httpPutFormFilter</filter-name>
  <servlet-name>dispatcherServlet</servlet-name>
</filter-mapping>

<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

The above filter intercepts HTTP PUT requests with content type application/x-www-form-urlencoded, reads the form data from the body of the request, and wraps the ServletRequest in order to make the form data available through the ServletRequest.getParameter*() family of methods.


참고 : http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/filter/HttpPutFormContentFilter.html




간단하게 서버 부하를 점검할 수 있는 무료 툴


http://openwebload.sourceforge.net


윈도용은 설치는 따로 필요없고 사용법도 간단함

node.js 설치는 http://finkle.tistory.com/91 글을 참조하세요.


$ cd

$ npm install ejs

$ npm install jade

$ npm install -g express

$ npm list installed


'자바스크립트 > node.js' 카테고리의 다른 글

cygwin에 node.js & npm 설치  (0) 2012.04.25

1. node.js 설치에 필요한 cygwin 패키지 (미설치 상태라면 설치해준다.)

Dev 패키지

  • gcc g++ C++ compiler
  • gcc mingw-g++
  • gcc4-4++ G++ subpackage
  • git
  • make
  • openssl
  • pkg-config
  • zlib-devel
  • Python – install


Web 패키지

  • wget
  • curl



2. node.js 설치

$ git clone http://github.com/ry/node.git

$ cd node

$ git fetch --all

$ git tag

$ git checkout v0.4.9 

(화면에 표시된 목록에서 최신 버전을 선택해준다. 관례상 짝수는 안정화, 홀수는 개발버전을 의미한다.)


$ cd node

$ ./configure

$ make

$ make install

$ node -v


make를 실행할 때 error가 발생할 경우에는 버전을 달리해서 체크아웃 받은 후 다시 위 절차를 수행하면 된다.


3. 추가적인 작업

node.js가 사용하는 DNS 설정파일(/etc/resolv.conf)에 구글 공용 DNS 값을 넣어준다.

nameserver 8.8.8.8

nameserver 8.8.4.4


4. npm 설치

$ cd

$ curl http://npmjs.org/install.sh | sudo sh


끝.


※ 위 과정이 불편하다면 그냥 http://nodejs.org에서 윈도우용 인스톨러를 내려받아 설치하면 된다.


'자바스크립트 > node.js' 카테고리의 다른 글

npm을 이용한 ejs, jade, express 설치  (0) 2012.04.25

IE9에서 내용이 많은 Big 테이블을 Ajax로 불러들일대 Cell이 한 칸씩 밀리는 버그가 있다.

<td> 사이에 공백이나 개행문자가 있으면 발생한다.

아래와 같이 해결한다. (jQuery를 사용할 경우의 코드임)

if ( $.browser.msie ) {
    var expr = new RegExp('>[ \t\r\n\v\f]*<', 'g');
    $('#테이블_감싼_DIV').html( ($('#테이블_감싼_DIV').html() + "").replace(expr, '><')  );
}

※ new RegExp('>[ \t\r\n\v\f]*<', 'g'); 이 정규식은 HTML 코드 >와 < 사이에 있는 공백, 탭, 개행문자 등을 모두 제거하라는 의미다.

여러모로 IE는 우리 개발자를 사랑하신다. ㅠㅠ

출처 : http://stackoverflow.com/questions/7267014/ie9-table-has-random-rows-which-are-offset-at-random-columns


기존에 생성된 테이블의 테이블스페이스를 다른 걸로 변경하는 방법이다.

이게 가능한 작업인지 몰라서 처음에는 exp, imp를 통해 테이블 스페이스를 변경했다.

ALTER TABLE 대상_테이블명 MOVE TABLESPACE 옮길_TS명;

ALTER INDEX 대상_인덱스명 REBUILD TABLESPACE  옮길_TS명;

 참고로 아래는 접속 계정에 해당하는 모든 테이블과 인덱스의 테이블 스페이스를 변경하는 구문을 추출하는 쿼리이다.

/* 테이블 */
SELECT 'ALTER TABLE ' || TNAME ||' MOVE TABLESPACE TARGET_TS;' FROM TAB WHERE TABTYPE = 'TABLE';

/* 인덱스 */
SELECT 'ALTER INDEX ' || INDEX_NAME ||' REBUILD TABLESPACE TARGET_TS;' FROM USER_INDEXES;


오라클에서 varchar2 자료유형을 아래와 같이 CLOB으로 변경할 경우 ORA-22858: 데이터유형의 변경이 부적당합니다. 에러메시지를 만나게 된다.

ALTER TABLE 대상_테이블명 MODIFY (대상_컬럼명 CLOB); 

해결 방법은 아래와 같다.

/*
* MEMO 칼럼을 varchar2에서 clob으로 바꾸는 경우 샘플
*/

ALTER TABLE 대상_테이블명 ADD MEMO_NEW CLOB;

UPDATE  대상_테이블명 SET MEMO_NEW = MEMO;

COMMIT;

ALTER TABLE  대상_테이블명 DROP COLUMN MEMO;

ALTER TABLE  대상_테이블명 RENAME COLUMN MEMO_NEW TO MEMO;



# 에피소드 1

public void someMethod() {

    1) .... some logic ....

    2) .... System.out ....

}

위 someMethod()의 1)번 로직 수행에 문제가 있어 로직을 수정한 후 실행시켰는데 반영이 안된다.

그래서 2)번 위치에 System.out을 찍었는데 1)번 로직만 실행되고 2)번에 추가한 System.out은 실행되지 않는다.

내 PC에 문제가 있는 건가? 뭐가 문제일까?


# 에피소드 2

@Scheduled(cron="0 * * * * ?")
public void doSchedule() {

    1) .... DB에서 데이타 가져온 후 대상 자료 있으면 수행하는 로직 .... 에러 발생 시 DB에 에러로그 등록됨

}

Spring에서 지원하는 스케줄러 어노테이션을 이용해 1분마다 실행되는 로직을 1)번에 삽입했다.

1)번 로직에 문제가 생겨 DB에 에러로그가 계속 쌓이고 있어서 1)번 로직을 주석처리 후 반영했다. 

그럼에도 불구하고 1)번 로직이 수행되어 DB에 에러로그가 1분마다 계속 쌓인다. 

내 PC에 유령이 있는 것인가? 뭐가 문제일까?


# 에피소드 1 : 이클립스의 Project > Build Automatically 옵션이 꺼져 있었다. ㅠㅠ 

# 에피소드 2 : 해당 스케줄러가 다른 개발자 PC에서도 수행되고 있었다. 결국 그 개발자 PC의 시스템 시간이 내 PC보다 몇밀리초 빨라서 그 쪽 PC에서 위 로직이 먼저 실행된 것이다. ㅠㅠ


결론 : 컴퓨터는 거짓말을 하지 않는다. 이것은 진리 !!!!


var popup = window.open(

    "http://www.otherDomain.co.kr/login.do?id=xxxx&pass=2222", 

    "pp", 

    "width=300, height=3000, left=4800");


setTimeout(function(){

    popup.close(); 

    self.focus();

}, 1000);


IE에서는 서로 다른 도메인 간에 frame이나 iframe을 이용해 위와 같은 로그인 처리를 해도 세션 쿠키가 브라우저에 기록되지 않아 리프레시 한번 더 해줘야만 로그인이 적용되는 경우가 있는데, 이 경우 위와 같은 편법을 이용하는 것도 하나의 방법이다.

당연히 편법이므로 다른 방법이 없다는 상황에서만 .... 적용하는 것이 좋겠다.

 

'자바스크립트' 카테고리의 다른 글

크롬 개발자도구(F12) 느려짐 해결  (0) 2016.11.12

/* 10분 */
SELECT SEQ, TITLE

  FROM TABLE_NAME

 WHERE TRUNC( MOD( (SYSDATE - TO_DATE(REG_DT, 'YYYYMMDDHH24MISS'))*24*60, 24*60 ) ) = 10


/* 2시간 */
SELECT SEQ, TITLE

  FROM TABLE_NAME

 WHERE TRUNC( MOD( (SYSDATE - TO_DATE(REG_DT, 'YYYYMMDDHH24MISS'))*24*1, 24*1 ) ) = 2


/* 1일 */
SELECT SEQ, TITLE

  FROM TABLE_NAME

 WHERE TRUNC( MOD( (SYSDATE - TO_DATE(REG_DT, 'YYYYMMDDHH24MISS'))*24*1, 24*1 ) ) = 24


+ Recent posts