레이블이 spring인 게시물을 표시합니다. 모든 게시물 표시
레이블이 spring인 게시물을 표시합니다. 모든 게시물 표시

2017년 9월 25일 월요일

스프링 프로젝트 개발 전에 알아 두어야 할것들

스프링 3 & 4
- EJB 의 폐쇄적이고 상속 위주의 단점을 극복하고자 만든 프레임워크, 톰캣이 가능하다..ㅋ
- 오픈소스로 만들어진 안정적인 프레임워크
- 자바로 웹 또는 실행 애플리케이션을 만들 때 사용할 수 있는 프레임워크
- 자바로 네트워크 연결, 디비 연결등 귀찮고 짜증나는 작업을 쉽고 편하게 지원하여 , 비지니스 로직 개발에만 전념할수 있도록 해줌.
- POJO 방식을 지우너하고 경량 컨테이너를 지원함으로서 프레임워크에 종속되지 않는 개발 방식이 가능
 -- POJO : 특정 라이브러리를 상속하지 않고 자바 자체의 구현 함수만으로 프로그램이 제작 가능한건.
 -- 경량 컨테이너 : 프레임워크를 전부 로드하는 게 아니라 필요한 기능한 사용가능한 경량 컨테이너 방식
- 의존성주입, 관점 지향 컨테이너, 포터블 서비스 추상화
--의존성 주입 : 헐리우드 법칙, 내가 필요해서 요청하는게 아니라 , 스프링에서 필요한 부분에 호출해 준다. 즉, 빈 컨테이너 (컨테이너 박스) 에 내가 사용할 빈을 미리 등록해 놓으면, 스프링이 해당 부분에서 알아서 빈을 꺼내서 주입해 준다. 프로그램 내에서 사용할 객체를 이것저것 new 하는게 아니라, 빈 컨테이너를 통해 사용함으로서 객체간의 의존성을 최소화함.
-- 관점지향 컨테이너 : 여러 객체에서 공통으로 적용되는 공통관심사항(트랜잭션,로깅,보안등)을 특정 메소드,필드가 실행되기 전후,예외발생등의 시점에 실행해 주는 것을 관리, 기존의 방식이라면, 매번 해당 기능을 호출하고 관리해야 되므로 문제가 생기던것을, 훅 과 같은 방식으로 처리.
-빈 객체의 생성,소멸과 같은 라이프 사이클을 관리
-데이터 베이스 접근의 일관성.

[참고].MAVEN 필요 라이브러리 관리툴
jar 를  library , plugin 등의 폴더에 다운받아서 저장 하는 귀찮은 과정을, Maven 이 대신 해줌.
단순히 다운로드 뿐만 아니라, 모듈간 의존성을 관리해줌.
스프링 뿐만 아니라 기존 프로젝트도 메이븐 프로젝트로 변경할수 있음.
최신의 이클립스에는 기본으로 탑재되어 있음.
또 하나의 기능은 빌드 기능이다. 프로젝트를 컴파일,테스트,패키징,인스톨 과 같은 빌드 라이프 싸이클을 설정하여, 한번에 컴파일->인스톨 까지 가능하도록 도와 준다. 심지어 이클립스에서 설정이 가능하다.

-----------------------------------------------------------------------------------------------

주요용어
 빈(bean)
 스프링이 IoC 방식으로 관리하는 오브젝트를 말한다. 관리 되는 오브젝트라고 부르기도 한다.
 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만을 빈이라고 부른다.

 빈 팩토리(bean factory)
 스프링이 IoC를 담당하는 핵심 컨테이너를 가리키다. 빈을 등록하고. 생성하고, 조회하고 돌려주고, 그 외에 부가적인 빈을 관리하는 기능을 담당한다.
 보통은 이 빈 팩토리를 바로 사용하지 않고 이를 확장한 애플리 케이션 컨텍스트를 이용한다.

 애플리케이션 컨텍스트(application context)
 빈 팩토리를 확장한 IoC 컨테이너이다. 빈을 등록하고 관리하는 기본적인 기능은 빈 팩토리와 동일하다.
 스프링이 제공하는 각종 부가 서비스를 추가로 제공한다.
 빈 팩토리라고 부를 때는 주로 빈의 생성과 제어의 관점에서 이야기하는 것이고, 애플리케이션 컨텍스트라고 할 때는 스프링이 제공하는
애플리케이션 지원 기능을 모두 포함해서 이야기하는 것이라고 보면 된다.
 설정정보/설정 메타정보(configuration metadata)
 스프링의 설정정보란 애플리케이션 컨텍스트 또는 빈 팩토리가 IoC를 적용하기 위해 사용하는 메타정보를 말한다.
이는 구성정보 내지는 형상정보라는 의미이다.

 스프링 프레임워크
 스프링 프레임워크는 IoC 컨테이너, 애플리케이션 컨텍스트를 포함해서 스프링이 제공하는 모든 기능을 통틀어 말할 때 주로 사용한다.



web.xml 에 관한 설명은 아래에서.
출처: http://seongilman.tistory.com/16 [SEONG]


톰캣 관련
-PSI-Probe : Tomcat 모니터링 툴
https://dukeom.wordpress.com/2011/08/08/psi-probe-tomcat-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%ED%88%B4/
-Tomcat manager GUI 사용하기
https://dukeom.wordpress.com/2011/08/08/tomcat-manager-gui-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/


스프링 강좌
스프링 MVC
http://cloudstudying.kr/courses/12

------------------------------------------------------------------------------------------------------------

-web.xml 에 대해 알아보자
http://seongilman.tistory.com/16

-스프링 파일 업로드 예제
https://dukeom.wordpress.com/2011/08/25/spring3-file-upload-%EA%B5%AC%ED%98%84/

-스프링 프로퍼티 파일을 @로 읽어오기
https://dukeom.wordpress.com/2016/06/26/%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0-%ED%8C%8C%EC%9D%BC%EC%9D%84-value%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/

-스프링 디비 관련
tomcat(7.x),spring,mybatis 사용시 tomcat connection pool 설정하기

https://dukeom.wordpress.com/2012/02/21/tomcat7-xspringmybatis-%EC%82%AC%EC%9A%A9%EC%8B%9C-tomcat-connection-pool-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0/

2017년 7월 28일 금요일

Tomcat 8.5 + sts 3.9 +java 1.8 에서 스프링 기본 프로젝트 실행안될때

Tomcat 8.5 + sts 3.9 +java 1.8 에서 스프링 기본 샘플 생성하고 실행하니 이런 메시지가..
알아보니 pom.xml 앞줄에

<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>


<java-version>1.8</java-version>
<org.springframework-version>4.1.7.RELEASE</org.springframework-version>
응? 4.1.7 RELEASE ? ㅆㅂ야 sts 3.9 받았다니까..
여튼 이렇게 하면 실행됨.

아래 에러 중에 java 버젼이 틀렸다는거 찾을수 있는분?  톰고양이 쉐끼 매번 고생시키네..
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:939)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
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:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@39fa9a06]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4860)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4992)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@6cb46084]
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:709)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 9 more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:113)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
... 12 more
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717)
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:419)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at sun.misc.IOUtils.readFully(IOUtils.java:65)
at java.util.jar.JarFile.getBytes(JarFile.java:425)
at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193)
at java.util.jar.JarFile.getManifest(JarFile.java:180)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:111)
... 13 more

Jul 29, 2017 2:23:52 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:939)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.startup.Catalina.start(Catalina.java:656)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
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:748)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:947)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 6 more

Jul 29, 2017 2:23:52 PM org.apache.catalina.startup.Catalina start
SEVERE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
at org.apache.catalina.startup.Catalina.start(Catalina.java:656)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:947)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 11 more

2017년 7월 9일 일요일

스프링프레임워크 무료 동영상강좌 - inflearn.com

강좌에 대한 요약은 여기 http://mj-documents.readthedocs.io/ko/latest/JAVA%20(%20Spring%20)/Spring%20%ED%95%84%EA%B8%B0/

강좌의 소스에 대한 이해는 대충.
spring_11_2_ex1_springex
--------------------------------------------
1. web.xml 의 <servlet> 설정에서 <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 읽음
2. 콘트롤러 파일을 찾기 위해서 <context:component-scan base-package="com.javalec.ex" /> 지정
3. 화면 표시용 view 가 있는 리소스 위치를 지정하기 위해서 prefix,suffix 값을 지정
4. context root,그러니까 http:localhost:8080/ex 이렇게 뜨는 거는 Server 의 Tomcat v7.0.... 으로 추가한 서버를 더블클릭하고 server.xml 파일의 context path 를 변경하면됨.
5. 프로젝트 에서도 Properties>Web Project Settings 에서도 context root 를 변경
6. HomeController 자바 파일에서는 @Requestmapping 으로 넘어온 value 주소에 대해서만 실행함.
7. model.addAttribute("serverTime", formattedDate ); 로 화면에 출력할 변수를 만들어서 "home" 뷰에 전달함.
8. /WEB-INF/views/ + "home" + jsp 파일에서는 ${serverTime} 값을 출력함

spring_11_3_ex1_springex
--------------------------------------------
spring_11_2_ex1_springex 와 같은 소스 다만
<resources mapping="/resources/**" location="/resources/" /> 로 지정안된 폴더에서 이미지 가져오려 하면, 가져올수 없다는 것을 확인


spring_12_1_ex1_springex
--------------------------------------------
spring_11_2_ex1_springex 와 같은 소스 다만
콘트롤러에서
@RequestMapping("/board/view")
@RequestMapping("/board/content")...
로 했을때의 별도의 메소드에서 처리됨을 확인.
각 메소드에서는 return "뷰값"을 하여
해당 파일(/WEB-INF/views/ + "뷰값" + jsp)이 있으면 그걸 화면 출력한다.


spring_12_4_ex1_springex
--------------------------------------------
spring_11_2_ex1_springex 와 같은 소스 다만
콘트롤러에서 클래스에
@RequestMapping("/board") 를 추가하고
메소드에
@RequestMapping("/")
@RequestMapping("/write")...
로 했을때 웹상에서의 주소접근이
http://localhost:8080/board/
http://localhost:8080/board/write
로 되는 것을 확인- 한참 헤멨네...


spring_13_1_ex1_springex
--------------------------------------------
@RequestMapping("board/confirmId")
public String confirmId(HttpServletRequest httpServletRequest, Model model) {
에서는  httpServletRequest.getParameter("id") 등과 같이 http 로 넘어오는 값을 받아서 처리하는 예제

@RequestMapping("board/checkId")
public String checkId(@RequestParam("id") String id, @RequestParam("pw") int pw, Model model) {
에서는  @RequestParam 어노테이션을 이용하여 request 된 데이터 취득.



spring_13_4_ex1_springex
--------------------------------------------
@RequestMapping("/student/{studentId}")
public String getStudent(@PathVariable String studentId, Model model) {
주소라인에 SEO 방식의 주소로 할수 있도록 하는 예제. 즉 http://localhost:8080/student/아빠/ 라는 식으로 http 주소를 받아서 '아빠' 이름에 해당하는 변수를 활용할수있다. get,post 도 필요없이 주소라인에서 직접 변수를 전달하는 방식, 이렇게 링크를 하는 이유는 검색엔진에서 주소라인의 문구가 검색 결과로 잡하기 때문에...
@RequestMapping("/student/{studentId}/{nickname}")
public String getStudent(
@PathVariable("studentId") Optional<String>  studentId,
@PathVariable("nickname") Optional<String>  nickname,
Model model
) {
머..이런식도 가능.



spring_14_1_ex1_springex
--------------------------------------------
콘트롤러에서 지정한
http://localhost:8080/ex/index 화면에서 전송을 누르면
전송 폼이 나타나고 값을 입력후 전송하면.
@RequestMapping(method = RequestMethod.POST, value = "/student") 또는
@RequestMapping(method = RequestMethod.GET, value = "/student") 가
적절히 실행된다.
get 을 확인하려면
http://localhost:8080/ex/student?id=1234 하면됨.


spring_14_2_ex1_springex
--------------------------------------------
spring_13_4_ex1_springex 랑 비교하면 좋음.
폼정보가 있는 index.jsp 에서 전송을 하면,
콘트롤러에서
@RequestMapping("/studentView")
public String studentView(@ModelAttribute("studentInfo") StudentInformation studentInformation){
메소드를 실행하는데, 이때 넘어온 폼의 정보를 한번에 StudentInformation 클래스에 setter 한다.
물론 form 의 input 이름과 클래스변수의 이름이 같고 seter 가 있는 변수에 한해서만이다.
ModelAttribute("studentInfo") 여기의 "studentInfo" 가 view 에서 변수명이 된다.

***중요한 거는 StudentInformation.java 클래스에 자동으로 담겨주는 거.폼의 인풋 정보랑 modelAttribute 에서 지정한 클래스 정보랑


spring_14_3_ex1_springex
--------------------------------------------
리다이렉트 redirect: 예제들.


spring_15_1_ex1_springex
--------------------------------------------
StudentController 에서  @RequestMapping("/student/create") 주소로 폼 내용이 넘어올때,
public String studentCreate(@ModelAttribute("student") Student student, BindingResult result) {
이름의 인풋값들중에 student 객체에 있는 변수는 할당을 한다.
student 객체에 입력된 값으로 StudentValidator 의 검증 메소드를 실행한다. 이때 에러가 발생하면, crete 페이지로 가고 아니면  done 페이지로 간다.
폼주소  http://localhost:8080/spring_15_1_ex1_srpingex/studentForm


spring_15_2_ex1_springex
--------------------------------------------
spring_15_1_ex1_springex 과 같은 내용, 밸리데이터만 수정


spring_15_3_ex1_springex
--------------------------------------------
spring_15_1_ex1_springex 과 같은 내용, 밸리데이터만 수정
@InitBinder 확인.?


spring_16_1_ex1_springex
--------------------------------------------
BController.java
이 화일에서는 각 요청 주소 에 따른 @RequestMapping("...") 을 한다.
command 패턴을 사용해서 각 코맨드에 맞는 클래스,메소드를 실행한다.(좋음)
com.javalec.spring_16_1_ex1_srpingex.command 패키지에는 각 커맨드에 맞는 클래스가 있다.
Dao 를 썼지만 , 예전 방식으로 접속함.(예제니까..)


spring_21_1_ex1_springex
--------------------------------------------
servelet-context.xml 에서
<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
....
</beans:bean>
JDBC 이용한거만 좀 다름..




spring_22_1_ex1_springex
--------------------------------------------
servelet-context.xml 에서
<beans:bean name="dao" class="com.javalec.spring_pjt_ex.dao.TicketDao" >
로 빈 지정하고.
HomeController 에서
@Autowired
public void setDao(TicketDao dao) {
Autowired 처리되어 dao 변수는 com.javalec.spring_pjt_ex.dao.TicketDao 할당됨





spring_22_2_ex1_springex
--------------------------------------------
servelet-context.xml 에서
<beans:bean name="dao" class="com.javalec.spring_pjt_ex.dao.TicketDao" >
로 빈 지정하고.
HomeController 에서
@Autowired
public void setDao(TicketDao dao) {
Autowired 처리되어 dao 변수는 com.javalec.spring_pjt_ex.dao.TicketDao 할당됨
아직 트랜잭션 처리되지 안음.


spring_22_2_ex2_springex
--------------------------------------------
spring_22_2_ex1_springex 동일.
스프링에서 지원하는 TransactionDefinition 으로 간단히 트랜잭션 지정.


spring_23_1_ex1_springex
--------------------------------------------
spring_22_2_ex2_springex 동일.
좀더 간단히 TransactionTemplate 을 이용
설정에 추가됨
<beans:bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>

<beans:bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<beans:property name="transactionManager" ref="transactionManager"></beans:property>
</beans:bean>





spring_23_2_ex1_springex
--------------------------------------------
spring_23_2_ex2_springex 동일.
좀더 간단히 TransactionTemplate 을 이용
설정에 추가됨
<beans:bean name="ticketCommand" class="com.javalec.spring_pjt_ex.command.TicketCommand" >
빈에 연결
@Autowired
public void setTicketCommand(ITicketCommand ticketCommand) {
this.ticketCommand = ticketCommand;
}
빈에 연결시에 인터페이스와 implement 구형제가 한세트라서, 자동으로 구현클라스에 할당됨
트랜잭션의 전파 속성 별도로 학습 필요






spring_25_1_ex1_springex
--------------------------------------------
보안관련, 한글처리



spring_26_1_ex1_springex
--------------------------------------------
보안관련, 한글처리

spring_26_2_ex1_springex
--------------------------------------------
보안관련, 한글처리

spring_27_1_ex1_springex
--------------------------------------------
보안관련, 한글처리





spring_28_1_ex1_springex
--------------------------------------------
JDBC 방식임.




spring_29_1_ex1_springex
--------------------------------------------
마이바티스 를 사용하기 위해서는

<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"></beans:property>
<beans:property name="mapperLocations" value="classpath:com/javalec/spring_mybatis/dao/mapper/*.xml"></beans:property>
</beans:bean>

<beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<beans:constructor-arg index="0" ref="sqlSessionFactory"></beans:constructor-arg>
</beans:bean>
추가해야함.
value="classpath:com/javalec/spring_mybatis/dao/mapper/*.xml" 는 프로젝트 마다 다름.

스트링에서 마이바티스를 이용하면
mapper 폴더의 xml 과 인터페이스 를 1:1 로 연결함.
즉 mapper/OOO.xml 에는
<mapper namespace="com.javalec.spring_mybatis.dao.IDao">
와 같이
com.javalec.spring_mybatis.dao.IDao 인터페이스에 연결한다.

이는
즉 mapper/OOO.xml 에는 에는
<mapper> 밑으로
<select id="listDao" resultType="com.javalec.spring_mybatis.dto.ContentDto">
SELECT * FROM BOARD ORDER BY MID DESC
</select>
로 선언됨.

이를 가지고 콘트롤러에서
IDao dao = sqlSession.getMapper(IDao.class); Idao 에는 현재 xml 파일이 매핑되어 있음.
model.addAttribute("list", dao.listDao) 매핑된 xml 속성(쿼리element) 중에 id 가 listdao 인 놈만 가져와서 list (모델속성)에 할당해서 화면에 뿌릴수 있게됨.
화면에 뿌릴때는 list.db필드명 식으로딤.





spring_30_1_ex1_springex
--------------------------------------------
xml 이용한 연습.
xml 에 인자 는 #{param1} #{param2} 식으로.

2013년 12월 17일 화요일

spring hadoop hive 설치 문서가 잘되어있는곳.

http://bigmark.tistory.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D