728x90

1. 전기

 

 V(볼트)= 전압

-> 전기를 흐르게 하는 압력

 

 전위 : 전기의 높이. 물의 높이인 수위차랑 동일함.

-> 전압 = 두 지점 사이의 전위 차

 

 A(암페어)= 전류

-> 전선 속에 매초 동안 흐르는 전기의 양(= 수량)

 

 W(와트)=소비 전력

-> 1초 동안 흐르는 전력

전력(W) = 전압(V) x 전류(A)

 

 kWh(키로와트시) = 전력량

1200w 짜리 기구를 두시간 쓴다면 2.4kwh 사용

 

 전기의 어원

그리스어로 호박을 electron이라 하는데

전기 electricity의 어원이 됨.

 

 전기?

전기는 모든 물질에 존재하며

모든 물질은 원자로 구성

원자는 중심에 원자핵과 주변에 전자가 존재.

=> 전자의 움직임 = 전기

 

 원자핵=양성자+중성자

주변을 도는 전자는 -성질을 가짐

* 보통 원자는 양성자 수 = 전자수 이므로 전기적으로 중성

but 열이나 빛을 외부로부터 받으면 전자가 원자밖으로 나가게됨 => 자유전자

-> 원자의 -가 줄어 전기적으로 +가 됨.(양 전하)

-> 자유 전자는 다른 원자에 붙어 그 원자는 -가 됨(음 전하)

=> 이와 같이 원자가 전기적 성질을 띄는 것을 대전이라고 함.

* 전기적으로 +/- 에너지를 가진 것을 전하라고 함.

 

 정전기력/쿨롱힘

전하는 같은 극끼리 반발하지만 다른 극끼리 당기는 성질

이 힘을 정전기력/쿨롱힘이라 한다

* 전하가 전기적 성질을 띈 상태에서 이동하지 않는 것을 정전기라 함.

 

 물질

도체 : 전기가 통하는 것

부도체 : 전기 안통하는 것

반도체 : 중간

 

 방전

-전자가 +로 이동해서 대전 상태가 사라지는 것을 방전이라 한다.

ex) 번개(구름의 알갱이가 마찰하여 정전기 발생 -> 전압 상승 -> 지상으로 방전)

 

 전류

전하가 연속적으로 이동하는 현상 -> 전기가 흐른다.

* 전자의 방향과 전류의 방향은 반대

 

2. 전기 회로

 

 전기 회로

전기가 지나가는 통로

 

 기전력/전원전압

전원이 가진 전압

 

 부하

전기에너지를 빛/열에너지로 변환하는 일(저항)

 

 건전지(직류) : 전류의 방향과 세기가 일정

-> 직류가 흐르는 회로를 직류회로

 콘세트(교류) : 초당 60번 방향과 세기가 변함

 

3. 전기가 하는일

 

 열진동

- 원자는 항상 진동

 

 절대 0도

- 열진동이 없을때 온도

 

 열 발생

- 원자의 진동 -> 전자가 충돌 -> 열 발생 + 전기 저항 증가

 

 자기력선

- N극에서 S극을 향함

 

 지자기

- 지구의 자기력

 

 자기력선 발생

- 전선에 전류가 흐를때 자기력선 발생.

- 전류의 진행방향에서 오른쪽으로 회전하는 방향(앙페르의 오른나사법칙)

 

 플레밍의 왼손 법칙

- 검지 : 자기력선 방향

- 중지 : 전류 방향

- 엄지 : 도체가 움직이는 방향

=> S극과 N각 사이에 놓은 도체에 전류를 흘리면 도체는 위로 움직이게 된다.(직류 모터)

 

 직류 모터

1. 플레밍의 왼손 법칙에 따라 위로 움직이므로 코일이 수직이 됨

2. 코일이 수직이 되면 (+)와 (-)가 바뀌므로 같은 방향으로 계속 회전

 

 플레밍의 오른손 법칙

- 자석의 N극에서 S극으로 향하는 자기력선을 가로지르는 도체를 움직임

- 기전력 발생 -> 전류 흐름

- 중지 : 전류 흐름

- 검지 : 자기력선 방향

- 엄지 : 도체의 운동방향

=> 발전기

 

4. 전기 만드는 방법

 

- 전기는 플레밍의 오른손 법칙에 따라 만듬  

- 그러나 전선이 자기력선 내에서 회전하므로

시간에 따라 크기와 발향이 물결 모양으로 반복하는 전기가 생성(기전력)

- 90도 지점에서 기전력이 최대

- 180도에서 기전력이 0

- 270에서 기전력이 -로 최대

- 360도에서 0

* 전선이 매초 60회 회전할경우 60hz의 전기가 발생

 

 전지

- 화학 전지 : 화학 반응 이용

 - 1차 전지 : 충전/재사용 불가 - 망간/알칼리/리튬

 - 2차 전지 : 충전/재사용 가능 - 납축전지/리켈-수소 2차전지/리튬이온 2차전지 

 - 연료 전지

 

- 물리 전지 : 빛/열 에너지

 - 태양전지/열기전력전지

 

볼타 전지

- 아연판/구리판/묽은황산(전해질)로 구성

1. 아연 원자가 아연판에 전자만 남기고 아연이온이 황산에 녹음

2. 아연판의 전자가 구리가 이동

3. 아연 이온이 나타나면 묽은 황산의 수소 이온은 구리판으로 이동한 전자와 만나 수소가스로 변함

4. 다시 아연판의 전자가 구리판으로 이동

 

 건전지의 구성

1. +극 물질

2. -극 물질

3. 전해질

 

 발전 원리

1. 수력 발전 : 물의 위치 에너지로 수차를 돌려 발전기를 회전

2. 화력 발전 : 석유/석탄 등을 연소 -> 물을 증기로 전환 -> 터빈을 돌려 발전기 회전

3. 원자력 발전 : 핵물질이 분열할때 열 발생 -> 물을 증기로 전환 -> 터빈을 돌려 발전기 회전

 

5. 반도체 소자

 

 반도체

- 도체와 부도체의 중간 성질을 가진 물질

ex) 실리콘, 게르마늄

 

 반도체 소자

- 반도체로 만든 다이오드나 트랜지스터 등의 부품

 

 비고유 반도체

- 실리콘이나 게르마늄에 불순물을 첨가한 것

 

 고유 반도체

- 반도체에 불순물을 첨가하지 않은 것

 

 실리콘

- 실리콘은 가장 바깥에 4개의 가전자를 가짐

-> 각 원자가 4개를 서로 공유한채 연결

-> 자유전자가 없어 전기가 통하지 않음

 

 N형 반도체

- 실리콘에 인(가전자 5개)를 약간 넣음

-> 인과 실리콘이 결합

-> 인이 가진 가전자 1개가 나옴(자유 전자)

-> N형 반도체

 

 P형 반도체

- 실리콘에 붕소(가전자 3개) 첨가

-> 실리콘과 붕소가 결합

-> 전자가 1개가 부족하므로 빈자리(양공)이 생김

-> +전하를 띈 자유전자 역활을 함

 

 다이오드

- P형 반도체와 N형 반도체를 결합 -> PN접합 구조 -> 다이오드

- 양극(아노드) : P형 반도체의 전극

- 음극(캐소드) : N형 반도체의 전극

- 정류 작용 : 전류를 한 방향으로 흐르게만 함.

 

 정류 작용

1. PN 접합의 접합부에 P형 반도체의 양공으로 N형 반도체의 자유전자가 이동

2. 중간에 양공과 자유전자가 존재하지 않는 부분(전위 방벽)이 발생

3. 양공과 자유전자의 이동을 막음

 

 역방향 바이어스

- 다이오드 양극에 건전지의 -극 연결

- 다이오드 음극에 건전지 +극 연결

1. P형 반도체의 양공과 N형 반도체의 양극은 각각의 전극에 끌려감

2. 전위 장벽이 커짐

3. 전류가 거의 흐르지 않음

 

  순방향 바이어스

- 다이오드 양극에 건전지 +극 연결

- 다이오드 음극에 건전지 -극 연결

1. N형 반도체의 자유전자가 건전지 -극에서 나온 전자에 밀림

2. 전위 장벽을 넘어 양극으로 이동

3. P형 반도체의 양공도 -로 끌려와 N형으로 이동

4. 전기가 흐름

 

 발광 다이오드

- PN 접합부에 전자와 양공이 결합해 소멸

-> 에너지가 빛이 되어 방출

 

 트랜지스터

- 전극에 가해진 전압이나 전류를 제어하여 신호를 증폭하거나 스위치 역활을 함

ex) NPN형, PNP형

- B : 베이스, C : 컬렉터, E : 에미터 세 전극으로 구성

 

 NPN형 트랜지스터 - 전류가 안흐르는 경우

1. 컬렉터를 전지 +과 연결하고, 에미터를 전지 -극과 연결하는 경우

 - 컬렉터의 전자는 +극 방향으로 모임

 - 에미터의 전자는 -극에 밀려 베이스-에미터 접합면으로 모임

2. 베이스의 양공은 컬렉터의 +와 에미터의 - 힘으로 에미터 접합면으로 모임

3. 베이스-에미터 접합면에 전자나 양공이 없어짐

4. 전류가 흐르지 않음

 

 NPN형 트랜지스터 - 전류가 흐르는 경우

1. 위 상태에서 추가 전지 +극과 베이스를 연결하고, -극을 에미터에 연결

2. 추가된 전자가 베이스에서 이미터로 이동

3. 일부는 베이스 안의 양공과 결합하나 나머지는 베이스-컬렉터 접합면의 근처로 넘어가 +극으로 흘러감

* 베이스 전류 : 베이스에서 에미터로 흐르는 전류

* 컬렉터 전류 : 베이스 전류가 흐르면서 컬렉터에서 에미터로 흐르는 전류

* 컬렉터 전류 > 베이스 전류 - 약간의 베이스 전류로 컬렉터 전류를 제어

=> 작은 전류로 큰 전류를 제어 가능

 

 트랜지스터의 장점 

- 스위치와 달리 물리적인 접점이 없어 고장나지 않음

- 빠르고 정밀한 제어 가능.

 

300x250

'로봇 > 전기전자&메카' 카테고리의 다른 글

마이크로프로세서 메카트로닉스 제어 - 1 AVR계열 ATmega128 개요  (0) 2020.05.11
전자 회로  (0) 2020.04.22
전기수학3  (0) 2020.04.21
전기 수학2  (0) 2020.04.21
전기 수학  (0) 2020.04.21
728x90

jpa로 repository 인터페이스를 구현해서 사용하려는데


자꾸 sequence "hibernate_Sequence" not found 라고 에러가 발생했다.




@generatedValue 을 하면 알아서 시퀀스나 아이덴티티 나 테이블로 만들어서 처리할탠대


시퀀스가 생성이 안 됬는지 계속 안되더라


그러고 보니


jpa 설정 중에


실행할때 entity에 관한 테이블을 생성시키고 삭제시켜주는 설정이 있었는데


이게 제대로 동작이 안된 것 같았다.


                <prop key="hibernate.hbm2ddl.auto">create</prop>


다시 확인해보니 역시나


hbm2ddl 을 hbm2dll.auto 로 잘못 적어서 이 속성이 적용 되지 않았었다


속성을 제대로 고쳐주니 junit test가 잘돌아간다



300x250
728x90

@Repository 인터페이스를


@Autowired를 시켯을때 아래와 같은 익셉션이 발생하였다.



org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [jpabook.query.repository.MemberRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:838)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1282)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1195)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1085)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5349)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5641)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)



https://coderanch.com/t/621607/framework/Autowired-find-repository-bean-identified

를 참고하여 해결할 수 가 있엇다.



문제는 context:component-scan만 하고


jpa:repositories를 따로 등록 안해서 발생한 걸로 확인했다.


    <jpa:repositories base-package="jpabook.query.repository" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entitiyManagerFactory"/>
   


300x250
728x90

출처 :  http://lng1982.tistory.com/135


신입으로 입사하고 소스코드 분석하는데 도움이 되길래 가져왔습니다.


이클립스에서 maven 멀티 모듈 생성 후 Run on Server를 이용하여 각 모듈 구동하는 방법

tools/maven 2013.03.27 17:10

프로젝트를 진행하다 보면 관리자 웹 사이트, 사용자 웹 사이트, 모바일 웹 사이트 등을 각각 개발하게 되는데 이때 사이트 별로 웹 프로젝트를 생성하여 개발을 하는 경우가 있다.


위와 같은 방식으로 프로젝트를 구성하게 되면 어떤 문제가 발생할 수 있을까? 

중복 소스가 발생할 수 있고, 개발 공수도 많이 들어가게 된다. 가장 큰 문제는 중복 코드로 인하여 유지 보수가 엄청나게 힘들어 질 수 있다는 것이다.


이같은 문제를 해소하기 위해 대게 공통으로 사용할 프로젝트를 생성한 후 각각의 프로젝트가 공통 프로젝트를 참조하는 식의 구성으로 개발을 진행하게 된다.


오늘 포스팅은 메이븐 멀티 모듈 생성 후 이클립스 톰켓 플러그인을 통해 웹 애플리케이션 서버를 구동하는 방법에 대해서 정리할 것이다.


나는 다음과 같이 메이븐 멀티 모듈을 구성할 것이다.

스프링 프레임워크 기반으로 웹 프로젝트를 구성하며 레이어 아키텍트를 기반으로 web에 의존이 강한 콘트롤러 레이어는 admin과 user 모듈로 생성하고, 비즈니스 계층에 해당하는 서비스와 DAO 레이어는 comm 모듈로 생성할 것이다.

이와 같이 모듈을 구성하게 되면 이후에 모바일 웹 사이트가 새로 생성이 되었을 때 새로운 mobile 이라는 모듈을 만들어 주고, 이미 개발되어 있고 비즈니스 로직이 담겨져 있는 comm 모듈을 참조 하면 되기 때문이다.

comm : service layer, DAO layer

admin : controller layer

user : controller layer


  • 메이븐 멀티 모듈 생성 방법

먼저 root 메이븐 프로젝트를 생성해야 한다.

New Maven Project > Create a simple project 체크 > group id, artifact id 입력

packaging은 pom 으로 지정 후 Finish

생성된 mavenMultiModule 프로젝트를 확인해 보면 src 디렉토리가 존재하는데 root 메이븐 프로젝트는 서브 모듈 디렉토리만 관리하므로 삭제한다.


이제 root 메이븐 프로젝트에 모듈을 추가할 것이다.


comm 모듈 추가

root 메이븐 프로젝트 선택 후 오른쪽 마우스를 클릭하면 다음과 같은 메뉴가 나올 것이고, New Maven Module Project를 클릭한다.

New Maven Module Project 클릭 후 나오는 화면에서 Create a simple project 체크 후 Finish 한다.


comm은 admin과 user 프로젝트에 공통 소스를 제공하는 모듈이기 때문에 Packaging을 jar로 지정 후 생성하면 된다.



admin 모듈 추가

위에서 생성한 comm과 동일한 방법으로 생성을 한다. 다만, admin은 웹 프로젝트로 생성을 해야 하기 때문에 Packaging은 war로 지정한 후 생성해야 한다.



user 프로젝트도 admin과 같은 방법으로 모듈을 생성하면 되니 생략한다.

자. 여기까지가 멀티 모듈을 생성하는 방법이었다.


root 모듈의 pom.xml을 열어보면 modules 엘리머트에 추가한 모듈 정보가 보일 것이다.

<modules>

<module>comm</module>

<module>admin</module>

<module>user</module>

</modules>


서브 모듈의 pom.xml 은 다음과 같이 parent 엘리먼트가 정의되어 있다.

<parent>

<groupId>com.maven</groupId>

<artifactId>mavenMultiModule</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>


다음은 완성된 메이븐 멀티 모듈 프로젝트 구성이다. 이클립스의 Package Explorer에서 봤을 때에는 4개의 프로젝트가 생성되어 보여지는 것 같지만 실제 mavenMultiModule 프로젝트 한 개만 생성되어 있는 것이다.


이와 같이 메이븐 멀티 모듈 프로젝트로 구성을 하면 형상 관리 시스템으로 버전 관리를 할 때에도 하나의 프로젝트만 관리하면 되기 때문에 편리하다.


  • 다이나믹 웹 프로젝트에 comm 공통 프로젝트 의존성 추가 방법

admin 프로젝트에서 comm 프로젝트의 jar파일을 의존성 라이브러리에 추가하기 위해서는 다음과 같이 dependency를 추가해 주면 된다. (admin 서브 프로젝트의 pom.xml)

<dependencies>

        <dependency>

                <groupId>com.kyu.comm</groupId>

               <artifactId>comm</artifactId>

               <version>1.0.0</version>

        </dependency>

</dependencies>


위에서 comm 라이브러리의 version 정보를 제외시킬 수 있는 방법이 있는데 top level의 pom.xml 에 다음과 같이 정의해 주면 admin에 추가한 version 정보는 생략해도 된다.

<dependencyManagement>

        <dependencies>

                <dependency>

                       <groupId>com.kyu.comm</groupId>

                       <artifactId>comm</artifactId>

                       <version>1.0.0</version>

                       <type>jar</type>

                       <scope>compile</scope>

                </dependency>

        </dependencies>

</dependencyManagement>


  • 이클립스 톰켓 플러그인을 통해 웹 애플리케이선 구동

대게 위와 같은 구조로 프로젝트를 구성한 후 빌드를 하게 되면 comm 모듈이 jar로 패키징 되어 admin과  user 프로젝트의 WEB-INF/lib 디렉토리에 배포가 되고 WAS를 구동하게 되는데 이와 같이 maven을 이용하여 매번 패키징 후 WAS를 띄운다는 것은 번거롭기도 하고, 귀찮다.


위의 번거로움을 덜기 위한 방법으로 몇 가지 설정을 통해 웹 애플리케이션을 구동하는 방법에 대해서 알아본다.


admin 프로젝트 > Java Build Path의 Libraries 탭에서 다음과 같이 comm 프로젝트의 classes 디렉토리 경로를 추가해 준다.



Deployment Assembly 이동 > Add > Java Build Path Entries 선택한 후 다음과 같이 설정한다.


여기까지다.

comm 프로젝트의 클래스 패스를 admin, user 프로젝트에 추가해 주기만 하면 maven으로 패키징 절차 없이 바로 웹 애플리케이션을 띄울 수 있다.


아직 메이븐 멀티 모듈 프로젝트 구성을 실무에 적용해 보지는 못했지만 차후에 신규 프로젝트 개발 시 꼭 적용하고 경험해 봐야 겠다.


300x250
728x90

entityManagerFactory 에 등록되는 mappingResource의 value가 입력되는


orm.xml파일의 예시이다.


<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" version="2.0">
    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <entity-listeners>
                <entity-listener class="org.springframework.data.jpa.domain.support.AuditingEntityListener" />
            </entity-listeners>
        </persistence-unit-defaults>
    </persistence-unit-metadata>
</entity-mappings>

300x250
728x90

참조 :  http://blog.naver.com/kst7132/220802373470


1.  메이븐 의존성 주입

tiles-jsp

tiles-extras

tiles-servlet


2.servlet-context  에 빈 추가


  -뷰 리졸버

<!--
        다수의 뷰 리졸버가 있을시 인터널뷰리졸버는 마지막이 되어야 한다.
        tiles를 동적으로 맵핑하지 않으면 UrlBasedViewResolver bean을 굳이 추가 할 필요는 없다
        동적 맵핑을 이용한다면 추가한다.
     -->
    <beans:bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
        <beans:property name="order" value="1"/>
    </beans:bean>


  -설정

<!--정의 파일 등-->

    <beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">

        <beans:property name="definitions">
            <beans:list>
                <beans:value>classpath:META-INF/tiles.xml</beans:value>
            </beans:list>
        </beans:property>
        <beans:property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory"/>
    </beans:bean>


3.설정 경로에 tiles.xml 등록



300x250
728x90

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>

    <!-- 임시 레이아웃 -->
    <definition name="menu.layout" template="/WEB-INF/views/tiles/menu.layout.jsp">
        <put-attribute name="layout.head" value="/WEB-INF/views/tiles/head.jsp"></put-attribute>
        <put-attribute name="layout.foot" value="/WEB-INF/views/tiles/foot.jsp"></put-attribute>
        <put-attribute name="layout.content" value=""></put-attribute>
        <put-attribute name="layout.menu" value=""></put-attribute>   
    </definition>

    <definition name="nomenu.layout" template="/WEB-INF/views/tiles/nomenu.layout.jsp">
        <put-attribute name="layout.head" value="/WEB-INF/views/tiles/head.jsp"></put-attribute>
        <put-attribute name="layout.foot" value="/WEB-INF/views/tiles/foot.jsp"></put-attribute>
        <put-attribute name="layout.content" value=""></put-attribute>
    </definition>
   
    <definition name="none.layout" template="/WEB-INF/views/tiles/none.layout.jsp">
        <put-attribute name="layout.head" value="/WEB-INF/views/tiles/head.jsp"></put-attribute>
        <put-attribute name="layout.foot" value="/WEB-INF/views/tiles/foot.jsp"></put-attribute>
        <put-attribute name="layout.content" value=""></put-attribute>
    </definition>

    <definition name="*" extends="menu.layout">
        <put-attribute name="layout.content" value="/WEB-INF/views/{1}.jsp"></put-attribute>
    </definition>

    <definition name="*/*" extends="menu.layout">
        <put-attribute name="layout.content" value="/WEB-INF/views/{1}/{2}.jsp"></put-attribute>
    </definition>

</tiles-definitions>

300x250
728x90

스프링에서 json Ajax 통신을 하려면


jackson 라이브러리가 필요합니다.


pom.xml에서


jackson-databind


안가져왓는지 혹인 잘못가져왔는지 확인하세요

300x250
728x90

pom.xml 에 dependencies 몇개 지워서


다시 돌려보세요


저는 jackson-databind를 잘못 추가시켰더니


에러가 발생했었습니다.


지우니 다시 잘 돌아가네요.

300x250
728x90

스프링으로 간단하게 파일 다운로드 구현



1.파일 경로와 이름을 가진 File 객체 생성


2.response.setContentType으로 다운로드와 문자셋 설정하고

길이도 등록


3.파일이름을 URLEncoder로 utf-8로 인코딩후

response.setHeader로 파일이름을 헤더에 등록


4.클라이언트에게 전송하기 위한

OutputStream out = response.getOutputStream();

출력스트림 개설


5. 출력할 파일을 읽기 위해 File 객체를 읽는

FileInputStream fis = new FileInputStream(fis);


FileInputStream 객체 생성


6.스프링에서 제공하는

FileCopyUtils를 이용하여 복사

FileCopyUtils.copy(fis,out)


7.파일 입력 스트림을 닫고

출력 스트림을 flush


fis.close();

out.flush



 @RequestMapping("photoDownload")
 public void photoDownload(HttpServletRequest request, HttpServletResponse response) throws Exception{
  
  String photoName = request.getParameter("name");
  
  String sep = File.separator;
  System.out.println("sep : " + sep);
  
  String filePath = "C:"+sep+"Users"+sep+"do"+sep+"git"+sep+"Project01"+sep+"src"+sep+"main"+sep+"webapp"+sep+"resources"+sep+"uploaded";
 
  File file = new File(filePath,photoName);
  
  //다운을 위한 컨텐츠 타입을 설정
  response.setContentType("application/download;charset=utf-8");
  response.setContentLength((int)file.length());
  
  //전송되는 파일이름을 그대로 보내주기 위한 설정
  
  //한글 파일명을 클라이언트로 보내려면 URLEncoding이 필요
  photoName = URLEncoder.encode(photoName, "UTF-8");
  
  response.setHeader("Content-Disposition",
    "attachment;fileName=\""+photoName+"\";");
  
  
  //클라이언트에게 보내기 위해 응답 스트림을 구함
  OutputStream out = response.getOutputStream();
  
  /*
  FileInputStream을 통해 클라이언트로 보낼 파일을 읽어
  스프링이 제공하는 FileCopyUtils 클래스를 통해 데이터를 읽고
  스트림을 통해 클라이언트로 출력한다.
  
  */
  FileInputStream fis = null;
  
  fis = new FileInputStream(file);
  FileCopyUtils.copy(fis, out);
  
  fis.close();
  
  out.flush();
 }

300x250

+ Recent posts