'BackEnd > Java' 카테고리의 다른 글
초보 Java 웹 개발자들을 위한 학습 로드맵 (0) | 2014.03.12 |
---|---|
시간을 24시간 포맷으로 출력하기, 경과 시간 구하기.. (0) | 2014.03.10 |
초보 Java 웹 개발자들을 위한 학습 로드맵 (0) | 2014.03.12 |
---|---|
시간을 24시간 포맷으로 출력하기, 경과 시간 구하기.. (0) | 2014.03.10 |
표준액션
<jsp:xxxxxx /> 형태의 action tag들..
대표적으로 <jsp:include .../> < jsp:forward .... />
<jsp:useBean ..... /> <jsp:getProperty .... /> <jsp:setProperty ..... />
참조할만한 글..
http://blog.naver.com/PostView.nhn?blogId=toplms78&logNo=70182158839
http://blog.naver.com/PostView.nhn?blogId=julymorning4&logNo=100194830950
JSTL - jstl.jar, standard.jar를 import 해야 사용가능함.
<c:xxxx ..... /> - Core
<fmt:xxxx /> - 포맷팅 관련 (숫자,날짜,시간, 국제화, 다국어 지원 기능을 제공 )
<fn:xxxx /> - 문자열을 처리하는 함수 관련
<sql:xxxx /> <x:yyyy /> - 잘사용하지 않는다.
참조할만한 글...
http://kimseunghyun76.tistory.com/326
http://www.cyworld.com/vattle/9918251
http://seven00.tistory.com/373
LPAS 소스 살펴보고, 사용여부에 따라서 사용한 문번들은 다시한번 정리해서 익히도록 합시당...
서블릿 라이프사이클 (0) | 2014.03.12 |
---|---|
Expression Language (0) | 2014.03.11 |
JSP 기초 1 - Session/Cookie/URL 재작성/ 페이지 forward,include (0) | 2013.10.11 |
출처 : http://kwon37xi.egloos.com/3666564
성윤's Comment !!
Back end 개발자 위주로 나름 잘 정리되어 있네요..
Front end까지 더 보탠다면... Javascript 각종 Framework, Android , PhoneGap 등이 포함되겠네요..
윈도우 7 JAVA_HOME 설정하기 (0) | 2014.09.16 |
---|---|
시간을 24시간 포맷으로 출력하기, 경과 시간 구하기.. (0) | 2014.03.10 |
서블릿은 init(), destroy() 함수에 초기화 및 종료 코드를 기술할 수 있다.
서블릿에서 반복해서 사용될 먼가를 구현하거나,초기화 할때, 공통되는 종료처리를 할때 사용하면 좋을듯..
JSP의 경우 jspInit(), jspDestory()를 정의해서 사용하면 된다.
서블릿 init()의 경우 서블릿이 최초 실행될때 그때 수행이 되는데, 이렇게 하면 최초 실행될때 그 만큼의 시간이 더 소요되는데
최초에 application이 초기화되는 시점 web.xml이 로딩되는 시점에 초기화를 수행하도록 할 수 있다.
방법은 web.xml 에 등록하는것이다..
예>
<servlet>
<servlet-name> .... </servlet-name>
<servlet-class> .... </servlet-class>
<load-on-startup />
</servelt>
서블릿의 초기화 파라미터
<servlet>
<servlet-name> xxx </servlet-name>
<servelt-class> xxx </servlet-class>
<init-param>
<param-name> file_name </param-name>
<param-value> agreement.txt </param-value>
</init-param>
</servlet>
소스에서 해당정보를 얻어오려면..
String filename = getInitParameter("file_name");
// 유사하게 jsp 파일의 초기화 파라미터를 지정하고 읽어올수도 있다.
그렇게 하기 위해서는 해당 jsp 파일을 servlet으로 web.xml 에 등록해야 한다. 거의 쓸일이 없을것 같아서 생략..
( 뇌를 자극하는 JSP Servlet 302 페이지... )
웹 어플리케이셔 전체의 초기화 파라미터
<web-app ... >
<context-param>
<param-name> file_name </param-name>
<param-value> agreement.txt </param-value>
</context-param>
</web-app>
소스에서 해당정보를 얻으려면..
String str = application.getInitParameter("file_name");
로그 메시지를 기록하는 log 메서드
application.log("xxxx");
Tomcat의 경우 logs 폴더 아래의 해당 날짜파일에 로그가 기록됨.
page, request, session, application 객체에서 setAttribute, getAttribute, removeAttribue 함수 사용하여 정보 공유하기
표준 액션 및 JSTL (Java Standard Template Library) (0) | 2014.03.17 |
---|---|
Expression Language (0) | 2014.03.11 |
JSP 기초 1 - Session/Cookie/URL 재작성/ 페이지 forward,include (0) | 2013.10.11 |
Servlet 에서
request.setAttribute("result", total);
JSP에서
$(result) 형태로 간단히 출력가능함..
스크립트릿으로 출력하려면 더 복잡함..
<%= request.getAttributes("result") %>
JSP 2.0에서 추가됨.
HTML로 결과 출력을 더 간편하게 하도록 도와주는 문법.
<%= xxxx.getAtrribute("yyyy") %> 을 간단히 $( "yyyy" ) 형태로 표기가능하다.
내장객체를 사용하여 application,page,session, request 의 getAttribute를 할수 있고,,,
post나 get 방식으로 넘어온 파라미터들에 접근, header, initParam, cookie, pageConext등에 접근가능하다.
[출처] 자바 EL - Expression Language 정리|작성자 냅시스
각종 산술연산 및 논리연산이 가능하다.
배열, ArrayList, Map 객체에 접근가능하다.
자바빈 객체에 손쉽게 접근가능하다.
자바 정적 메소드 호출도 가능하다. ( 아래 EL 함수 예제 참조 )
EL 함수 예제
http://seung-jun.tistory.com/222
표준 액션 및 JSTL (Java Standard Template Library) (0) | 2014.03.17 |
---|---|
서블릿 라이프사이클 (0) | 2014.03.12 |
JSP 기초 1 - Session/Cookie/URL 재작성/ 페이지 forward,include (0) | 2013.10.11 |
http://www.okjsp.net/bbs?seq=45969
SimpleDateFormat 에서 시간을 24시간타입으로 나오게 할려면요?어떻게? |
java.text.SimpleDateFormat formatter=new java.text.SimpleDateFormat("yyyyMMddHHmmss");
위처럼 하면 오후 1시면 01로 나오는데 13시로 나오게 할수 없나요? |
HH로 하시면 될텐데요....?
hour에 관련된 pattern문자는
HH : 0 -23
kk : 1 - 24
KK : 0 -11
hh : 1 - 12
이렇게 정의되어 있습니다.
일반적인 24시간 표시일 경우...
0 - 23인 HH를 쓰는게 맞습니다.
http://ra2kstar.tistory.com/123
JAVA 현재 시간 구하기
JAVA에서 제공하는 다양한 메서드는 굉장히 편하다. 이번에는 그 중에서 현재 시간을 구하는 메서드를 알아본다.
System.currentTimeMillis();
currentTimeMillis()의 리턴형은 long 값이며, 1/1000초의 값을 리턴한다.
(검색을 통해서 좀 알아보니 1970년 1월 1일 부터 계산된 것이란다.)
이 메서드를 통하여, 현재 시간을 계산 할 수 있고, 프로그램의 실행 시간 또한 나타낼 수 있다.
현재 시간 출력 및 실행 시간 출력
public class trunc_tweet_tag {
public static void main(String [] args){
long time = System.currentTimeMillis();
SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
String str = dayTime.format(new Date(time));
System.out.println(str);
long start = System.currentTimeMillis() ;
new trunc_tweet_tag("./message/");
long end = System.currentTimeMillis();
System.out.println((end-start)/1000 +" 초 걸림");
}
......
윈도우 7 JAVA_HOME 설정하기 (0) | 2014.09.16 |
---|---|
초보 Java 웹 개발자들을 위한 학습 로드맵 (0) | 2014.03.12 |
Unix에서 process 강제로 죽이는 방법
먼저 해당 process id를 찾는다. 예를 들어 myserver라면..
ps -ef | grep myserver
출력 결과 예..
relnapp1 13631 1 0 Dec 13 ? 12:18 myserver .:/relnreg4/path...
kill -9 13631
처음부터 만든건 아니고.. 기존에 있던 Unix c socket program을 수정할 일이 있었다.
C사에서 예전부터 만들어둔 소스인데 미리 정해둔 client가 아닌경우 접속을 허용하지 않도록 하는것이었다.
기존에는 client의 ip에 상관없이 해당 port로 접속시도가 들어오면 무조건 connect를 하도록 되어 있었다.
unix c Socket 통신 기본 익히기 ..
http://forum.falinux.com/zbxe/index.php?document_srl=433968&mid=C_LIB
server 및 client 소스는 컴파일하면 link 오류가 발생하여 아래 명령어로 해결했다.
cc -w -D_REENTRANCE -g -lpthread -lnsl -lsocket -c server.c -o server.o
cc -w -D_REENTRANCE -g -lpthread -lnsl -lsocket server.o -o server
or
cc server.o -o server
cc -w -D_REENTRANCE -g -lpthread -lnsl -lsocket -c client.c -o client.o
cc -w -D_REENTRANCE -g -lpthread -lnsl -lsocket client.o -o client
or
cc client.o -o client
너무 잘 정리되어 있어서 바로 이해를 했다.
그리고 소스 분석을 하니... 흐름을 파악할수 있었다.
다중 쓰레드를 고려하여 만들어져 있어서 완벽히 이해하려면 더 시간이 필요했지만...
필요한만큼 수정하고 작업에 들어갈수 있었다.
int hostname_to_ip(char * hostname , char ip[][IP_LEN_MAX]) { struct hostent *he; struct in_addr **addr_list; int i; // get the host info if ( (he = gethostbyname( hostname ) ) == NULL) { CLOGFATAL("\t host lookup error!! [%s]",hostname ); //CLOGINFO("\t host lookup error!! [%s]",hostname ); return -1; } addr_list = (struct in_addr **) he->h_addr_list; for(i = 0; addr_list[i] != NULL; i++) { if( i>= IP_COUNT_MAX ) // 각 hostname당 최대 4개의 ip를 가질수 있는것을 가정하였다. { CLOGFATAL("\t IP Address count is over MAX(%d) for [%s]",IP_COUNT_MAX,hostname ); } strcpy(ip[i] , inet_ntoa(*addr_list[i]) ); CLOGINFO("\t hostname : %s, ip = %s", hostname, ip[i]); } return i; }
출처 : http://www.binarytides.com/hostname-to-ip-address-c-sockets-linux/
개별 subquery 결과를 합할때 유용하다.
기본 개념잡기는 아래를 참고할것.
http://intomysql.blogspot.kr/2011/01/union-union-all.html
http://www.w3schools.com/sql/sql_union.asp
현재 페이지의 상태와 데이터를 그대로 유지시켜 주며 다른 페이지로 이동하기
request.getReeustDispatcher("이동할페이지").forward( request, response );
pageContext.forward( "이동할페이지") ;
<jsp:forward page="target page">
상태 유지 없이 다른 페이지로 이동하기
response.sendRedirect( "이동할페이지" );
response.encodeRedirectURL( "이동할페이지" );
우선브라우저에게 http response를 하고, 브라우저가 다시 이동할페이지를 호출하는 형식임.
이동할 페이지로 파라미터 정보를 넘기려면... target.jsp?name=value&name2=value2 형태로 값을 넘길수 있다.
파라미터에 한글이 포함된다면 URLEncoder.encode() 를 사용해야 한다.
String param = URLEncoder.encode ( "이름=값", "EUC-KR");
param을 target 주소뒤에 붙이면 됨..
encodeRedirectURL() 함수는 cookie사용이 제한된경우 URL 재작성을 해야 하는 경우에 사용하는 함수이다.
주어진페이지 주소에 JSESSIONID=B2KKKEK2U2U2I8JODE8KEKD 형태의 SESSION ID를 붙여서 Target URL을 재작성한다.
동적페이지 Include
pageContext.include("삽입할페이지"); // 페이지의 결과가 삽입되는 것임...
<jsp:include page="">
그에 비해서 <%include file="삽입대상페이지" %>는 include될 대상의 코드를 복사하여 그대로 include되는 정적인 include 이다.
Cookie 에 대해서..
Cookie는 HTTP Header에 저장되어 브라우저와 web server간에 전송된다.
브라우저에서는 javascript로 cookie 정보를 조회,변경,삭제 가능하다.
JSP/Servlet에서는 Cookie 객체를 통해서 조회,변경,삭제 가능하다.
조회 : Cookie cookies[] = request.getCookie();
변경 및 추가 : response.addCookie( new Cookie("NAME", "VALUE"); // NAME이 기존에 있다면 수정, 없다면 추가된다.
삭제 : 삭제기능은 좀 특이하다. 별도의 삭제함수가 있는것이 아니라, Cookie.setMaxAge()를 통해서 수명을 조절하는 방식으로 삭제한다.
cookie.setMaxAge(3600); // 한시간으로 남은 수명 지정..
cookie.setMaxAge(0); // 쿠키를 바로 삭제 하도록 만든다.
cookie.setMaxAge(-1); // 웹 브라우저가 끝날때 끝날때 삭제되도록 만든다. default 임.
setPath()를 통해서 특정경로에만 Cookie가 전송되도록 조절할 수 있다.
setDomain()를 통해서 여러 웹서버로 전송되도록 할수 있다.
웹 서버가 여러개인 경우, setDomain() 을 통해서 여러 웹서버로 전송되도록 할 수 있다. 이렇게 하지 않으면.. A Page를 읽을때 A web server, B 페이지를 읽을때 B Web Server가 호출되었다면 서로 host name정보가 다르기 때문에 Cookie 정보는 공유되지 않는다. 그래서 cookie 정보를 공유하려면 꼭 setDomain()을 사용해야 한다.
Servlet 과 JSP에서 사용법이 약간 다르다.
Servlet 에서는 HTTPSession session = request.getSession(); 으로 session 정보를 얻어서 사용해야 한다.
JSP 에서는 그냥 예약된 session 인스턴스를 사용하면 된다.
주요 메소드
session.setAttribute( "ID", value ); value 는 object 형태
Object obj = session.getAttribute("ID"); // 필요시 적절하게 cast해서 target object로 할당한다.
session.removeAttribute("ID);
session.invalidate(); // 세션을 끝내는 메소드
URL 재작성
Session 기술에서도 사실 cookie가 사용된다. seesion을 구별하기 위해서 Session id를 cookie 형태로 만들기 때문이다. JSESSIONID=JDKDKK3ID93KD9E9GKD9D 와 같은 형태임..
그래서 cookie를 사용하지 않도록 브라우저 설정이 되어있다면 session이 잘동작하지 않기 때문에 그럴경우..
URL 재작성이라는 기법을 사용해야 한다.
URL 재작성이란 URL로 SESSION ID를 주고 받으며 session을 구분하도록 하여 session 객체를 사용하는 방법이다.
브라우저와 web server가 주고받는 모든 주소 정보뒤에는 항상 JSESSIONID=DKKDK3K93939DD9D 를 붙이도록 한다.
SESSION ID를 URL에 붙이는 자작업이 상당히 귀찮은 작업이 될수도 있는데.. response.encodeURL()를 통해서 쉽게 할수 있는 방법을 제공한다. 예를 들어 .....
<A href=<%= response.encodeURL( "xxxxx.jsp ") %>
와 같이 하면 자동으로 xxxxx.jsp 뒤에 session id정보가 붙는다.
또 다른 함수가 하나 더 있는데.. . response.encodeRedirectURL() 이다...
다른페이지로 redirect 할때 사용하는 함수이다.
참고로 redirect는 다음과 같이 동작한다.
[ (웹서버)브라우저로 응답 -> (브라우저)주어진 주소로 http request -> (웹서버)주어진 주소에 대한 응답 ]
표준 액션 및 JSTL (Java Standard Template Library) (0) | 2014.03.17 |
---|---|
서블릿 라이프사이클 (0) | 2014.03.12 |
Expression Language (0) | 2014.03.11 |