프로젝트 이름을 변경할 때, 단순히 보이는 곳만 변경한다고 해서 변경이 된 것이 아니다.

이제부터 프로젝트 이름을 모두 변경하려 한다.

 

 

1. Project Explorer > Refactor > Rename

 

 

 

가장 기본적인 프로젝트명 변경 방법이지만 이 방법 하나로 프로젝트명이 완전히 수정되는 것은 아니다.

 

 

2. Project Explorer > Refactor > Rename Maven Artifact (필자는 현재 Maven 프로젝트임)

 

 

 

 

3. (Window > Show View > Navigator)

pom.xml > Overview > Project > name

 

 

 

 

4. (Window > Show View > Navigator)

pom.xml > Effective POM > (연보라색 칠해진 부분)

 

 

 

5. (Window > Show View > Navigator)

pom.xml > pom.xml > (연보라색 칠해진 부분)

 

 

* Navigator : 탐색기

 

이 다섯 군데를 모두 수정해야 비로소 프로젝트 이름 변경이 끝난다.

* request 기본 객체 : 웹브라우저에 웹 사이트 주소를 입력하면 웹 브라우저는 해당 웹 서버에 연결한 후, 웹 서버에

 요청 정보를 전송한다. 클라이언트가 전송한 요청 정보를 제공하는게 바로 request.getParameter() 기본 객체이다.

 

* parameter : 페이지와 페이지 간의 정보 중 다음 페이지를 읽어들일 때 필요한 정보를 넘겨주고 받는 것을 의미

 다음 페이지에서 그대로 읽어들이기 위해서도 사용하지만 DB정보 요청, 중요 로직값을 사용하는 인자 값으로도 사용된다.

 

request 객체는 웹 브라우저에서 jsp 페이지로 전달되는 정보의 모임으로 http 헤더와 http 바디로 구성된다.

웹 컨테이너는 요청된 http 메세지를 통해 HttpServletRequest 객체를 얻어내서 이로부터 사용자의 요구 사항을 얻어낸다.

 

 

1. request.getParameter() :  String 형만 주고 받을 수 있다.

request.setParameter()로 지정하고 request.getParameter()로 받아온다.

 

 

2. request.getAttribute() : String 형 이외에 int나 List 형의 값을 받을 수 있다.

기본 타입은 Object이기 때문에 반드시 형 변환이 필요하다.

request.setAttribute()로 지정하고 request.getAttribute()로 받아온다.

 

request.setAttribute("currentPage", pages); => page를 currentPage라는 이름으로 지정

request.getAttribute("currentPage"); => 이름으로 지정했던 currentPage를 가져옴

 

 

3. get 방식 vs post 방식

ㄱ. get : (ex. http://localhost:8080/insert.jsp?name=joon&address=suwon

  url 뒤에 파라미터 값을 적어주는 방식. 데이터가 외부에 노출되어 보안에 취약함

  지정된 리소스에서 데이터를 요청하여 읽을 때 사용하는 리소스

  클라이언트로부터 데이터를 이름 + 값이 결합된 String 형태로 전달받는다.

  전송할 수 있는 데이터 양은 255가지

 

ㄴ. post : (ex. http://localhost:8080/form.jsp)

html의 <form>에 객체를 담아 넘기는 방식. 주로 사용자가 입력한 값을 넘긴다

    보안 가능. 개인정보가 담겨 있는 데이터에 주로 쓰임

    지정된 리소스에서 데이터를 처리하는 경우인 write, insert, delete인 경우에 쓰임

    클라이언트와 서버 간에 인코딩을 하여 서버로 전송한다 (클라이언트측 데이터 인코딩 => 서버측 디코딩)

    헤더를 통해 전송되는 방식, 전송할 수 있는 데이터의 양은 무제한

    get방식에 비해 처리 속도가 느리다.

 

 

4. get < post인 이유

get 방식은 데이터의 용량 제한이 있는 반면 post 방식은 용량 제한이 없고, get 방식은 예약어가 있기 때문에 불편하다.

또한, get방식은 사용자에게 값을 노출시키지 않아도 되기 때문이다.

 1. 마우스 오른쪽 버튼 > Build Path > Configure Build Path > Add Library로 추가 (일반적)

 

 

 

 

 

2. Maven 프로젝트의 pom.xml 클릭 > Dependencies로 추가 (Maven project에서만 가능한 기능)

 

 

Add > Select Dependency에서 'Group Id / Artifact Id / Version'을 기입하면 자동으로 받아온다.

 

* Group Id : package 경로

  Artifact Id : 프로젝트 이름

  Version : 버젼

 

이 세가지를 알 수 있는 방법은 메이븐저장소 (https://repo1.maven.org/maven2/)에 들어가서 찾아보고 기입하는 것이 초보자에게는 훨씬 쉬운 방법.

 

* 메이븐저장소 : Java 개발시 필요한 라이브러리(.jar)를 다운 받는 저장소

 

예를 들어, mysql/mysql-connector-java/5.1.38/ 이라는 경로에서는 Group Id : mysql / Artifact Id : mysql-connector-java / Version : 5.1.38이 되는 것.

 

org/mybatis/mybatis/3.3.0/이라면, Group Id : org.mybatis / Artifact Id : mybatis / Version : 3.3.0 가 된다.

 

(생각하기가 힘들다면 순서대로가 아니라 /를 경계로 놓고 Version > Artifact Id > Group Id 순으로 생각하면 쉬워진다)

 

세가지를 기입하고 나서 OK 버튼을 누르면 저장이 되지 않은 상태여서 자동으로 다운로드가 되지 않기 때문에 저장을 해주면 자동으로 다운로드가 된다.

 

많은 연습이 필요한 방법이다.

1. 정의

소프트웨어 디자인 패턴 중 Architectural Patten의 하나.

 

애플리케이션을 크게 세가지 영역으로 구분하고 영역 간의 결합도를 최소화하하기 위해 사용

주로 Web Application에서 사용되는 대표적인 객체 지향 설계

 

 

2. 구성

. 모델 (Modal) => DAO, DTO

데이터를 담거나 데이터베이스로 데이터를 보내는 작업을 하는 객체

어플 상태를 저장하고 있다가 View에서 요청하면 전송한다.

DTO를 통해 상태의 값을 주고받고, 영속 저장(DB)와의 데이터 통신을 위해 DAO를 사용한다.

모델 상태의 변화가 있을 때에는 Controller와 View에 이를 통보한다.

 

. 뷰 (View) => html, Jsp

모델 중 DTO 데이터를 뿌려준다.

렌더링을 하여 실제 사용자에게 보여지는 부분

View에서 사용자 행위를 Controller에 저장하고, 사용자가 볼 결과물 생성을 위해 모델로부터 정보를 얻어온다.

 

. 컨트롤 (Controll) => Servlet

View에 대한 진입점.

특정 결과에 대해 모델에 명령을 보냄으로서 모델의 상태를 변경한다.

 

 

3. 순서

사용자 정보 등록 html 페이지

=> html에서 넘어오는 데이터를 저장하는 DTO 클래스 (.java)

=> 사용자 정보를 관리하는 DBMS의 테이블 생성

=> DTO에서 넘어오는 DB를 실제 DBMS에 저장하는 작업을 처리하는 DAO 클래스 생성

=> 사용자가 html 페이지에 입력한 정보를 DTO에 담아 그것을 DAO 클래스의 관련 메소드에 전송하는 작업을 담당, 그 결과에 따라 서블릿이 이동

=> 성공 / 실패 뷰 페이지 작성

 

 

4. 장점

ㄱ. 유연하고 확장하기 쉽다

뷰와 모델간 간섭을 피하고 컨트롤러가 중간 관리를 하는 역할을 하여 간접소통을 통해 좀 더 유연한 구조를 설계 가능

 

 

5. 단점

ㄱ. 복잡한 구조로 보일 수 있다

ㄴ. Model과 View의 완벽한 분리가 어렵다

* Luna 버전에서는 src/main/java 경로가 잘 만들어지나, Kepler 에서는 src/main/java 경로가 잘 만들어지지 않는다. maven 버전이 낮아서인 듯 하다.

 

 


1. Maven 다운로드

http://maven.apache.org/download.cgi 사이트에 접속해서 Binary zip archive Link 의 .zip 파일을 다운받는다.

 

 

* Binary (바이너리) zip archive : 컴파일이 되어 있는 것. 일반적으로 바이너리 파일을 다운받는다.

   Source zip archive : 컴파일이 되어있지 않은 아카이브(직접 컴파일 해서 써야 하는)이기 때문에 초보자들은 쓰기 어렵다.

 

 


2. 시스템 변수(Path)에 설정

 

 

시스템 > 고급 시스템 설정 > 시스템 변수에 들어가서 MAVEN_HOME과 Path 경로를 바꿔준다. (MAVEN_HOME은 없으면 생성해도 됨)

- MAVEN_HOME : maven 경로 copy & paste

- Path : 기존의 Path 경로 뒤에 %MAVEN_HOME%bin; 을 적는다.

 

 


3. Eclipse Plugin
이클립스에서 Help > Install new Software에서 https://www.eclipse.org/m2e/m2e-downloads.html 주소를 적고 검색하고 나서 아래 http://download.eclipse.org/technology/m2e/releases/1.6/1.6.2.20150902-0002 을 New install로 설치 - Maven Integration for Eclipse (설치되어 있으면 생략)

 

 

* 이클립스 Luna 버전은 Maven이 미리 설치되어 있는 경우가 있다.

   Luna가 설치되어 있는 경로 > Pulgins > maven 폴더가 있는지 확인.

 

 


4. D:\apache-maven-3.3.3\conf\settings.xml 편집
 <localRepository>D:\apache-maven-3.3.3\tools\repository</localRepository>

 

 

@ in Eclipse
 Preference - Maven - User settings -
 D:\apache-maven-3.3.3\conf\settings.xml 변경

 

* 이클립스에서 tools.jar의 경로를 찾을 수 없다는 에러가 뜨는 경우 : Java Path의 경로를 JDK 폴더가 아닌 JRE 폴더로 설정해줬기 때문이다. Path 경로를 JDK 경로로 다시 설정해주면 에러가 해결된다.

 



5. Project 변환 (이 방식 아님 x)
 Project name - configure - Convert to Maven Project...
 pom.xml  생성

 

* pom.xml : 프로젝트의 root에 존재하는 xml 파일 (Project Object Model : 프로젝트 객체 모델)

 

 

 

6. Create a New Maven Project
 Project -> Maven -> Maven Project

 

@ Add Archetype (팝업창)
Archetype Group Id: org.apache.maven.archetypes
Archetype artifact Id: maven-archetype-webapp
Archetype Version: 1.0

OK (click)

 

@ New Maven Project
Group Id: com.jkkang
 Artifact Id: SpringExample(프로젝트이름)
Version: 0.0.1-SNAPSHOT
 Package: com.jkkang    (프로젝트이름은 제거한다)

Finish (click)


 /src/main/java (처음에는 안생김 - Build Path에 Runtime Libarary Tomcat 7.x 추가후에 생김)
 /src/main/resources/
 /src/main/webapp/WEB-INF/web.xml
 /src/test/java (삭제해도 됨)

pom.xml

 

 


7. Mybatis .jar & mysql-connector-java 추가 (via maven)
저장소에서 버전 확인

https://repo1.maven.org/maven2/org/mybatis/mybatis/

https://repo1.maven.org/maven2/org/springframework/spring-context/


 mybatis-3.3.0.jar & mysql-connector-java-5.1.36.jar

 

 <dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.3.0</version>
 </dependency>

 <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.36</version>
 </dependency>

  <properties>
   <org.springframework-version>3.2.15.RELEASE</org.springframework-version>
  </properties>
  <dependencies>
   <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${org.springframework-version}</version>
   </dependency>
   <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${org.springframework-version}</version>
   </dependency>
  </dependencies>

 

 import org.springframework.stereotype.Controller;

 


@ Controller

import org.springframework.web.bind.annotation.RequestMapping;


@ RequestMapping ("/helloWorld")   이것을 인식시킬려면, spring-webmvc 를 설치해야한다.
설치하면 윗줄 import org.springframework.web.bind.annotation.RequestMapping; auto resolv 가능

 


작성 후 Maven - clean 하고, update project 하면 mybatis-3.3.0.jar가 Libraries 밑에 download된것을 확인

* 자바 플랫폼에서 동적인 웹을 개발할 때 사용하는 기반 기술

* 웹에서 Java 프로그래밍을 할 수 있음

* 사용자의 요청을 받아 요청한대로 처리해주는 일을 한 후 처리 결과를 응답자에게 응답해줌

 

 

 

1. 사용자의 URL 요청

어떤 사용자의 URL 요청이 서블릿 요청이라는 걸 웹서버가 알기 위해서는 사전에 웹서버 측에 URL과 서블릿 클래스를 미리 mapping시켜 놓은 배포 서술자(웹 서버가 알아채라고 적은 파일들 (ex. web.xml)) 가 필요하다.

 

 

2. request, response 생성(객체)

웹 컨테이너는 지금 받은 요청을 처리하기 위해 HTTP 요청(request)을 처리하기 위한 request 객체와 HTTP 응답(response) 처리를 위한 response 객체 생성

 

 

3. 서블릿 인스턴스와 스레드 생성

request, response 객체를 생성한 뒤 사용자의 URL 요청이 어떤 서블릿 클래스 필요로 하는지 배포 서술자를 통해 알아낸다

만일 그 클래스가 한번도 실행되지 않았거나 현재 메모리에 생성된 인스턴스가 없다면 새로 생성하고 int() 메소드를 실행하여 초기화한 뒤 스레드를 하나 생성한다.

 

 

4. service() 메소드 호출과 서블릿 클래스 실행

스레드만 생성되면 각 스레드에서 service() 메소드가 호출된다

service() 메소드가 호출되면 HTTP 방식이 get일 경우 doGet(), post일 경우 doPost()가 request나 response를 자동으로 호출한다.

 

 

5. 응답과 스레드의 소멸

doGet() 또는 doPost() 메소드가 호출되어 사용자 요청에 따른 동적인 웹페이지를 생성하면, 그 결과물이 담긴 response 객체를 웹 컨테이너가 response 형태로 바꿔 서버에 전송한다. 그리고 사용이 끝난 request, response 객체를 소멸시키고 스레드가 종료된다.

'BackEnd > Java' 카테고리의 다른 글

Jsp :: MVC Model  (0) 2016.01.22
Maven :: Eclipse Luna + SpringFramework 3.2.15 + Maven Project 설치  (0) 2016.01.22
Java :: JDK와 JRE  (0) 2016.01.20
Java :: 이클립스 없이 cmd 창으로 컴파일 하기  (2) 2016.01.20
JAVA :: JRE 오류  (0) 2016.01.15

1. JDK (Java Develop Kit)

자바 개발 도구

오라클 사이트(http://www.oracle.com/)에서 다운로드 가능

자바로 개발하는 개발자들이 설치하는 개발 환경

자바를 이용한 프로그래밍을 할 때 필요한 툴, 패키지, 컴파일러(javac.exe, debugging, jar etc..) 와 같은 것들이 설치된다.

JDK는 JRE를 포함하고 있기 때문에 컴퓨터 내에 JRE가 없을 때에는 JDK만 다운로드 하여도 무방하다.

 

 

javac 

 컴파일러

java

 인터프리터

appleviewer 

 애플릿 실행기

 javah

 헤더파일 생성기

 jar

 java용 압축 프로그램, 배포용

 javap

 역어셈블러

 

<JDK에 포함되어는 tool의 일부>

 

 

 

컴퓨터 내에 기본적으로 탑재되어 있는 JRE와의 혼란을 피하기 위해 C드라이브에 Java7이라는 폴더를 따로 만들어 JDK를 다운로드 하였다.

JDK 내에 JRE가 원래 포함되어 있기 때문에 jre 폴더가 있는 모습.

 

 

 

JDK를 설치한 후 제어판 > 시스템 > 고급 시스템 설정 > 고급 > 환경변수에서 Path 부분의 원래 경로 뒤에 JDK 폴더 경로를 그대로 copy & paste한다.

 

 

* 이클립스 설치 전 JDK를 다운로드 한 후 JDK가 잘 다운로드 되었는지, path 위치는 잘 지정했는지 확인하고 싶을 때에는 cmd 창에서 컴파일을 해보면 된다.

 

 

2. JRE (Java Runtime Environment)

컴파일된 자바 프로그램을 실행시켜주는 도구

자바 실행 도구는 가지고 있지만(java.exe, library) 자바 개발 툴은 가지고 있지 않음

개발된 자바 프로그램을 실행만 하면 되는 평범한 일반 사용자들이 설치하는 환경

컴퓨터에 이미 설치되어 있기 때문에 설치할 필요가 없으나 JRE가 없을 때에는 사이트에서 JRE만 따로 다운로드가 가능

 

 

 

컴퓨터 C드라이브 내에서 Program Files 폴더를 보면 Java라는 폴더에 JRE가 자동으로 위치하여 있다.

(jre7이라고 적혀있는 이유는 자바 표준 버전이 JAVA7이기 때문)

보통은 자바 개발을 할 때 이클립스 등 개발 도구를 가지고 많이 개발을 하는데, 개발 도구 없이 cmd 창으로 컴파일 하는 법을 포스팅.

 

 

1. 컴파일할 소스 코드를 메모장에 적고 C드라이브에 'AAA'라는 폴더를 만들어 .java 파일로 저장

 

 

2. cmd > HelloWorldMain.java 파일이 있는 AAA 폴더로 이동

 

* cd.. : 상위 폴더로 이동 (cd : change directory)

  cd : 하위 폴더로 이동

  dir : 디렉토리 조회

 

 

3. HelloWorldMain.java 파일을 컴파일

 

AAA 폴더에서 HelloWorldMain.class 파일이 생성된걸 확인할 수 있다. (컴파일됨)

 

* javac 파일명.java : 자바 파일 컴파일

       자바 개발 도구인 JDK에서 컴파일을 담당하는 파일이 javac.exe이기 때문

  자바 파일명 뒤에는 .class 확장자가 생략되어 있음

 

 

4. 컴파일된 HelloWorldMain을 출력 

 

 

* java 컴파일된파일명 : 컴파일된 자바 실행 도구인 JRE에서 실행을 담당하는 파일이 java.exe이기 때문

'BackEnd > Java' 카테고리의 다른 글

Java :: Servelet (서블릿)  (0) 2016.01.21
Java :: JDK와 JRE  (0) 2016.01.20
JAVA :: JRE 오류  (0) 2016.01.15
Maven :: 정의  (0) 2016.01.15
JAVA :: 명명 관례  (0) 2016.01.15

 

 

 

폴더들을 정리한 후 다시 공부를 하려 하는데 갑자기 모든 프로젝트 파일들 옆에 빨간색 느낌표들이 떴다.

JAVA7 파일 일부를 날려먹었다. 처음에는 왜 폴더 옆에 빨간색 느낌표가 떴는지도 이해하지 못했으나 구글링을 해보고 나서 라이브러리 문제라는 것을 파악했다.

 

 

 

JRE 라이브러리의 일부가 삭제된 것. 멘붕.

자바 책을 펼치고 꼼꼼히 읽어보았다.

 

* JRE (Java Runtime Environment) : 대부분의 컴퓨터에 설치되어 있음

                JRE만 따로 다운로드 가능

                bin 디렉터리 밑에 자바 클래스 파일을 해석하고 실행하는데 필요한 소프트웨어를 두고, lib 밑에는 호출하여 실행할 수 있도록 컴파틸 한 자바 API 라이브러리를 두고 있음

 

* Java API : 오라클사에서 제공하는 것으로 주요한 기능들을 미리 구현할 클래스 라이브러리로 묶어놓은 패키지

      개발자는 자바 API로부터 필요한 클래스가 속한 패키지만 import하여 사용하면 됨

 

 

그리하여, 오라클 사이트에 들어가서 (http://www.oracle.com/) Downloads > Java for Developers > Jave SE

화면에서

 

 

스크롤을 맨 아래로 내리고 나서 Java Archive 다운로드 버튼 클릭

 

 

 

나는 Java 7 버젼이었으니 Java SE 7 다운로드를 했다.

 

 

 

JRE 폴더의 파일들을 copy & paste 하고 이클립스를 refresh 해보니 다시 정상적으로 폴더 옆의 빨간색 느낌표가 사라졌다.

또한 [제어판] - [시스템] - [PATH] 에서 경로를 다시 설정해줘야 한다.

'BackEnd > Java' 카테고리의 다른 글

Java :: JDK와 JRE  (0) 2016.01.20
Java :: 이클립스 없이 cmd 창으로 컴파일 하기  (2) 2016.01.20
Maven :: 정의  (0) 2016.01.15
JAVA :: 명명 관례  (0) 2016.01.15
Java 컴파일 & jar 만들기 & Java 실행  (0) 2016.01.15

maven.zip

 

1. 정의

- 프로젝트 관리 도구

- 여러 프로젝트에서 공통으로 사용하는 라이브러리 프로젝트를 만들어서 참조

 

 

2. 목적

- 개발자가 짧은 기간에 개발의 전체 상태를 이해할 수 있도록 함

 

 

3. 장점

- 뛰어난 의존성 관리 (저장소를 통한 라이브러리 일괄 관리)

- 쉽게 작성 가능한 플러그인을 통한 확장성

- 동시에 다수 프로젝트를 핸들링할 수 있는 쉬운 설정 기반의 매커니즘

- 간단한 설정을 통한 배포 관리

- Java, C++ 등 다수의 프로그래밍 언어를 지원

 

 

4. 단점

- 모든 내용이 pom.xml 파일에 담기므로 내용이 장황해질 수 있음

- Maven 프로젝트 특성상 소프트웨어 빌드에 통용되는 라이프사이클을 제공하고, 세부 분야나 특화된 빌드 환경에 대한 지원이 미약

 

 

5. 기능

- 라이브러리 관리 기능 (이클립스에 기본 탑재)

- 빌드 기능

 

* Maven 예시 참고 페이지 : http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

'BackEnd > Java' 카테고리의 다른 글

Java :: 이클립스 없이 cmd 창으로 컴파일 하기  (2) 2016.01.20
JAVA :: JRE 오류  (0) 2016.01.15
JAVA :: 명명 관례  (0) 2016.01.15
Java 컴파일 & jar 만들기 & Java 실행  (0) 2016.01.15
Java :: log4sql 과 log4jdbc  (0) 2016.01.14

+ Recent posts