2011. 8. 10. 22:02


1번은 일반적인 함수의 작성 형태 이고...


2번은 함수 리터럴로 작성된 형태...

어느쪽이 되었건 3번 코드로 출력되는 내용은 9로 동일하다.

...
함수 정의 대신 함수 리터럴을 사용할 만한 이유...
즉, 함수 정의와 함수 리터럴의 차이점...

함수 리터럴은 자바스크립트의 표현식 내에 나타날 수 있다.

표현식 내에... 음??

일단 다음의 코드를 보도록 하자


단 3줄짜리 초간단 코드이다.

1 : 리터럴 형태로 선언된 함수 square
2 : 이 square 에 스스로에 3을 넣어 수행된 결과값 + 1을 대입하고 있다.
3 : 그리고 square 를 출력!!

결과는...

당연히 10 이다.
3 * 3 + 1 = 10

만약 2 라인이 없을 경우... 무엇일 출력 될까...?

바로 1째 줄의 var square = 뒷부분의 내용들... function(x){return x*x;} 이 출력이 된다



Posted by 해비
2011. 5. 30. 22:16
대략적인 소스코드 이며, 맞지 않는 부분은 고쳐 쓸 줄 아는 지혜가 필요하겠습니다 ^__^
여기서 중요한 부분은 List 에 값을 넣고, 다시 받아와서 뿌리는 것 까지 입니다.


Class 부분 입니다. (List에 관계되는 부분만 강조하여 표시하였습니다)
 public List<String> getStatus() throws ServiceException, SQLException{
  Connection conn = ConnectionProvider.getConnection();
  PreparedStatement pstmt = null;
  ResultSet rs = null;
  String tmpStr = "";
  try{
   pstmt = conn.prepareStatement("select * from table");
   rs = pstmt.executeQuery();
   if(rs.next()){
    List<String> statList = new ArrayList<String>();
    do{
     tmpStr = "";
     tmpStr = tmpStr + rs.getString(1) + "|" + rs.getString(2);
     statList.add(tmpStr);
    }while(rs.next());
    return statList;
   }else{
    return Collections.emptyList();
   }
  }catch(SQLException e){
   throw new ServiceException("메시지 목록 구하기 실패 : " + e.getMessage(), e);
  }finally{
   JdbcUtil.close(rs);
   JdbcUtil.close(pstmt);
   JdbcUtil.close(conn);
  }
 }

- String 객체에 Select 된 결과의 칼럼1, 칼럼2 사이에 구분자 "|" 를 넣어서 붙인다음 List 에 추가 하여 리턴 하였습니다



Jsp 부분 입니다.
<%
 GetStatusService statData = new GetStatusService();
 List<String> stData = statData.getStatus();
%>

<%
 for(int i=0; i < stData.size();i++ ){
 String arrData[] = stData.get(i).split("[|]");
...(필요한 코드 추가)
 }
%>

- 해당 클래스의 인스턴스를 생성한 다음 List 를 선언하여 해당 메소드를 실행한 결과를 받아 냅니다.
- For 문을 이용하여 List의 처음부터 끝까지 돌면서 계속하여 String 값을 가져 와서 구분자단위로 끊어 arrData[]배열에 담아냅니다.
- 받아낸 데이터를 적당히 뿌려 줍니다. (이건 알아서...)
Posted by 해비
2011. 4. 13. 10:52

1. exam01.java 소스코드 작성

묵시적 형 변환에 관련된 예제 입니다.


3 - short형 변수 S01 에 10을 대입합니다.
4 - short형 변수 S02 에 20을 대입합니다.
5 - short형 변수 S03 에 10+20의 결과를 대입합니다.
6 - short형 변수 S04 에 변수S01 과 변수 S02를 더한다음 그것의 결과를 대입합니다.*
7 - long형 변수 S05 에 변수S01 과 변수 S02를 더한다음 그것의 결과를 대입합니다.


저장 후, 컴파일 하면 에러가 발생합니다.

6번째 라인에서 오류가 발생했음을 알리는 메시지 입니다.


이유....
자바에서 연산을 하면서 변수 타입이 기본으로 자동 지정되어졌기 때문입니다.
정수 + 정수 에서 기본 데이터 타입이 int 형인데 이것을 int보다 작은 크기인 short 에 넣겠다고 해서 발생한 오류입니다.


[해결 방법]
방법1 - 연산 부분을 괄호로 묶고 앞에 명시적 형 변환을 합니다.
           short S04 = (short)(S01+S02)

방법2 - 변수 S04의 타입을 int 형으로 선언 합니다.
         int S04 = S01+S02

방법3 - 변수 S04의 타입을 String 형으로 선언 하고, 뒤에 +"" 를 추가하여 문자화 합니다
           (주의! - 방법3 의 경우, 데이터가 문자열로 인식됩니다.)
           String S04 = S01+S02+""



* 자바에서 연산시 기본으로 지정되는 데이터 타입
정수연산 - int
실수연산 - double
문자결합 - String

정수 + 정수 = int
정수 + 실수 = double
정수 or 실수 + "문자" = String


그냥 간단하게...
작은 크기에서 큰 크기로 형 변환은 자동(묵시적)으로 이루어 지지만, 그 반대 의 경우에는 반드시 명시적으로 형 변환을 해 주어야 합니다.

보다 자세한 데이터타입이나 크기는 검색을...
Posted by 해비
2011. 4. 5. 10:44

1. Hello.java 소스코드 작성

단 5줄 짜리의 초간단 예제 입니다.
(에디트 플러스, 메모장, 이클립스 기타... 어떤 툴을 사용하셔도 상관없습니다)



2. 컴파일
javac Hello.java

Hello.java 파일이 있는 경로로 가서 위와 같이 컴파일을 합니다.
.class 파일이 결과물로 생성됩니다.



3. 실행
java Hello

위 소스코드의 3번째 라인에 있는...
Hello World!
가 출력되면 정상적으로 컴파일 및 실행이 된 겁니다.

주의 : 실행 시, 확장자는 적으면 안됩니다.
예) java Hello.class -> 실행 안됨!!




public static void main(String[] args)
또는
public static void main(String args[])
어느쪽이든 좋습니다.

public - 접근제어를 뜻합니다. (공개 - 클래스내부, 외우 어디에서든 접근 가능)
static - 공유를 의미합니다. (모든 객체에서 공통으로 사용)
void - 리턴값이 없음을 의미 합니다.
(보다 자세한 내용은 뒤에서 다루겠습니다)

String[] args 는 실행시 매개변수를 받아오기 위한 용도로 쓰여집니다.
java Hello [매개변수1] [매개변수2] [...]


public static void main(String[] args)는 형식이 딱 지정되어있으므로 암기해 두는것이 좋습니다.
자바에서 프로그램의 시작점이 되는 곳입니다.


매개변수의 구분은 스페이스(띄움) 이며, 각 매개변수는 배열로 받아오게 됩니다.

그렇게 조금 변경된 Hello.java 의 소스코드 입니다.

args[0]
args[1]
의 2개의 매개변수를 받아와서 출력하는 구분이 추가되었습니다.

컴파일 후,
실행시 뒤에 관련 매개변수값(아무거나...) 넣어주시면 되겠습니다

위와 같이 실행이 되어집니다.

그런데,
매개변수가 모자르거나 아예 없을경우는 에러가 발생합니다.

위 코드를 보면 4번째 라인에서 오류가 발생하였음을 알리고 있습니다.

즉, 매개변수 배열의 0번째가 존재하지 않는데 0번째의 값을 가져다 쓰려고 한다고 예외가 발생했음을 알립니다.

이것마저 해결하고자 한다면은...
try~ catch 구문을 이용하여 오류 발생시 catch 블럭으로 처리를 던지는 식으로 오류 처리를 할수 있습니다만, 여기서 이것까지 하지는 않습니다.
다만, 이런 방법도 있다는 것을 알려드립니다.
(자세한 내용은 뒤에서 다루도록 하겠습니다)



[체크 사항]
Java 소스파일의 파일명은 main 메소드가 포함된 클래스의 명으로 지정하여야 한다!



Posted by 해비
2011. 2. 10. 11:26
x86 Windows 버젼의 톰캣 7.0.4 기준으로 작성된 내용입니다.


분량이 큰 JSP페이지 작성중에 65535 limit 어쩌고 메시지와 함게 500 서버 에러 를 내는 경우가 있다...

해당 .jsp 파일이 내부에서 .java로 변환되어 지면서 이 용량이 65535를 초과 한다고 하는데
(틀린 부분이면 지적 바랍니다 -_-)

해결책은 2가지이다..
------------------------------
1. 소스 코드의 사이즈를 줄인다
2. 커스텀 태그를 사용한다
------------------------------

중간중간에 include 시킨 것들도 내부에서 .java 파일로 변환시 전부 포함되어버리니 커지는것은 당연할 듯...

그렇다면 소스코드용량을 줄이면 좋겠지만... 이것이 불가능하다면 커스텀 태그를 사용하여 해결하도록 한다.


페이지 상단에 커스텀태그를 정의 한다.
(커스텀 태그명은 사용자 임의로 주면 되므로 적당히 알아서 설정들 하시길...)
<%@ taglib prefix="inc" tagdir="/WEB-INF/tags" %>
prefix
inc라는 태그명을 정의합니다.
include 앞 3글자 따서 정의한건데, 뭐 맘대로 암거나 알아서 주셔도 되겠습네다 -_-;;

tagdir
/WEB-INF/폴더 하단에 tags 라는 폴더를 하나 생성하여 둡니다.


import 시킬 파일에 있던 내용을 tag 파일로 작성하여 보겠습니다.
(이 파일은 /WEB-INF/tags 안에 위치시켜 주세요)
sample.tag
<%@ tag body-content="empty" pageEncoding="UTF-8" %>
<%@ attribute name="value" type="java.lang.Integer" %>
<%@ attribute name="stVar" %>
<%@ attribute name="stVar2" %>
<%
(JSP 코드 기술...)
%>
진~ 하게 표시된 부분들은... 변수 입니다.
import 와 다르게 필요한 변수값이 있을경우, 이것들을 넘겨 받아야 하기 때문이죠

위에서 value 는 정수 형으로, stVar 과 stVar2 는 문자형 데이터를 넘겨 받기 위해 설정되었습니다.
중간에 기술된 JSP 코드들이 원래의 jsp파일에서 해당 위치에 import 됩니다.


커스텀 태그를 이용하여 import !!
<%
(기존 소스코드들...)
%>
<inc:sample value='<%=Integer.parseInt(varInt) %>' stVar='<%=var1 %>' stVar2='<%=var2 %>' />
<%
(기존 소스코드들...)
%>
jsp 코드 부분인 %를 닫은 다음 커스텀태그로 내용을 import 시킵니다.
<커스텀태그:파일명 파라미터1='값1' 파라미터2='값2' ... /> 의 형태로 작성합니다.

설정한 파라미터 값을 넘겨주게 되고, sample.tag 파일에서 넘겨받은 파라미터 값을 사용한 결과가 import 됩니다.


Posted by 해비
2010. 12. 8. 22:47
테스트 환경...
JDK 1.6_u22
Tomcat 7.0.4



1. 준비
commons-dbcp-1.4.jar
commons-pool-1.5.5.jar
상단의 2개 파일을 http://commons.apache.org 에서 다운받아서
WAS(톰캣)의 WEB-INF/lib 폴더로 복사.
각각 DBCP, Pool 항목을 받아서 압축을 풀면 안에 해당 jar 파일들이 있습니다.
(JDK 1.6, TOMCAT 7.0.4 에서 사용한 것이며, JDK나 톰캣의 버젼에 따라 다른 버젼을 사용해야 하는경우도 있음)



2. pool.jocl 작성(내용수정 필요)
파일명 pool.jocl로 저장한 다음, WEB-INF/classes 에 위치하도록 저장 합니다.

<object class="org.apache.commons.dbcp.PoolableConnectionFactory"
 xmlns ="http://apache.org/xml/xmlns/jakarta/commons/jocl">

<object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
 <string value="jdbc:mysql://localhost:3306/haebi"/>
 <string value="haebi"/>
 <string value="1234"/>
</object>

<object class="org.apache.commons.pool.impl.GenericObjectPool">
<object class="org.apache.commons.pool.PoolableObjectFactory" null="true"/>
 <int value="10"/>          <!-- maxActive -->
 <byte value="1"/>  <!-- whenExhaustedAction-->
 <long value="10000"/>  <!--maxWait -->
 <int value="10"/>  <!-- maxIdle -->
 <int value="3"/>  <!--minIdle-->
 <boolean value="true"/>  <!-- testOnBorrow-->
 <boolean value="true"/>  <!--testOnReturn--> 
 <long value="600000"/>  <!--timeBetweenEvctionRunsMillis-->
 <int value="5"/>  <!--numTestsPerEvictionRun-->
 <long value="3600000"/>  <!--minEvictableIdleTimeMillis-->
 <boolean value="true"/>  <!--testWhileIdle-->
</object>

<object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory" null="true"/>
 <string null = "true"/>
 <boolean value="false"/>
 <boolean value="true"/>
</object>

(드래그로 복사&붙여넣기 해서 쓰세요 -_-)


상단의 내용중...
<string value="jdbc:mysql://localhost:3306/haebi"/>
표시된 부분에 자신이 사용할 DB명을 설정.

 <string value="haebi"/>
표시된 부분에 DB접속 계정명을 기입.

 <string value="1234"/>
표시된 부분에 DB접속에 사용되는 패스워드를 기입.



3. DBCPInit.class 작성(경우에 따라 수정필요)
파일명 DBCPInit.java로 저장한 다음, WEB-INF/classes/jdbc/loader 에 위치하도록 저장 합니다.

package jdbc.loader;

import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.util.StringTokenizer;

public class DBCPInit extends HttpServlet {

 public void init(ServletConfig config) throws ServletException {
  try {
   String drivers = config.getInitParameter("jdbcdriver");
   StringTokenizer st = new StringTokenizer(drivers, ",");
   while (st.hasMoreTokens()) {
    String jdbcDriver = st.nextToken();
    Class.forName(jdbcDriver);
   }
   
   Class.forName("org.apache.commons.dbcp.PoolingDriver");

  } catch(Exception ex) {
   throw new ServletException(ex);
  }
 }
}

(드래그로 복사&붙여넣기 해서... 2탄 -_-)


package jdbc.loader;
패키지 명은 classes폴더 하단의 경로를 표시하는 것으로 임의로 주면 됩니다.

(예시)
package loader;
WEB-INF/classes/loader


해당 폴더로 이동한 다음 컴파일 합니다.
javac *.*

.java 파일은 Java 소스파일로서 서비스 운영에 필요한 파일은 아닙니다.
컴파일 되서 나온 .class 가 실제로 사용되는 파일입니다.



4. web.xml 수정 (자신의 환경에 맞추어서...)
WEB-INF 폴더 안에 있는 web.xml의 <web-app>태그안에 적당한 위치에 넣도록 합니다.
xml파일에 대해 잘 모르겠다... 하시는 분들은 </web-app>를 찾아서 바로 위에 붙여넣기 합세다.

<servlet>
  <servlet-name>DBCPInit</servlet-name>
  <servlet-class>jdbc.loader.DBCPInit</servlet-class>
  <init-param>
   <param-name>jdbcdriver</param-name>
   <param-value>com.mysql.jdbc.Driver</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
(드래그로 복사&붙여넣기 해서... 3탄!)


<servlet-name>DBCPInit</servlet-name>
위 3. 항목에서 저장한 파일명을 그대로 적어줍니다.

<servlet-class>jdbc.loader.DBCPInit</servlet-class>
위 3. 항목에서 파일을 위치시킨 경로를 참조해서 수정합니다.



5. DBCP를 이용한 데이터베이스 연동 예제 (옵션)

 <%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.Statement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.SQLException" %>
<html>
<head><title>회원 목록</title></head>
<body>

MEMBER 테이블의 내용
<table width="100%" border="1">
<tr>
    <td>이름</td><td>아이디</td><td>이메일</td>
</tr>
<%
   
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
   
    try {
        String jdbcDriver = "jdbc:apache:commons:dbcp:/pool";
        String query = "select * from MEMBER order by ID";
        conn = DriverManager.getConnection(jdbcDriver);
        stmt = conn.createStatement();
        rs = stmt.executeQuery(query);
        while(rs.next()) {
%>
<tr>
    <td><%= rs.getString("NO") %></td>
    <td><%= rs.getString("ID") %></td>
    <td><%= rs.getString("PASS") %></td>
</tr>
<%
        }
    } finally {
        if (rs != null) try { rs.close(); } catch(SQLException ex) {}
        if (stmt != null) try { stmt.close(); } catch(SQLException ex) {}
        if (conn != null) try { conn.close(); } catch(SQLException ex) {}
    }
%>
</table>

</body>
</html>

(드래그 & 붙여넣기... 하든말든;;; 그냥 테스트용)

소스를 환경에 맞게 수정해서 돌려보면 되겠습니다.




Posted by 해비
2010. 10. 19. 20:59

DB 언어와 내부 코드의 언어는 모두 UTF-8 로 설정 후 작업하였습니다.
설정내용 포스트  <- 참조


JSP파일로만 구성되어있으며, 커넥션풀? 자바빈스? 이런거 하나도 안들어갔습니다.
이해를 돕기위해서(?) 만들어본 초 간단 샘플 입니다... 이 보다 더 간단하게 코딩할수는 없을듯하네요 ^^


사실은 저도 잘 몰라서 그렇습니다.. 너그러이 양해를...

첨부파일에 소스코드 & DB 포합입니다.
haebi DB를 통째로 덤프 뜬 것이므로 phpMyadmin 에서 임포트 하면 DB 생성될 것입니다.
(안에는 테이블이 2개가 있습니다.)

MySQL 계정을... 생성해야 합니다만 소스 고치셔도 되고...
ID : haebi
PW : 1234
로 설정하면 되겠네요

MySQL 계정생성 부분 역시 설정내용 포스트 링크를 참조해주세요

jdbcEx.jsp 는  테이블 cellcost의 내용을 출력하는 예제입니다.


Posted by 해비
2010. 10. 19. 20:32
설치한 프로그램들...
- APMSetup 7 설치 (Apache, PHP, MySQL)
- JDK 1.6 Update 22
- ApacheTomcat 7.0 설치



[Java 환경변수 등록]
JDK설치 경로 예시...
C:\Java\jdk1.6.0_22

JAVA_HOME = C:\Java\jdk1.6.0_22
PATH = %JAVA_HOME%\bin



MySQL 에서 새로운 DB를 생성 (utf8_general_ci)로 생성했다고 가정...

(옵션)
DB사용자는 필요시 추가
user에 localhost, ID, PASSWORD(PW), N, N, ...
db에 localhost, ID DB, Y, Y, ...
그리고 홈에서 reload previledge 인가.... 권한 다시 읽기 해줘야 저것이 적용됨

해당 계정 또는 루트권한으로 로그인
테이블 설계를 및 생성까지...

jsp에서 해당 DB접속 하여 값을 읽어지는지 테스트

jsp에서 MySql에 값이 정상으로 들어가는지 테스트
(utf-8 문제로 한글이 깨질경우...)

-MySQL 설정
설치된 폴더안에 my.ini 라는 파일을 찾아서 아래와 같이 수정(/data 폴더 안에있네요)

[client]
default-character-set=utf8

[mysqld]
default-character-set=utf8


-Tomcat 설정
/conf/server.xml 파일의 내용 을 아래와 같이 수정

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="utf-8"/>

이부분인데 URIEncoding="utf-8" 이 부분을 추가하거나 수정한뒤 저장하고 톰캣 재시작



- JSP/Servlet 실행을 위한 설정
톰캣 설치폴더의 common/lib/servlet-api.jar 파일을
JDK가 설치된 경로의 /jre/lib/ext 에 복사



- MySQL Connector/J 설치

MySQL홈페이지에서 내려받은 다음 압축을 풀면 안에 jar파일이 있음

아래의 경로에 설치했다고 가정할때,
JDK설치경로 C:\Java\jdk1.6.0_22
TOMCAT 설치경로 C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT\WEB-INF

ex)
C:\Java\jdk1.6.0_22\jre\lib\ext 폴더에,
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\ROOT\WEB-INF\lib 폴더에 복사
(폴더가 없을경우 생성)






- JSP파일 내부에 캐릭터셋 지정

JSP의 경우는 페이지 지시자 설정
<%@ page contentType="text/html;charset=utf-8" %>

HTML페이지에 메타테그 설정
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


*이클립스에서 디폴트를 utf-8로 지정해주면 새 jsp 파일 생성시에 자동으로 붙음
Window - Preferences -> Web 에서 HTML, CSS, JSP의 인코딩을 ISO10646/UTF-8 로 지정
Window - Preferences - General - Editors - Texteditors 에서 spelling을 other선택 후, UTF-8 로 지정



- JSP에서 GET, POST 처리에서 (한글)데이터가 들어갈때는 utf-8로 변환
(안깨지고 잘 들어가면 상관없음~~ 아마도...?)

POST 방식의 처리
request.setCharacterEncoding("UTF-8");

GET 방식의 처리
String data = new String(request.getParameter("data").getBytes("8859_1"),"UTF-8");





[참고한 사이트]
http://blog.naver.com/seogi1004?Redirect=Log&logNo=110045319589
http://trend21c.tistory.com/673



Posted by 해비
2010. 9. 29. 17:50
여러개를 묶어봤습니다.
- CheckBox
- RadioButton
- ImageView

/layout/main.xml
2. 한 화면에 컨트롤을 전부 표시할수 없어서 스크롤 되도록 ScrollView로 전체를 감싸도록 처리

5. TableLayout을 사용
  (View로 구분선 줄려니까 기본이 LinearLayout 이었던가요? 여튼 여기서 컴파일은 되는데 실행은 안되더군요)

10, 16. 체크박스 위젯
  (각 체크박스 위젯을 구분하는 것도 해볼겸 해서 2개를 넣었습니다)

22. View 단순 구분선을 표시 하기 위함. 2px두께의 파랑색 선




25~47. 라디오그룹1 내부에 3개의 라디오 버튼을 배치

51~73. 라디오그룹2 내부에 3개의 라디오 버튼을 배치.
  (라디오버튼은 동일구룹에서 1개만 선택가능하며, 2개의 그룹이므로 각 그룹당 1개씩 선택이 가능)

77. ImageView 단순 이미지 출력 위젯

82. 이미지 경로는 android:src @drawable/mug 라고 되어있는데 이것은 res/drawable 폴더안의 mug.jpg 파일을 읽어들임
  - res폴더안에 drawable-hdpi, drawable-ldpi, drawable-mdpi 3개의 폴더가 있는데 디바이스의 화면 사이즈와 관련 있는것으로 추측. (hdpi에에 이미지 넣었더니 조금 작게 표시됨)





src/CBRGEx1.java
앞 포스팅의 CheckBox 와 내용은 소스 파일의 내용은 비슷하므로 생략...


결과는...
요렇게... 됩니다.
밑에 사진은 가려진...;;

소스파일첨부 합니다.
Posted by 해비
2010. 9. 27. 17:32
프로젝트 생성 후
layout/main.xml 파일 열어서 CheckBox 관련 레이아웃 지정



소스파일 열어서 코드 추가
작성된 소스는 분홍색으로 표시하였습니다.

그 이외에는 기본소스...



그리고 실행된 결과...

Posted by 해비