2015년 8월 31일 월요일

[평일야간]자바&웹,jQUERY,스프링프레임워크(JAVA,JSP,SERVLET,제이쿼리,스프링,마이바티스)-본인부담0~20%

[평일야간]자바&웹,jQUERY,스프링프레임워크(JAVA,JSP,SERVLET,제이쿼리,스프링,마이바티스)-본인부담0~20%



자바&웹,jQUERY,스프링프레임워크

강좌명 자바&웹,jQUERY,스프링프레임워크(평일야간)
오라클자바커뮤니티(ojc.asia) 추천 실전강좌
교재 자체 교재 제공(교재비 24,000원 별도)
(최소 개강인원은 5명이며, 5명 미만인 경우 1~2주 정도 강좌가 연기될 수 있습니다.)
강좌 일정 상단 URL 참조
강의 장소 [D강의장]구로디지털단지역2번 출구 -> 미니스톱끼고 우회전 -> 100m 직진 후 골목길 끝에서 횡단보도 건너기 --> 우회전 후 구로호텔 직전 좌측길, 호텔 바로 뒤편 파트너스타워2차 301호
[약도보기]
지원절차 - 강좌내용 확인 후 페이지 하단 "지원하기" 버튼 클릭
- 고용보험 가입자인 경우 관련 서류 제출(아래 "제출서류" 확인)
- 교육전 : 개강일자/시간 및 공지사항에 대하여 전화 또는 문자 공지
- 교육당일 : 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌 진행방식 등)
- 강좌 수강, 수시로 제출되는 이론/실습 과제에 대하여 제출후 SKILL UP
- 교육후 : 메인 페이지 좌측 배너 클릭 후 교육 후 설문 작성
근로자개인
지원/결제안내
- 평일주간 교육은 사업주환급 교육만 가능하며 근로자 개인수강지원(근로자카드,내일배움카드)은 불가능.
- 근로자 개인수강지원의 경우 재직자내일배움카드 또는 근로자카드 발급 받으신분만 수강가능
- 근로자 카드는 고용보험 가입자라면 누구나 간단한 절차를 통해 발급가능.(근로자카드제도 및 발급안내)
- 본인부담액은 교육비의 0~20% 이며 계좌이체 ,근로자카드 또는 개인카드로 결제가능
카드를 수령하지 않았더라도 근로자카드 신청 후 노동부 승인 받은 상태(2~3일 이후)라면 수강 가능.
- 상시근로자 300인 이상 대기업 재직자(50세미만)는 근로자카드/내일배움카드 지원 불가.
사업주훈련
지원/결제안내
- 고용보험 가입자에 대하여 교육비 환급 가능
채용예정(확정)된 분은 현재 고용보험 미가입이라도 교육가능.(채용예정 기업에서 결제하고 해당 기업으로 환급)
- 교육비는 전액 계좌이체 또는 카드(내방결제만 가능)로 교육전 결제 해야 하며 출석룔80% 이상 수료후 회사에서 관할 산업인력 공단으로 환급신청서 제출해서 환급절차 진행해야 되고 보통 2~3주 정도 후 회사로 환급(환급룔은 과정마다 다르니 확인필요)
수강료
입금안내
- 계좌이체(메인페이지 좌측 신한은행 계좌)
- 카드결제는 방문 카드 결제만 가능하며 온라인 카드결제는 지원하지 않습니다.
- 평일주간 기업100%환급 교육은 계좌이체만 가능합니다.
제출서류 - 고용주/사업주 환급 : 상단 정보마당/자료실의 1번 근로자동의서, 2번 훈련위탁계약서(평일주간 교육은 2번만 필요)
- 근로자/내일배움 카드과정 : 상단 정보마당/자료실의 5번 근로자카드,내일배움카드지원자용 신청서
- 제출방법 : 이메일(webmaster@oraclejavacommunity.com) or 팩스(0505-719-4790) or 내방
수강료 및
환급금액
강사소개
상단 URL 참조
[고용주환급] 대기업:390,186원(1000인 이상기업은 243,866원), 중소기업:585,280원 전후 환급

[근로자개인수강지원(근로자카드, 재직자내일배움카드)] 중소기업 정규직 20%(198,000원) 본인부담, 중소기업 비정규직/이직예정자/무급휴직자 무료, 대기업 정규직은 전액본인부담, 정규직50세이상/이직예정자 20% 본인부담, 비정규직/정규직무급휴직자 무료.


[휴강] 법정공휴일

[강사소개] 본원은 실무에 계신분들이 시간을 내서 강좌를 진행하기에 일부 변동 사항이 있을 수 있으며 강좌가 한 강사님께 고정되지 않는 부분이 있으니 참조 바랍니다.

JAVA/JSP/jQUERY/Spring Framework/MyBatis 기반의 아래 프로젝트외 다수 수행.

국세청 통합 시스템
통계청 MSGIS
흥국생명차세대 개발
우정사업본부 우편물류개발팀 차세대 개발
SKT PM 개발
행안부 중계시스템 개발
신라호텔 면세점 ERP 고도화 SAP 연동 모듈 개발
삼성전자SiTE개선2.0
한화 그룹웨어 차세대 개발
이마트 차세대
증권사 차세대 프로젝트

외 다수 프로젝트 자바기반 개발경력 9년이상, 오라클자바커뮤니티 자바,JSP,스프링 전문강사

* 일정상 강사님은 다른 실무 강사님으로 변경 될 수도 있습니다.
문의안내 02-851-4790 번으로 연락 부탁 드립니다.
교육개요 본과정은 단기간에 자바&웹기반 프로그래머를 양성하기 위한 과정이며, 프로그래밍 언어의 경험이 있는 분이지만 자바를 처음하시는 분들을 위해 짧은 기간에 현장에서 필요로 하는 기술들을 최적화된 교재 및 강사를 통해 배울 수 있도록 하는 과정 입니다.

자바의 기본적인 사항부터 JDBC 프로그래밍, JSP의 기본이 되는 Servlet 그리고 JSP의 기본적인 문법과 Ajax, jQuery를 통해 화면 깜박임없이 웹페이지를 역동적으로 구성할 수 있도록 배우며, 최근 가장 많이 사용되는 JAVA기반의 프레임워크인 Spring, SQL Data Mapper, Hibernate ORM까지 배울 수 있는 그야말로 단기간에 자바 개발자로 가시고자 하는 분들을 위한 최적의 과정 입니다.

많은 양이라고 생각될지 모르지겠만 강사님들이 주시는 과제와 팁을 적절히 수행하고 그날그날 수업에 대해 복습을 하시면서 따라 온다면 자기도 모르는 사이에 자바 개발자로 거듭나 있을 것입니다.

감사합니다.
교육목표 - 자바 문법의 이해
- 객체지향 프로그램 개발의 이해
- 자바 웹 개발의 이해
- Ajax, jQUERY와 같은 웹 기술에 대한 이해
- Servlet/JSP 개발에 대한 이해
- Spring3.X/4 Framework에 대한 이해
- Spring3/4 @MVC에 대한 이해
- iBATIS/MyBatis에 대한 이해
- Spring Transaction에 대한 이해
- Spring, iBATIS/MyBatis, Hibernate 연동에 대한 이해
교육대상 - 신입 개발자
- 초보프로그래머
- 다른 언어를 사용하다 자바로 전향을 원하는 개발자
선수학습 - 프로그래밍 기초
 

자바프로그래밍 자바 언어 소개
개발환경 설치(JDK7/8, Eclipse4.3 Kepler/Luna)
기본 문법(연산자, 변수, 상수, 제어문, 반복문)
Virtual Machine 소개
JVM 메모리 영역
클래스 패스(Class Path), 설정방법
Array 이론/실습
클래스와 객체(Class & Object)
Abstarct Data Type
상속(Inheritance)과 다형성
추상클래스(Abstract Class)와 다형성
인터페이스(Interface)와 다형성
연관(Aggregation & Composition)
오버로딩(OverLoading)과 오버라이딩(Overriding)
this/super/constructor
Package 만들기 이론/실습
Java에서 예외 처리 요령
사용자 예외 처리 방법
스트림(Stream) 입출력 관련 클래스, InputStream/OutputStream,
FileInputStream/FileOutputStream
Reader/Writer등 입출력 관련 클래스
표준 입출력/FILE 처리, 객체 직렬화 이론/실습
Thread 개요
Java에서의 Process
Thread 우선순위/동기화
Thread Joining/Interrupt
JAVA8 Lambda __EXPRESSION__
JAVA8 Functional Interface
JAVA8 double colon Operator
JDBC 프로그래밍 Connection, Statement, ResultSet, PreparedStatement
(DML 예제 실습)
Oracle의 function, procedure 다루기
DBCP, DataSource, Connection Pool
Servlet/JSP 프로그래밍 Servlet의 개요
HelloWorld Servlet
Servlet Mapping, WebServlet Annotation
Servlet의 Request, Response
Servlet에서의 Session, Cookie 다루기
JSP 기본문법
JSP 내장 객체
Java Beans
JSP에서의 Session, Cookie 다루기
JSTL, EL
MVC Model의 이해
AJAX/jQUERY 프로그래밍 Ajax 개발환경 구축
왜 Ajax 인가?
Ajax의 기본 구성
XMLHttpRequest 객체
innerHTML의 사용
DOM(Document Object Model) 다루기
Ajax MVC

- jQuery 개요, 다운로드, 설치
- $(document).ready() 메소드
- Selector
- $(“*"), $("#ID"), $("DIV"),$(".classname"), $("p > a"),
- $(“elementname.classname")
- 속성 선택자, 속성(attr)
- 입력양식 필터 선택자
- 위치와 관련된 필터 선택자
- jQuery 배열(Array) 관리
- jQuery 객체 확장
- 기본 필터링 메소드
- 특정 위치 문서 객체 선택
- 문서 객체에서 특정 태그를 선택하는 방법
- innerHTML 속성과 관련된 jQuery 메서드
- 문서객체 생성 , 제거
- jQuery Event
- 이벤트 관련 메소드(발생, 제거)
- 이벤트 자동 발생
- 마우스/키보드/윈도우/입력양식 이벤트
- jQuery 기본효과, 사용자지정효과
- jQuery, Ajax 관련 메소드
- XML 문서 다루기
- 입력양식 전송
Spring 3/4 프로그래밍 JAVA Bean vs EJB vs Spring
J2EE Framework에 대한 흐름과 Spring Framework에 대한 이해
개발 환경 설정(Eclipse4.2, Tomcat7, Spring3.2, MAVEN, STS 다운로드 및 설치)
Spring IoC
DL(Dependency LookUp) &DI(Dependency Injection)
Dependency Pull, CDL(Contaxtualized Lookup)
Setter/Constructor/Method Injection
DL. DI 예제를 통한 이해
Spring 설정(XML, Annotation)
Spring AOP 란 ?Code, Advice, JoinPoint,PointCut
Aspect, Weaving, ProxyFactoryBean
Annotation기반 AOP(AspectJ)
Auto Scanning 컴포넌트 (@Component,@Repository,@Service,@Contoroller)
@Resource vs @Autowired
ProxyFactoryBean을 통한 AOP 구현
AOP NAMESPACE를 통한 AOP 구현
@AspectJ Annotation을 통한 AOP 구현
Spring JDBC(이론 및 실습예제)
Spring Web MVC (이론 및 실습예제)
Spring Controller
Spring MVC Interceptor
@Controller, @RequestMapping, @SessionAttributes, @ModelAttribute
Spring4 @MVC Multiple File Upload
Spring 표현언어 SpEL
Spring Tiles 연동
Spring3/4 Transaction 관리
@Transactional Annotation, XML설정방식, 프로그래밍적 트랜잭션 처리방법의 이해
Spring Interceptor
Spring Tile연동
Spring Scheduling(Quartz연동)

Spring3/4 를 이용한 게시판 작성
- 리스트보기,글쓰기,읽기,댓글,답변글처리
- @MVC, @Controller, @RequestParam, @SessionAttibutes, @ModelAttribute 매핑 적용
- 주입(DI)를 Annotatrion으로 변경
- Spring AOP를 적용하여 게시판 DML 로깅 하기
- 스프링 게시판에 MyBatis 적용하여 SQL문을 XML안으로
MyBatis/iBATIS 개요 및 소개
개발환경 설정 및 설치
Data Mapper란
sqlMapConfig 이해 및 환경설정
Spring, MyBatis 연동
SQL Map XML File 이해
SqlMapClient 이해
SQL의 실행(Insert/update/delete) 이해와 실습
Spring연동
Hibernate 프로그래밍 Hibernate 소개
SessionFactory 설정
1:1, 1:다 매핑
Session Interface
Hibernate DML
Spring, Hibernate 예제 프로그램 작성
Hibernate 설정을 Annotation으로...@Entity, @Table, @Id, @Column
Spring, Hinernate Transaction 실습
 

 

스프링MVC Flash Attribute(RedirectAttributes, FlashMap)

스프링MVC Flash Attribute(RedirectAttributes, FlashMap)

MVC기반의 일반 웹어플리케이션에서 서버측으로 POST형태로 데이터를 전송하게되면 스프링 컨트롤로에서는 사용자 요청에서 데이터를 꺼내 데이터베이스에 저장하는 등의 일을 한다.
그런다음 사용자에게 성공한 상태정보를 보여주기위해 JSP 페이지등을 포워딩하게 된다. 이 경우 사용자가 F5키 등을 눌러 POST 방식의 요청을 여러번 보내게 되면 문제가 발생할 수도 있다.

이러한 문제점을 보완하기 위해 Spring MVC3.1 이상에서 RedirectAttributes, FlashMap을 이용하여 POST/Redirect/GET 패턴을 보완하기 위한 방법이 나왔는데 이 패턴을 이용하게되면 F5 키등을 눌러 리로드(multiple form submit)하는 경우 POST로 서버측으로 서브밋을 하는 것이 아니라 GET방식 형태로 뜬 JSP만 다시 리로드되게 할 수 있다. 

물론 이때 RedirectAttributes를 사용하여 데이터등을 저장한다면 Redirect된 후 즉시 사라지게 되고 사용자가 F5등을 눌러 리로드 하더라도 다시 서버로 다시 submit되어 저장되지 않게할 수 있다.

FlashMap, RedirectAttributes등을 이용하면 리다이렉트시 값의 전달을  쿼리스트링을 이용한 파라미터등으로 하지않고 임시 플래시메모리를 이용하여 보이지 않게 저장하고, 사용 후 삭제되도록 하는 것이다. 즉 리다이렉트시 데이터 숨겨 넘기는 방법을 제공하는 것이다.

FlashMap은 flash attribute등을 저장 할 수 있고, FlashMapManager를 이용하여  FlashMap 인스턴스등을 저장, 삭제등을 할 수 있다.

Spring MVC에서 FlashAttribute를 사용하기 위해서는 스프링3.1 이상에서만 가능하고
<mvc:annotation-driven /> 태그를 설정파일에 기술해야 한다.


0. flashattr 이라는 스프링 MVC 프로젝트 생성

   top level package명 edi.onj.flashattr 

1. pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edi.onj</groupId>
<artifactId>flashattr</artifactId>
<name>flashattr</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>

<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>        
</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>



2. /WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

</web-app>




3. /WEB-INF/spring/appServlet/servlet-context.xml

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd">
         
     
    <bean id="jspViewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
            value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
     </bean>
     
    <context:component-scan base-package="edi.onj.flashattr" />
    <mvc:annotation-driven />
  
</beans>


4. 컨트롤러


package edi.onj.flashattr;

import model.Emp;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class HomeController {
//EMP를 입력하면 화면을 띄운다.
@RequestMapping(value="addform", method=RequestMethod.GET)
public String showForm(@ModelAttribute("emp") Emp emp) {
return "addemp";
}
//입력화면에서 "Add Emp"버튼 클릭시 호출됨
@RequestMapping(value="add", method=RequestMethod.POST)
public String add(@ModelAttribute("emp") Emp emp,
          final RedirectAttributes rAttr) {
//리다이렉트로 보내는 경우 Flash영역에 임시로 emp, msg를 저장하고 
//화면이 로드된 후에는 값이 사라진다. 결국 리로드 하는 경우라면 
//화면에 아무것도 나타나지 않는다.]
        //값을 output FlashMap에 저장한다.
rAttr.addFlashAttribute("emp", emp);
rAttr.addFlashAttribute("msg", "added success!");
return "redirect:showemp.html";   
}
@RequestMapping(value="showemp", method=RequestMethod.GET)
    public String showCustomer(@ModelAttribute("emp") Emp emp) {
//PAge를 리로드하는 경우 emp.getName, emp.getAge모두 NULL이 넘어온다.
        System.out.println("emp:" + emp.getName() + ":" + emp.getAge());
        return "show";
    }
}



5. 모델

package model;

public class Emp {
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}



6. /WEB-INF/views/addemp.jsp

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<body>
    <h1>Add New Emp</h1>
    <form:form action="add.html" method="post" commandName="emp">
    <table>
        <tr>
            <td><form:label path="name">name</form:label></td>
            <td><form:input path="name" /> </td>
        </tr>
       
        <tr>
            <td><form:label path="age">Age</form:label></td>
            <td><form:input path="age" /> </td>
        </tr>
       
        <tr>
            <td colspan="2"><input type="submit" value="Add Emp" />
            </td>
        </tr>
    </table>
    </form:form>
</body>
</html>


7.  /WEB-INF/views/show.jsp


<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<html>
<body>
<h1>${msg}</h1>
    ${emp.name}, ${emp.age}
</body>
</html>


8. 실행

http://localhost:8080/flashattr/showemp.html




@CookieValue, @MVC(스프링컨트롤러쿠키사용예,카운터,Spring MVC)

@CookieValue, @MVC(스프링컨트롤러쿠키사용예,카운터,Spring MVC)

@CookieValue :

HTTP쿠키 값을 HttpServletRequest등을 통해 읽을 필요없이 스프링 컨트롤러에서 파라미터로 전달 받을 수 있게해주며, 쿠키가 존재하지 않으면 오류가 발생하고 required 속성 값을 이용해 필수여부 설정도 가능하고, defaultValue 속성 값을 이용해서 기본값을 지정하는 것도 가능하다.

해당하는 쿠키가 없다면 다음과 같은 오류가 발생한다.

java.lang.IllegalStateException: Missing cookie value '쿠키이름' of type java.lang.String

이를 해결하기 위해서 defaultValue를 사용하면 된다.

@RequestMapping("/hello.html")
public String hello(@CookieValue(value = "쿠키이름", defaultValue = "oraclejavacommunity")  String var) {
......
}


[예 : 쿠키를 이용한 간단한 카운터]

컨트롤러

@Controller
public class HomeController {
 
@RequestMapping(value = "/hello.html")
    public String hello(
            @CookieValue(value = "onjCounter",defaultValue = "0") Integer onjCounter,
            HttpServletResponse response) {
 
        //쿠키값을 읽어 우선 counter, 1증가
onjCounter++;
 
        // 응답에 쿠키를 셋팅
        Cookie cookie = new Cookie("onjCounter", onjCounter.toString());
        response.addCookie(cookie);
 
        // view이름
        return "home";
    }
}



JSP

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Spring MVC Cookie example</title>    
</head>
<body> 
    <h1>OracleJavaCommunity </h1>
    <h1>Spring Cookie Example</h1> 
    Page hit counter: <b> ${cookie.onjCounter.value} </b> 
</body>
</html>

2015년 8월 13일 목요일

동적 SQL을 이용하여 DDL을 실행(ORACLE DYNAMIC SQL)

동적 SQL을 이용하여 DDL을 실행(ORACLE DYNAMIC SQL)

 Dynamic SQL을 이용하면  CREATE, DROP, GRANT, REVOKE 등을 사용할 수 있다.
 ALTER SESSION, SET 명령어등 SCL(Session Control Language)을 사용할 수 있다.
 Dynamic SQL을 이용하면 SELECT절에 TABLE구를 사용할 수 있다.

SQL> DROP TABLE x;

SQL> DECLARE
2  BEGIN
3      EXECUTE IMMEDIATE 'create table x ( x varchar2(1))' ;
  4
  5      DBMS_OUTPUT.PUT_LINE('Table Created.');
  6  END;
  7  /
Table Created.

SQL> select * from x;
선택된 레코드가 없습니다.

SQL> desc x;
 이름                                      널?      유형
 ----------------------------------------- -------- --------------------------
 X                                                  VARCHAR2(1)

-- 아래는 동적SQL을 이용하여 SELECT절에 TABLE구를 사용하는 예제이다.
SQL> SET SERVEROUTPUT ON

-- type_emp라는 사번(empno)과 이름(ename)을 가지는 새로운 타입을 정의, 이타입이 아래 t_emplist라는 테이블 타입의 값으로 들어가는 TYPE이다.
SQL> CREATE TYPE type_emp AS OBJECT (empno NUMBER, ename VARCHAR2(20))
  2  /
유형이 생성되었습니다.

-- t_emplist라는 테이블 타입을 선언, 이 타입이 아래 dept_temp 테이블 emps 칼럼의 타입이 된다. 결국 emps 칼럼은 여러 사원들을 담을 수 있는 구조가 된 것이다.
SQL> CREATE TYPE t_emplist AS TABLE OF type_emp
  2  /
유형이 생성되었습니다.

SQL> CREATE TABLE dept_temp (deptno NUMBER, emps t_emplist)
  2      NESTED TABLE emps STORE AS emp_table;
테이블이 생성되었습니다.

SQL> INSERT INTO dept_temp VALUES (
  2      10,
  3      t_emplist(
  4          type_emp(1, 'SCOTT'),
  5          type_emp(2, 'TIGER')));
1 개의 행이 만들어졌습니다.

SQL> INSERT INTO dept_temp VALUES (
  2      20,
  3      t_emplist(
  4          type_emp(1, 'JCLEE'),
  5          type_emp(2, 'ORACLEJAVACOMMUNITY')));
1 개의 행이 만들어졌습니다.

SQL> DECLARE
  2      v_deptno dept.deptno%TYPE;
  3      v_empno emp.empno%TYPE;
  4      v_ename  emp.ename%TYPE;
  5  BEGIN
  6      -- 아래 TABLE구는 동적SQL로만 실행 가능하다.
  7      EXECUTE IMMEDIATE 'SELECT d.deptno, e.empno, e.ename
  8                        FROM dept_temp d, TABLE(d.emps) e
  9                        WHERE d.deptno = 10 AND e.empno = 1'
 10              INTO v_deptno, v_empno, v_ename;
 11      DBMS_OUTPUT.PUT_LINE(v_deptno || ':' || v_empno || ':' || v_ename);
 12  END;
 13  /

10:1:SCOTT

Dynamic SQL 사용하기(SQL문을 동적으로 생성)

Dynamic SQL 사용하기(SQL문을 동적으로 생성)

 런타임중에 쿼리의 검색조건이나 정렬순서, 힌트 등을 지정할 수 있다.

-- EMP 테이블에서 10번 부서원들의 이름, 급여 출력
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  2    TYPE EmpCurTyp IS REF CURSOR;
  3    myCur EmpCurTyp;
  4    stmt_str VARCHAR2(2000);
  5    v_ename emp.ename%TYPE;
  6    v_sal emp.sal%TYPE;
  7  BEGIN
  8    stmt_str := 'SELECT ename, sal FROM emp WHERE deptno = :1';
  9    OPEN myCur FOR stmt_str USING 10;
 10
 11  LOOP
 12    FETCH myCur INTO v_ename, v_sal;
 13    EXIT WHEN myCur%NOTFOUND;
 14    DBMS_OUTPUT.PUT_LINE(v_ename || ',' || v_sal);
 15  END LOOP;
 16  CLOSE myCur;
 17  END;
 18  /
CLARK,3404.4
KING,6946.8
MILLER,2257.5

-- 아래는 INSERT 예제이다.
SQL> DECLARE
      stmt_str VARCHAR2(200);
      v_empno NUMBER := 4790;
      v_deptno NUMBER := 30;
      v_ename VARCHAR2(20) := 'OJC';
      v_sal NUMBER(4) := 3500;
  BEGIN
      stmt_str := 'INSERT INTO emp(empno, ename, sal, deptno) VALUES
                (:empno, :ename, :sal, :deptno)';
    EXECUTE IMMEDIATE stmt_str
      USING v_empno, v_ename, v_sal, v_deptno;
  END;
  /

SQL> select empno, ename ,sal, deptno from emp where empno = 4790;

    EMPNO ENAME            SAL    DEPTNO
---------- ---------- ---------- ----------
      4790 OJC              3500        30

-- RETURNING구 사용예제이다.
SQL> DECLARE
  2    stmt_str  VARCHAR2(200);
  3    v_loc    dept.loc%TYPE := 'GURODIGITAL';
  4    v_deptno  NUMBER := 10;
  5    deptname  VARCHAR2(20);
  6  BEGIN
  7    stmt_str := 'UPDATE dept2
  8                SET loc = :newloc
  9                WHERE deptno = :deptno
 10                RETURNING dname INTO :dname';
 11    EXECUTE IMMEDIATE stmt_str
 12      USING v_loc, v_deptno,OUT deptname;
 13
 14    DBMS_OUTPUT.PUT_LINE(deptname);
 15  END;
 16  /

ACCOUNTING