StudyServer
web, server, java, spring 등.. 공부한 것을 기록하는 장소 입니다. 공부하면서 정리하였기 때문에 틀린 내용이 있을 수 있습니다. 이야기 해주시면 수정하겠습니다.

java spring5 프로젝트 설정

2019-01-29 00:00:00 +0000

Spring 프로젝트 생성

  • 1.8 jdk 설치
  • Java EE 사용 시 Convert Maven, Controller, View 생성 등을 해야한다. 하지만 STS Spring 프로젝트를 생성하면 기본 세팅이 되어있다
  • 프로젝트 창 - Spring Regacy Project - Spring MVC Project 선택

프로젝트 창 설명

  • src/main/java : service, controller, 도메인 등 대부분의 자바 코드가 들어가 잇다
  • src/main/resources : xml 같은 설정파일들이 있다. log4j가 들어가 있다
  • src/test/java, resources : 테스트 클래스를 만드는 곳
  • src/resource : 리소스 파일이 들어가있음
  • src/main/webapp/WEB-INF/spring/appServelt : 디스패쳐에 의해서 생성되는 컨테이너 서블렛. mvc 설정
  • src/main/webapp/WEB-INF/spring/root-context : 리스너를 이용해서 스프링 컨테이너를 생성할 수 있다. db, mybatis, service 등의mvc 외 설정
  • src/main/webapp/WEB-INF/web.xml: 디스패쳐와 리스너는 부모관계.리스너에서 만들어진 것도 디스패쳐에서 사용할 수 있다.

LIB 버전 설정

  • jdk 버전 1.6 -> 1.8 로 변경
<java-version>1.8</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
  • junit 버전 1.6 -> 1.8 로 변경
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>        
  • maven compile 1.6 -> 1.8 버전 변경
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
  • log4j 라이브러리 추가
<dependency>
	<groupId>org.bgee.log4jdbc-log4j2</groupId>
	<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
	<version>1.16</version>
</dependency>
  • pom.xml lib 추가 완료 후 프로젝트 오른쪽 클릭 - maven - update project 해당 프로젝트 업데이트

Lombok 라이브러리 설치

  • setter, getter, toString() 생성자를 자동으로 만들어주는 라이브러리
  • https://projectlombok.org/download
  • cmd 창 열고 lib 파일 다운로드 받은 곳으로 이동
  • java -jar lombok.jar
  • specify locatic 클릭
  • sts spring 위치로 이동. sts 실행파일 선택 그 후 install update 클릭
  • 이클립스 재실행
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.4</version>
    <scope>provided</scope>
</dependency>
  • 사용법
  • org.zerock.sample 패키지 생성
  • @Data 어노테이션은 lombok 라이브러리에 포함된 어노테이션
  • @Setter(onMethod_ = {@Autowired}) 어노테이션을 사용해서 자동으로 set,get 메서드를 만들어준다
  • @ContextConfiguration(“file:src/main/webapp/WEB-INF/spring/root-context.xml”)
  • 설정파일을 지정해주는 어노테이션. ContextConfiguration 괄호 안에 설정파일 경로를 적어준다.
    @Component
    @Data
    public class Restaurant {
         @Setter(onMethod_ = {@Autowired})
         private Chef chef;
    }
    

커넥션 풀 설정

  • jdbc는 원래 톰캣 lib에 있었기 때문에 lib를 가져온다
  • 히카리 lib 가져와야함
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
<!--  https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
  • db 접속
<!-- hikari lib 이용해서 db 접속 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName"  value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl"  value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="username" value="kosta192"/>
<property name="password" value="1234"/>
</bean>
       
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"  destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
       
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 이 패키지를 읽어 들이겠다 -->
<mybatis-spring:scan base-package="org.zerock.mapper"/>
       

restController

2019-01-29 00:00:00 +0000

RestController 정리

@RestController

  • Controller 어노테이션은 view를 반환다
  • RestController 어노테이션은 return 시 Json, xml 등 객체를 반환한다

json lib 추가

<!--  https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.8</version>
</dependency>

Member.java

  • model
    package kosta.model;
    public class Member {
         private String name;
         private String email;
           
         public Member(){}
         public Member(String name, String email) {
                super();
                this.name = name;
                this.email = email;
         }
           
         public String getName() {
                return name;
         }
           
         public void setName(String name) {
                this.name = name;
         }
           
         public String getEmail() {
                return email;
         }
           
         public void setEmail(String email) {
                this.email = email;
         }
         @Override
         public String toString() {
                return "Member [name=" + name + ", email=" + email + "]";
         }      
    }
    

index.html

  • index.html 접속 시 client url로 이동한다

JsonController.java

  • JsonController에서 client view를 전달한다. 매핑에 의해서 view/client.jsp 로 치환한다
    @Controller
    public class JsonController {
         @RequestMapping("/client")
         public String client(){
                return "client";           
         }
    }
    

client.jsp

  • client.jsp에서 페이지 로드와 동시에 $(function())함수가 호출된다
  • 이 때 getJSON 함수로 spring_json url로 이동을 요청한다
  • ajax 결과 json 데이터를 출력한다

ListController.java

  • ListController에 @RestController가 선언되어있다. 그래서 모든 함수의 return 값은 view가 아닌 데이터이다
@RestController
public class ListController {
       @RequestMapping("spring_json")
       public List<Member> spring_json(){
              List<Member> list = new ArrayList<>();
              list.add(new Member("백종원", "aa@aa.com"));
              list.add(new Member("조보아", "bb@bb.com"));
              return list;
       }
}

spring 세팅 및 기본설정

2019-01-28 00:00:00 +0000

Spring 프로젝트 만들기 및 기본예제

Spring 기본 세팅

    • Eclipse 말고 STS 사용
  • Dynamic project 생성(xml 생성)
  • 프로젝트 오른쪽마우스 클릭 - Configure - Convert to Maven

pom.xml

  • 사용하는 lib 추가
  • maven lib 는 https://mvnrepository.com/ 에서 검색
  • lib의 버전은 맞춰줘야 한다. 예를 들어 spring 버전이 4.3.3이면 같은 버전으로 맞춰주는것이 좋다
  • lib는 감싸는 build 태그 다음에 dependencies 태그를 추가한 후 그 안에서 lib 사용을 선언한다
  </build>
<dependencies>
              <dependency>
                     <groupId>org.springframework</groupId>
                     <artifactId>spring-webmvc</artifactId>
                     <version>4.3.2.RELEASE</version>
              </dependency>
  </dependencies>

springapp-servlet

  • 스프링의 장점인 di, aop, transaction 등을 쉽게 사용할 수 있게 만들어주는 spring bean configuration file
  • context:component-scan 함으로써 base-package에 있는 controller를 전부 생성한다
  • default-servlet-handler를 선언하면 @RequestMapping 어노테이션과 요청을 매칭시켜준다. 만약 mvc 선언이 되어있지 않다면 404 에러가 뜬다
  • InternalResourceViewResolver는 url의 위치와 타입, 우선순위를 정할 수 있다
<?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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc-4.3.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">
       <context:annotation-config/>
       <context:component-scan base-package="kosta"/>
       
              
       <mvc:annotation-driven/>
       <mvc:default-servlet-handler/>
       
<!-- <bean id="JsonController" class="kosta.controller.JsonController"></bean> -->
       <bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="prefix" value="/view/"/>
              <property name="suffix" value=".jsp"/>
              <property name="order" value="1"/>
       </bean>
       
</beans>

web.xml

  • Dispatcher Servlet은 client의 요청을 받고 Handler Mapping, Controller, ViewResolver,View 에 요청 및 응답을 받은 후 다시 client로 전달하는 역활을 한다. 아래와 같이 servlet-class 태그로 정의할 수 있다
  • url 패턴을 정의할 수 있다. 아래 예제에서는 ‘/’로 오는 모든 요청을 처리한다
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>test</display-name>
  
   <servlet>
       <servlet-name>springapp</servlet-name>
       <servlet-class>
              org.springframework.web.servlet.DispatcherServlet
       </servlet-class>
  </servlet>
  
  <servlet-mapping>
       <servlet-name>springapp</servlet-name>
       <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <filter>
       <filter-name>encodingFilter</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>encodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

index.html

  • index.html 호출 시 client라는 url 을 요청
  • @RequestMapping 에 /client 라는 매핑이 있다면 매핑되는 함수를 호출하고 없다면 404 에러가 뜬다

Controller.java

  • @Controller 어노테이션을 붙이면 웹 요청을 처리하는 컨트롤러라는 의미
  • @Controller 어노테이션을 붙여야 component-scan 했을 때 bean이 생성된다
  • “client”를 return 하는데 이는 view/client.jsp 를 호출한다는 의미이다 ( prefix, suffix 설정)
@Controller
public class JsonController {
       @RequestMapping("/client")
       public String client(){
              return "client";           
       }
}

mybatis trim

2019-01-19 00:00:00 +0000

mybatis trim

여러개의 질의어 사용

  • if 조건을 사용해서 쿼리문을 동적으로 만들면 어느 데이터가 마지막에 붙는지 모르므로 콤마(,)가 붙어서 에러가 발생한다
  • 이 때 trim을 사용해서 마지막 붙은 조건의 콤마를 삭제할 수 있다
  • 질의문을 < trim > 으로 감싸준다
  • suffixOverrides=”,” 을 사용하면 마지막 조건의 콤마를 삭제해준다
<update id = "editCalender" parameterType="ScheduleCalender">
	 update calender
     <trim prefix="SET" suffixOverrides=",">
       <if test="title != null">
        title = #{title},
       </if>
       <if test="startDt != null">
        start_dt = #{startDt},
        </if>
       <if test="endDt != null">
        end_dt= #{endDt},
        </if>
       <if test="backgroundColor != null">
        background_color= #{backgroundColor},
        </if>
       <if test="completionPer != null">
        completion_per= #{completionPer},
        </if>
      </trim>
       where calender_id = #{calenderId}
</update>

jquery datepicker

2019-01-19 00:00:00 +0000

jquery Datepicker 사용법

jquery import

<link href="http://www.jqueryscript.net/css/jquerysctipttop.css"
	rel="stylesheet" type="text/css">
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

사용법

var jb = jQuery.noConflict();
$( function() {
	  jb( "#addDatepickerStart").datepicker({
		  dateFormat: "yy-mm-dd"
});

<div>시작날짜 <input type="text" id="addDatepickerStart" data-date-format='yy-mm-dd' ></div>

import multiple jquery 문제

  • 여러 jquery버전을 사용하면 충돌이 발생해서 함수를 못찾는 에러발생
  • jquery 사용 범위를 정해놓고 사용 해야한다
  • jquery import 후 해당 jquery를 이용하는 코드를 작성한다. 그리고 script를 닫은 후 다른 jquery 를 import한다. 그리고 방금 import 한 jquery만 사용한다
  • ’$’을 쓰지말고 noConflict 함수로 해당 jquery를 사용해야한다
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
var jb = jQuery.noConflict();
$( function() {
	  jb( "#editDatepickerEnd").datepicker({
		  dateFormat: "yy-mm-dd"
	  });
});
</script>
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$('#clickbutton').function({
});
<script>

Posts

subscribe via RSS