반응형
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<!DOCTYPE html>
<html>
<head>
<style>
.ancestors * { 
  display: block;
  border: 2px solid lightgrey;
  color: lightgrey;
  padding: 5px;
  margin: 15px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
 
  $("input[name=a]").parent('td').parent('tr').css({"color""blue""border""2px solid blue"});
  $("input[name=a]").closest("tr").children('td').css({"color""red""border""2px solid red"});
  $("input[name=a]").closest("tr").children('td').eq(1).css({"color""brown""border""2px solid brown"});
  $("input[name=a]").closest("tr").children('td').eq(1).next('td').css({"color""yellow""border""2px solid yellow"});
  $("input[name=d]").closest("tr").find('td').eq(0).css({"color""green""border""2px solid green"});
  $("input[name=d]").closest("tr").children('td').next('td').css({"color""black""border""2px solid black"});
    
});
  
</script>
</head>
 
<body class="ancestors">
  <div>
      <table>
        <tr>
            <td><input type="text" name="a"/></td>
            <td><input type="text" name="b"/></td>
            <td><input type="text" name="c"/></td>
        </tr>
        <tr>
            <td><input type="text" name="d"/></td>
            <td><input type="text" name="e"/></td>
            <td><input type="text" name="f"/></td>
        </tr>
    </table>
  </div>
</body>
 
</html>
 
cs



결과





설명 참고


 셀렉터(Selector)사용예 선택된 요소 
 *$("*") 모든 요소
 #id$("#elementId") id='elementId'인 요소
 .class$('.className') class='className'인 요소
 element$("element") 요소이름(tagName)이 "element"인 모든 요소
 .class,  .class$(".intro, .demo") class가 intro 및 demo인 모든 요소 
 :first$("element:first") element로 선택되는 요소중 첫번째 요소
 :last$("element:last") element로 선택되는 요소중 마지막 요소
 :even$("element:even")element로 선택되는 요소중 짝수번째 요소 
 :odd$("element:odd") element로 선택되는 요소중 홀수번째 요소 
 :eq(index)$("element:eq(index)") element로 선택되는 요소중 index+1번째 요소 
 :gt(index)$("element:gt(index)") 
Ex) $("ul li:gt(3)")
element로 선택되는 요소중 index보다 큰 순번의 요소목록(list) 
 :lt(index)$("element:lt(index)")
Ex) $("ul li:lt(3"") 
element로 선택되는 요소중 index보다 작은 순번의 요소목록(list) 
 :empty$("element:empty") 
Ex) $("div:empty)
element로 선택되는 요소중 내용이 없는 요소
element:not(selector) $("div:not(:empty)") element로 선택되는 요소중 내용이 비어 있지 않은 요소
 :header$(":header");  H1, H2.. 와 같은 헤더 요소
 :animated$(":animated") 모든 animated 요소 
 element :contains('text')$("body :contains('영역')")body내에 "영역"이라는 문자열을 포함하는 모든 요소.
body가 빠지면, HTML, HEAD, SCRIPT등 모든 태그가 포함됨. 
 element :hidden$("#div1 :hidden")
element에 포함된 hidden속성을 갖는 요소 
 element:visible$("#div1 :visible") element에 포함된  
 s1, s2, s3#("th, td") s1이거나 s2이거나 s3에 해당하는 모든 요소
s1,s2,s3는 태그, ID, Class지정이 모두 가능함. 
 element[attribute]$("#div1 a[href]")element중 속성('attribute')을 갖는 모든 요소
 element[attribute=value]$("#div1 a[href=#]") element중 속성이 value인 모든 요소
 element[attribute!=value]$("#div1 a[href!=#]") element중 속성이 value가 아닌 모든 요소 
element중 속성이 없는 것도 포함됨.
 element[attribute$=value]$("#div1 a[href$=com]")element중 value로 끝나는 속성(attribute)를 갖는 요소
 element[attribute^=value]$("#div1 a[href^=www]")element중 value로 시작하는  속성(attribute)를 갖는 요소
 element :text$("#div1 :text") element에 포함된 요소중 type이 'text'인 모든 요소 
 element :password$("#div1 :password") element에 포함된 요소중 type이 'password'인 모든 요소 
 element :radio$("#div1 :radio") element에 포함된 요소중 type이 'radio'인 모든 요소 
 element :checkbox$("#div1 :checkbox") element에 포함된 요소중 type이 "checkbox"인 모든 요소 
 element :submit $("#div1 :submit")element에 포함된 요소중 type이 'submit'인 모든 요소 
 element :reset $("#div1 :reset") element에 포함된 요소중 type이 'reset'인 모든 요소 
 element :button$("#div1 :button") element에 포함된 요소중 type이 'button'인 모든 요소 
 element :image$("#div1 :image") element에 포함된 요소중 type이'image'인 모든 요소 
 element :file$("#div1 :file")element에 포함된 요소중 type이 'file'인 모든 요소
 element :enalbed$("#div1 :enabled") element에 포함된 요소중 상태가 enabled인 모든 요소 
 element :disabled$("#div1 :disabled") element에 포함된 요소중 상태가 disabled인 모든 요소 
 element :selected$("#div1 :selected")element에 포함된 요소중 selected속성이 true인 모든 요소 
 element :checked$("#div1 :checked") element에 포함된 요소중 checked속성이 true인 모든 요소 



출처: http://hjzzin.tistory.com/120 [말랑말랑하게 살아요.]

반응형
반응형

*개발 준비 진행


초반부터 책을 보고 잘 따라했다면 문제 없는 과정이다


-환경 설정


1
2
3
4
5
6
7
<bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
        <property name="url" value="jdbc:log4jdbc:mysql://127.0.0.1:3306/book_ex?
         useSSL=false&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"></property>
        <property name="username" value="root"></property>
        <property name="password" value="1234"></property>                  
</bean>
cs



디비 주소 뒤에 useSSL 여부에 따라 에러가 나는 경우가 있으니 주의하도록 하자



-테스트 작성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package org.common.web;
 
import java.sql.Connection;
 
import javax.inject.Inject;
import javax.sql.DataSource;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class DataSourceTest {
    
    @Inject
    private DataSource ds;
    
    @Test
    public void testConnection() throws Exception{
        
        try(Connection con = ds.getConnection()){
            
            System.out.println(con +"git bash commit용 테스트 메세지 ");
            
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }
 
}
cs


중간에 git 테스트 때문에 수정내역을 보기위해 했던 수정이다 넘어가자



- 빌드 테스트












로그와 Junit 도 Success


-테이블 생성



1
2
3
4
5
6
7
8
9
10
create table tbl_board(
    bno INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(200NOT NULL,
    content TEXT NULL,
    writer VARCHAR(50NOT NULL,
    regdate TIMESTAMP NOT NULL DEFAULT now(),
    viewcnt INT DEFAULT 0,
    PRIMARY KEY (bno)
    
);
cs




-용도별 쿼리 분류


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
게시물 등록
 
INSERT INTO `book_ex`.`tbl_board`
(
`title`,
`content`,
`writer`)
VALUES
(
'제목입니다',
'내용입니다',
'user00');
 
조회
 
select * from tbl_board where bno = 1;
 
전체 목록
 
select * from tbl_board where bno > 0 order by bno desc;
 
수정
 
update tbl_board set title = '수정된 제목' where bno = 1;
 
삭제
 
delete from tbl_board where bno = 1;
cs





-web.xml 에 필터 추가



1
2
3
4
5
6
7
8
9
10
11
12
13
    <filter>        
        <filter-name>enconding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 
cs


애플리케이션을 제작하다보면 한글 처리가 문제 될때가 많기때문에 미리 등록한다

톰캣에 설정하는 부분도있고 디비주소에 설정하는 부분도 있고 한글 처리는 항상 문제가 되는듯하다



-bootstrap, html 


해당 저서에는 bootstrap과 관련 템플릿을 통해서 웹페이지를 구성하기때문에

해당 자료를 다운받아 프로젝트에 넣어야한다


https://cafe.naver.com/gugucoding/798


여기서 받을수있다


static.zip 파일과 include.zip 파일을 압축 풀어서


bootstrap,dist,plugin 파일은 webapp/resource 아래에 두고

include 파일은 webapp/WEB-INF/views 아래에 두면된다




-html 파일 수정


home.jsp 파일을 수정해야한다


그전 장에서 톰캣의 설정이 되어있어야 테스트가 가능하다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ include file="include/header.jsp" %>
 
<!-- Main content -->
<section class="content">
    <div class="row">
        <!-- left colum -->
        <div class="col-md-12">
            <!-- genaral from element -->
            <div class="box">
                <div class="box-header with-border">
                    <h3 class="box-title"> HOME PAGE</h3>
                </div>
            </div>
        </div><!-- /.col (left) -->
    </div><!-- /.row -->
</section><!-- /.content -->
 
<%@ include file="include/footer.jsp" %>
cs




전부 적용되었는지 확인하고 서버를 실행해보면 디자인이 적용된걸 확인할수있다


반응형
반응형

Eclipse UML - 클래스 다이어그램


디자인 패턴을 검색해서 보다가 
클래스와 인터페이스들의 관계를 보기 쉽게 이미지로 표현한 사진을 보고
찾아보았습니다




Help > Install new software 에서










Work with 에

http://www.objectaid.com/update/current 를 

입력하시면 패키지 들이 뜨는데 전부 설치하시면 됩니다











설치후에는 

File > new 에서 uml을 검색하시면 화면처럼 ObjectAid Class Diagram 을 선택하시고





첨부될 패키지를 선택하시면됩니다

옵션은 따로 수정하지 않았습니다











최종적으로 Finish를 하시면 해당 경로에  .ucls 파일이 생성 됩니다





드래그해서 화면에옮기면 관계도가 표시됩니다


이상입니다~

반응형
반응형
*개발 준비표


 영역

 준비

 설명

 데이터베이스 관련

 관련 스키마,계정의 생성

개발에 사용할 스키마를 정의하고, 개발에 필요한 사용자 계정등을 생성합니다.

 테이블 설계와 생성

실제 작업할 테이블을 설계하고 각 테이블의 관계를 ERD 등을 사용해서 그려둡니다.

 더미 데이터 생성

테스트를 위한 가상의 의미없는 데이터를 추가해서 개발 시 결과를 확인할 때 사용합니다.

 스프링 MVC 관련

 패키지 구조 결정 

개발에 사용할 패키지 이름이나 코드 규칙 등을 미리 지정합니다

 개발 역할 분담

팀원들 간의 개발 역할을 어떨게 할 것인지를 결정합니다 수평적 혹은 수직적인 분할을 하게됩니다

 테스트 방법의 수립

개발의 중간에 팀원들의 현재 상황을 올바르게 인식할수있는 테스트 방법을 공유하고 지킵니다

 화면 관련

 화면 방식의 결정

JSP 위주의 개발인지,HTML 위주와 Javascript를 주로 사용하는 개발인지를 명확이 정확히 정합니다.

 절대경로, 상대경로의 결정

페이지에서 사용하는 링크의 처리를 하나로 통일해서 진행합니다 



*프로젝트의 필요한 라이브러리


MySQL 드라이버


Spring-test 모듈


MyBatis 모듈


MyBatis-Spring 모듈




*소스 구조





해당 형태로 준비되었고 진행할 예정이다


반응형
반응형

이전에 말했듯이 선행으로 하고있던 프로젝트 부터 시작하기때문에


기본적인 부분들은 전부 건너뛰고 


130페이지의 6.5 스프링에 빈으로 등록하기 부분을 학습할 예정이다


지난번의 내용은 Mysql 에서 테이블을 등록하고


Mybatis 테스트 코드 작성을 통해 디비 연동 부분을 테스트 해봤다



그부분에서 @Inject 를 사용한 부분이 계속 에러가 나서 골치가 아팠는데


그부분은 


root-context.xml 의


1
2
3
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>    
 </bean>
cs



이부분을 작성하지 않아서 생긴 오류 였다 참고 바란다


그렇게 해서 작성된 root-context.xml 부분은 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema
          /jdbc/spring-jdbc-4.3.xsd     
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/
        spring-context-4.3.xsd     
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
    <!-- Root Context: defines shared resources visible to all other web components -->
    
    <bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
        <property name="url" value="jdbc:log4jdbc:mysql://127.0.0.1:3306/book_ex?useSSL=false&amp;
        characterEncoding=UTF-8&amp;serverTimezone=UTC"    ></property>
        <property name="username" value="root"></property>
        <property name="password" value="1234"></property>                  
    </bean>
    
    <!-- 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="false">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
    </bean> 
    -->
    
 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="false">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
    </bean>
    
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>    
    </bean>
    
    
    <context:component-scan base-package="com.common.persistance"></context:component-scan>
    
</beans>
 
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>    
 </bean>
cs



이렇게 변경이 되었다


MemberDAOTest 를 작성했다 junit으로 테스트 하기위함으로 src/test/java 하위 경로에 작성해야한다



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package org.common.web;
 
import javax.inject.Inject;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import com.common.domain.MemberVO;
import com.common.persistance.MemberDAO;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class MemberDAOTest {
    
    @Inject
    private MemberDAO dao;
    
    @Test
    public void testTime() throws Exception{
        System.out.println(dao.getTime());
    }
    
    @Test
    public void testInsertMember() throws Exception{
        
        MemberVO vo = new MemberVO();
        vo.setUserid("user00");
        vo.setUserpw("user00");
        vo.setUsername("USER00");
        vo.setEmail("user00@aaa.com");
        
        dao.insertMember(vo);
    }
    
}
 
cs


그다음은 디비 로그 출력을 위해 로그 파일을 추가하는 부분이다


pom.xml 에 해당 내용을 추가해야 한다


1
2
3
4
5
6
        <!-- log4j -->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
            <version>1.16</version>
        </dependency>
cs



root-context.xml 부분도 바꿔준다


1
2
3
4
5
6
7
    <bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
        <property name="url" value="jdbc:log4jdbc:mysql://127.0.0.1:3306/book_ex?useSSL=false&amp;
        characterEncoding=UTF-8&amp;serverTimezone=UTC"    ></property>
        <property name="username" value="root"></property>
        <property name="password" value="1234"></property>                  
    </bean>
cs



이후에 

/src/main/resources

폴더에 파일 두개를 추가해서 설정을 추가해 주면된다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
log4jdbc.log4j2.properties
    log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
 
 
logback.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>
        <logger name="jdbc.sqlonly" level="DEBUG">
            <logger name="jdbc.sqltiming" level="INFO"/>
            <logger name="jdbc.audit" level="WARN"/>
            <logger name="jdbc.resultset" level="ERROR"/>
            <logger name="jdbc.resultsettable" level="ERROR"/>
            <logger name="jdbc.connection" level="INFO"/>
        </logger>
    </configuration>
cs




이렇게 해서 2부를 마친다

반응형
반응형



Git을 다룰수 있는 툴은 여러가지가 있겠지만 제가 사용해본것은 이클립스에서 Git을 설치해서 관리하는것과 Git Bash 입니다


Git Bash 는 윈도우에서 Git 을 명령어 형태로 다룰수있는 터미널 같은 프로그램입니다







Git이란 ?


 GIt은 프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템입니다. 빠른 수행 속도에 중점을 두고 있는 것이 특징입니다~


기본적으로 많이 들어보신 GitHub 가 있을것입니다


저는 GitLab. 이 private(개인소스) 버전이 무료여서 개인 저장소계정을 만들어서 올리고있습니다


참고로 GitHub는 7달러였나??  개인버전이 유료입니다




링크가 적혀있는것이 소스 저장소이고 Git Bash 에서 원격 저장소를 등록할때 사용하시면 됩니다


기본적인 설치법과 사용은 


http://freeprog.tistory.com/72


이곳이 정리가 잘되어있는것같습니다


소스를 올릴때의 순서가 헷갈려서 그부분만 정리를 해보았습니다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*기본 설정/상태 확인
$git config  //설정 확인 설정도 가능
$git --version  //버전 확인
$git status   //소스 수정후 수정내역 확인
$git remote add [단축이름] [url]   //원격 저장소 추가후 별칭주기
 
 
*소스 받을때
$git pull
 
*소스 올릴때
1) $git add .       //파일 추가|수정한것 전체 인덱싱 특정 파일은 파일명
2) $git commit -'initial commit'     //로컬 저장소 커밋
3) $git remote add origin(원격 저장소 별칭) [url]  //원격 저장소 인덱싱(파일 추가한 것이 있을때)
4) $git push origin(원격 저장소 별칭) master(브랜치 명)    // 원격 올리기
cs


이상입니다

반응형
반응형


최근에 공부가 부족하다고 생각하여 개인 프로젝트를 책과 함께 진행하려고 한다


책제목은 '코드로 배우는 스프링 웹 프로젝트' 이고 개발자들 사이에선 실무배우기 좋은 책으로 정평이 나있다


최근에 나오는 신기술들 에 비해선 약간 배우는 범위가 떨어질수는있다


하지만 이직이나 기업 환경을 경험해 보았다면 알수있듯이 기업에서 사용하는 스프링이나 JDK 버전은 현저히 낮기때문에


스프링을 배우지 않고 바로 스프링 부트를 배운다거나 해서 스프링을 쓰는 곳으로 이직했을때의 


환경설정 쪽의 불편함같은건 없어야 하기때문에


배워둘 필요가 있는 기술이라고 생각한다




일단 기본적으로 프로젝트를 어느정도 진행 해놓은 상태기때문에


기본설정은 자세히 다루지는 않을 예정이다 버전 스펙을 나열하자면


스프링 버전 : 4.3.8

JDK 버전 : 1.8

톰캣 버전 : 8.5

Mybatis

JUnit 4

maven


책의 내용에 따라 pom.xml에 필요한 라이브러리를 받아놓으면 된다


책의 좋은점을 보자면 테스트와 디버깅을 어느정도 잘 알려주고 있다고 생각한다

JUNIT 테스트코드 작성법

이클립스 디버깅등 알아두면 실무에 유용한 내용들이다


 초반 책의 내용을 따라하다가 주의할점이 있는데

DataSource 테스트 코드를 작성하고 테스트하면서 계속 에러를 내뿜는 부분이 있었다



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.sql.Connection;
 
import javax.inject.Inject;
import javax.sql.DataSource;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:/src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class DataSourceTest {
    
    @Inject
    private DataSource ds;
    
    @Test
    public void testConnection() throws Exception{
        
        try(Connection con = ds.getConnection()){
            
            System.out.println(con);
            
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }
 
}
cs



해당내용에서

1
2
3
4
5
6
org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'org.common.web.DataSourceTest'
Unsatisfied dependency expressed through field 'ds'
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 
'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: 
{@javax.inject.Inject()}
cs






이런 에러가 발생했고 어떤문제인지 몰라서 이것저것 해보다가



1
2
3
4
5
@ContextConfiguration(locations={"file:/src/main/webapp/WEB-INF/spring/**/root-context.xml"})
 
변경
 
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
cs



경로의 문제였다는걸 알고 변경했다 이부분을 주의하자


이후엔 마이바티스 연동까지 한 상태로 쿼리를 날리는 부분까지 선행이 완료된 상태이기 때문에 해당부분 부터 진행할것이다


반응형
반응형

html 안에 script 태그를 어느 위치에 삽입하는것이 가장 좋을까?
문득 궁금해서 찾아보았습니다.
다음은 stackoverflow 에서 가장 추천수가 많은 질문과 답변입니다.
발번역이므로 오역은 댓글로 지적받겠습니다 :)

HTML 문서에 자바 스크립트를 삽입 할 때 <script> 태그와 자바 스크립트를 넣을 수있는 가장 좋은 곳은 어디일까?

사람들은 자바스크립트를 <head> 섹션에 삽입하면 좋지 않다고 하지만, <body> 섹션의 시작 부분에 놓는 것 또한 나쁘다고 합니다.
왜냐하면 자바 스크립트는 페이지가 완전히 렌더링되기 전에 파싱되어야하기 때문입니다.
그럼 <body> 섹션의 끝에 <script> 태그를 놓는 방법만이 남은것 같아 보입니다.
그렇다면 <script> 태그를 넣을 수있는 가장 적합한 곳은 어디일까요?

브라우저가 웹 사이트를 로드 할 때 일어나는 일

  1. HTML 페이지 가져 오기 (예 : index.html)

  2. HTML 구문 분석을 시작합니다

  3. 파서는 외부 스크립트 파일을 참조하는 <script> 태그를 발견합니다.

  4. 브라우저가 스크립트 파일을 요청합니다. 한편 파서는 페이지의 다른 HTML을 구문 분석하는 것을 차단합니다.

  5. 잠시 후 스크립트가 다운로드 된 후 실행됩니다.

  6. 파서는 나머지 HTML 문서를 계속 파싱합니다.

4번은 좋지 않은 사용자 환경을 유발합니다.
웹 사이트는 기본적으로 모든 스크립트를 다운로드 할 때까지 로드를 중지합니다.
사용자는 웹 사이트가 로드 될 때까지 기다리는 것을 싫어합니다.

왜 이런 일이 일어날까요?

모든 스크립트는 document.write () 또는 다른 DOM 조작을 통해 자체 HTML을 삽입 할 수 있습니다.
이는 구문 분석기가 나머지 문서를 안전하게 구문 분석하기 전에 스크립트가 다운로드되고 실행될 때까지 기다려야 함을 의미합니다. 결국 스크립트는 자체 HTML을 문서에 삽입 할 수 있습니다.

그러나 대부분의 개발자는 문서가 로드되는 동안 더 이상 DOM을 조작하지 않습니다. 대신 문서를 수정하기 전에 문서가 로드 될 때까지 대기합니다.

예를 들면:

<!-- index.html -->
<html>
    <head>
        <title>매일매일 커밋하나씩</title>
        <script type="text/javascript" src="my-script.js"></script> 
    </head>
    <body>
        <div id="user-greeting">환영합니다!</div>
    </body>
</html>

Javascript:

// my-script.js 
document.addEventListener("DOMContentLoaded", function() {
    // this function runs when the DOM is ready, i.e. when the document has been parsed 
    document.getElementById("user-greeting").textContent = "Welcome back, Bart";
});

브라우저가 my-script.js가 다운로드되고 실행될 때까지 문서를 수정하지 않는다는 것을 브라우저가 알지 못하기 때문에 파서가 구문 분석을 중단합니다.

고전적인 방법

이 문제를 해결하기위한 이전 접근법은 <body> 맨 아래에 <script> 태그를 두는 것이 었습니다. 이렇게하면 파서가 맨 끝까지 차단되지 않기 때문입니다.

이 접근 방식에는 자체적 인 문제가 있습니다. 브라우저는 전체 문서가 구문 분석 될 때까지 스크립트 다운로드를 시작할 수 없습니다. 큰 스크립트 및 스타일 시트가있는 더 큰 웹 사이트의 경우 가능한 한 빨리 스크립트를 다운로드 할 수있는 것이 성능 향상에 매우 중요합니다. 웹 사이트가 2초 내에 로드되지 않으면 사람들은 다른 웹 사이트로 이동할 것 입니다.

최적의 솔루션에서 브라우저는 가능한 한 빨리 스크립트 다운로드를 시작하는 동시에 문서의 나머지 부분을 파싱합니다.

현대적인 접근법

오늘날 브라우저는 스크립트의 비동기 및 지연 특성을 지원합니다. 이러한 속성은 스크립트가 다운로드되는 동안 계속 구문 분석을하는 것이 안전하다는 것을 브라우저에 알려줍니다.

async

<script type="text/javascript" src="path/to/script1.js" async></script>
<script type="text/javascript" src="path/to/script2.js" async></script>

async 속성이있는 스크립트는 비동기 적으로 실행됩니다. 즉, 스크립트가 다운로드되는 즉시 브라우저가 차단되지 않고 실행됩니다.
이는 스크립트 2가 스크립트 1 이전에 다운로드 및 실행될 수 있음을 의미합니다.

http://caniuse.com/#feat=script-async 에 따르면 모든 브라우저의 90 %가이를 지원합니다.

defer

<script type="text/javascript" src="path/to/script1.js" defer></script>
<script type="text/javascript" src="path/to/script2.js" defer></script>

defer 속성을 가진 스크립트는 순서대로 (즉, 첫 번째 스크립트 1 다음에 스크립트 2) 실행됩니다. 이것은 또한 브라우저를 차단하지 않습니다.

defer는 비동기 스크립트와는 다르게 지연 스크립트는 전체 문서가 로드된 후에만 실행됩니다.

http://caniuse.com/#feat=script-defer 에 따르면 모든 브라우저 중 90 %가이를 지원합니다. 92 %는 적어도 부분적으로 그것을 지원합니다.

브라우저 호환성에 대한 중요한 참고 사항 : 일부 경우 IE <= 9는 지연된 스크립트를 순서대로 실행하지 않을 수 있습니다. 해당 브라우저를 지원해야하는 경우 먼저 읽으십시오!

결론

현재의 최신 기술은 스크립트를 <head> 태그에 넣고 async 또는 defer 속성을 사용하는 것입니다. 이렇게하면 브라우저를 차단하지 않고도 스크립트를 최대한 빨리 다운로드 할 수 있습니다.

좋은 점은 이 속성을 지원하지 않는 브라우저의 20%에서도 웹 사이트가 여전히 올바르게 로드 되며 나머지 80 %는 속도가 빨라진다는 것입니다.



출처: http://dailydev.tistory.com/15 [매일매일 커밋하나씩]

반응형
반응형

1. 라이브러리 jar 파일


quart 라이브러리


http://www.quartz-scheduler.org/


quartz-all-1.6.6.jar




quart - struts1 연동 라이브러리


http://demo.jgsullivan.com/struts/download.html


jgs-struts-0.3-dev.jar


jgs-quartz-0.1d.jar




2. Quart 참조 링크


anyframework


http://dev.anyframejava.org/docs/anyframe/4.2.0/reference/htmlsingle/anyframe.html#tech_ss_sec001








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
==============================================================
 
QuartzTest.java
 
==============================================================
 
01 package kr.co.rastech.common.quartz;
02 
03 import java.text.SimpleDateFormat;
04 import java.util.Date;
05 
06 import org.apache.commons.logging.Log;
07 import org.apache.commons.logging.LogFactory;
08 import org.quartz.Job;
09 import org.quartz.JobExecutionContext;
10 import org.quartz.JobExecutionException;
11 
12 
13 public class QuartzTest implements Job{
14 
15     private Log logger = LogFactory.getLog(this.getClass());
16 
17     @Override
18     public void execute(JobExecutionContext arg0) throws JobExecutionException {
19         long now = System.currentTimeMillis();
20 
21         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
22 
23 
24         String nowDateTime = sdf.format(new Date(now));
25 
26         logger.debug(nowDateTime + " : test");
27     }
28 
29 }
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
web.xml
 
 
 
==============================================================
 
 
 
    <servlet>
 
        <servlet-name>ActionServlet</servlet-name>
 
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
 
        <init-param>
 
            <param-name>config</param-name>
 
            <param-value>/WEB-INF/config/struts-config.xml</param-value>
 
        </init-param>
 
        <load-on-startup>1</load-on-startup>
 
    </servlet>
 
    
 
    <servlet-mapping>
 
        <servlet-name>ActionServlet</servlet-name>
 
        <url-pattern>*.do</url-pattern>
 
    </servlet-mapping>
 
    
 
    <servlet>
 
        <servlet-name>QuartzInitializer</servlet-name>
 
        <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
 
        <init-param>
 
            <param-name>shutdown-on-unload</param-name>
 
            <param-value>true</param-value>
 
        </init-param>
 
        <init-param>
 
        <param-name>start-scheduler-on-load</param-name>
 
      <param-value>true</param-value>
 
    </init-param>
 
        <load-on-startup>3</load-on-startup>
 
    </servlet>
 
    
 
==============================================================
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
struts-config.xml
 
 
 
/WEB-INF/config/struts-config.xml위치
 
==============================================================
 
 
 
<struts-config>
 
 
 
    <action-mappings>
 
        <action path="/test" forward="/index.jsp"></action>
 
 
 
    </action-mappings>
 
 
 
    <!-- Quartz framework 2010.08.09 -->
 
    <plug-in className="com.jgsullivan.struts.plugins.QuartzPlugIn">
 
        <set-property property="configPath" value="/WEB-INF/quartz-config.xml"/>
 
    </plug-in>
 
</struts-config>
 
==============================================================
 
 
 
quartz-config.xml
 
 
 
/WEB-INF/quartz-config.xml위치
 
==============================================================
 
 
 
<?xml version="1.0" encoding="UTF-8"?>
 
 
 
<quartz-config>
 
    <trigger-group>
 
        <trigger name="secondTrigger" className="org.quartz.CronTrigger">
 
            <set-property property="timeZone" value="Pacific/Marquesas" />
 
            <set-property property="cronExpression" value="* * * * * ?" />
 
        </trigger>
 
    </trigger-group>
 
 
 
 
 
    <job-group>
 
        <job name="dumbJob" className="kr.co.rastech.common.quartz.QuartzTest" />
 
    </job-group>
 
</quartz-config>
cs

 

※ 시간을 아무리설정해도 잘안맞는다 싶으면 timeZone을 서버컴시간으로 바꿔야합니다.

    [<set-property property="timeZone" value="Pacific/Marquesas" />]

    이부분을 삭제하면 default로 서버컴시간이 설정됩니다.

※ WAS가 이중화 되어있으면 2번씩 실행 될수 있으니 아이피 체크해야 합니다.



출처: http://thdnf1004.tistory.com/entry/quart-연동-스케쥴링 [야근없는 세상을 위해~]

반응형
반응형

java에서 exel 파일 만들때 병합이라든지 폰트등 세세한 설정을 보여주는 예제 입니다.


일단 아래와 같은 파일을 생성하는 소스 입니다.





스프링에 엑셀 다운 받는 기능 추가는 다음 링크 참조 http://huskdoll.tistory.com/570


배경색 종류는 다음 링크 참조하세요. http://huskdoll.tistory.com/607



내용은 소스의 주석을 참고하여 주시기 바랍니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Row row = null;
Cell cell = null;
int rowCount = 0;
int cellCount = 0;
 
//1.셀 스타일 및 폰트 설정
CellStyle styleOfBoardFillFontBlackBold16 = workbook.createCellStyle();
//정렬
styleOfBoardFillFontBlackBold16.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
styleOfBoardFillFontBlackBold16.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
//배경색
styleOfBoardFillFontBlackBold16.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
styleOfBoardFillFontBlackBold16.setFillPattern(CellStyle.SOLID_FOREGROUND);
//테두리 선 (우,좌,위,아래)
styleOfBoardFillFontBlackBold16.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontBlackBold16.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontBlackBold16.setBorderTop(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontBlackBold16.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//폰트 설정
Font fontOfGothicBlackBold16 = workbook.createFont();
fontOfGothicBlackBold16.setFontName("나눔고딕"); //글씨체
fontOfGothicBlackBold16.setFontHeight((short)(16*20)); //사이즈
fontOfGothicBlackBold16.setBoldweight(Font.BOLDWEIGHT_BOLD); //볼드 (굵게)
styleOfBoardFillFontBlackBold16.setFont(fontOfGothicBlackBold16);
 
//2.셀 스타일 및 폰트 설정
CellStyle styleOfBoardFillFontRedBold14 = workbook.createCellStyle();
//정렬
styleOfBoardFillFontRedBold14.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
styleOfBoardFillFontRedBold14.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
//배경색
styleOfBoardFillFontRedBold14.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
styleOfBoardFillFontRedBold14.setFillPattern(CellStyle.SOLID_FOREGROUND);
//테두리 선 (우,좌,위,아래)
styleOfBoardFillFontRedBold14.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontRedBold14.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontRedBold14.setBorderTop(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontRedBold14.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//폰트 설정
Font RedBold14 = workbook.createFont();
RedBold14.setFontName("나눔고딕"); //글씨체
RedBold14.setColor(HSSFColor.RED.index);
RedBold14.setFontHeight((short)(14*20)); //사이즈
RedBold14.setBoldweight(Font.BOLDWEIGHT_BOLD); //볼드 (굵게)
styleOfBoardFillFontRedBold14.setFont(RedBold14);
 
//3.셀 스타일 및 폰트 설정
CellStyle styleOfBoardFillFontBlack11 = workbook.createCellStyle();
//정렬
styleOfBoardFillFontBlack11.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
styleOfBoardFillFontBlack11.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
//배경색
styleOfBoardFillFontBlack11.setFillForegroundColor(IndexedColors.LAVENDER.getIndex());
styleOfBoardFillFontBlack11.setFillPattern(CellStyle.SOLID_FOREGROUND);
//테두리 선 (우,좌,위,아래)
styleOfBoardFillFontBlack11.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontBlack11.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontBlack11.setBorderTop(HSSFCellStyle.BORDER_THIN);
styleOfBoardFillFontBlack11.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//폰트 설정
Font Black11 = workbook.createFont();
Black11.setFontName("나눔고딕"); //글씨체
Black11.setFontHeight((short)(11*20)); //사이즈
styleOfBoardFillFontBlack11.setFont(Black11);
 
//4.셀 스타일 및 폰트 설정(일반 텍스트)
CellStyle styleOfBoardFontBlack11 = workbook.createCellStyle();
//정렬
styleOfBoardFontBlack11.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬
styleOfBoardFontBlack11.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
//테두리 선 (우,좌,위,아래)
styleOfBoardFontBlack11.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleOfBoardFontBlack11.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleOfBoardFontBlack11.setBorderTop(HSSFCellStyle.BORDER_THIN);
styleOfBoardFontBlack11.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//폰트 설정 (위 폰트 사용)
styleOfBoardFontBlack11.setFont(Black11);
 
//4.셀 스타일 및 폰트 설정(금액)
CellStyle styleOfBoardMoneyFontBlack11 = workbook.createCellStyle();
//정렬
styleOfBoardMoneyFontBlack11.setAlignment(CellStyle.ALIGN_RIGHT); //우측 정렬
styleOfBoardMoneyFontBlack11.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬
//테두리 선 (우,좌,위,아래)
styleOfBoardMoneyFontBlack11.setBorderRight(HSSFCellStyle.BORDER_THIN);
styleOfBoardMoneyFontBlack11.setBorderLeft(HSSFCellStyle.BORDER_THIN);
styleOfBoardMoneyFontBlack11.setBorderTop(HSSFCellStyle.BORDER_THIN);
styleOfBoardMoneyFontBlack11.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//폰트 설정 (위 폰트 사용)
styleOfBoardMoneyFontBlack11.setFont(Black11);
//천단위 쉼표, 금액
styleOfBoardMoneyFontBlack11.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));
             
//Sheet 생성
Sheet sheet = workbook.createSheet("도서정보");
 
//눈금선 없애기
sheet.setDisplayGridlines(false);
 
//첫줄 개행
rowCount++;
 
//열 생성
row = sheet.createRow(rowCount++);
cellCount = 0; //셀 카운트 초기화
 
//셀 병합
sheet.addMergedRegion(new CellRangeAddress(1,4,0,1)); //열시작, 열종료, 행시작, 행종료 (자바배열과 같이 0부터 시작)
sheet.addMergedRegion(new CellRangeAddress(1,1,2,6));
 
//셀 생성
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16); //위에서 설정한셀 스타일 셋팅
cell.setCellValue("A문고 상태");
 
//라인을 그리기 위해 실행 (병합이 되어도 테두리 라인을 그리기 위해 셀을 생성하고 스타입을 셋팅)
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontRedBold14);
cell.setCellValue("도서 정보");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontRedBold14);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontRedBold14);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontRedBold14);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontRedBold14);
 
//2열 작성
row = sheet.createRow(rowCount++);
cellCount = 0;
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlack11);
cell.setCellValue("ID");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlack11);
cell.setCellValue("도서명");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlack11);
cell.setCellValue("작가");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlack11);
cell.setCellValue("가격");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlack11);
cell.setCellValue("수량");
 
//3열 작성
row = sheet.createRow(rowCount++);
cellCount = 0;
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFontBlack11);
cell.setCellValue("b1");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFontBlack11);
cell.setCellValue("레미제라블");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFontBlack11);
cell.setCellValue("빅토르 위고");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardMoneyFontBlack11);
cell.setCellValue(3000);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardMoneyFontBlack11);
cell.setCellValue(32);
 
//4열 작성
row = sheet.createRow(rowCount++);
cellCount = 0;
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFillFontBlackBold16);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFontBlack11);
cell.setCellValue("a32");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFontBlack11);
cell.setCellValue("홍길동");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardFontBlack11);
cell.setCellValue("허균");
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardMoneyFontBlack11);
cell.setCellValue(8000);
 
cell = row.createCell(cellCount++);
cell.setCellStyle(styleOfBoardMoneyFontBlack11);
cell.setCellValue(15);


추가: 셀 표시형식(날짜)

CellStyle style = workbook.createCellStyle();

style.setDataFormat((short) 0xe);


출처: http://huskdoll.tistory.com/795

반응형
반응형
12345···9

+ Recent posts