웹개발을 하다보면 많은 페이지마다 반복되어야 하는 것들이 있다


예를들어 페이지를 이동할때마다 권한 검사를 한다던가 로그를 기록해야 한다던가 하는 것들


또한 URL을 요청해 컨트롤러가 구동되기 전 혹은 구동된 후에 실행시키고 싶은 것들도 있다


그런 인터셉터 기능을 설정하는 방법을 알아 보자



1. dispatcher-servlet.xml 설정


1
2
3
4
5
6
7
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="localeChangeInterceptor" />
            </list>
        </property>
    </bean>
cs


이렇게 생겨먹은 부분이 있는데 이 List 사이에

<ref bean="localeChangeInterceptor" /> 얘는 건들이지 말고 그 밑에

<ref bean="id값" />을 넣어 준다


그리고 아래와 같은 코드를 추가 시켜 준다


1
2
3
4
5
6
7
8
<bean id="위에 추가한 id값" class="인터셉터 기능을 수행할 패키지경로.클래스명">
          <!-- 인증 체크가 필요 없는 URL 리스트  -->
      <property name="urls">
       <list>
            제외시킬 url 목록
       </list>
      </property>
  </bean
cs



다음은 실행시킬 java 클래스를 만든다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
package 패키지 경로;
 
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
/**
* @패키지명 : 블로그용
* @파일명 : PlatformInterceptor.java
* @작성일 : 2016. 5. 23.
* @작성자 : "In Chee su"
* @설명 : 인터셉트
*/
public class 클래스명 extends HandlerInterceptorAdapter {
     
//  인증 체크가 필요 없는 URL 리스트  
 
List<String> urls;
 
 public void setUrls(List urls) {
  this.urls = urls;
 }
 
 
/* (non-Javadoc)
 * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
 */
@Override
 public boolean preHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler) throws Exception {
   // 기능을 수행하고 Controller를 실행 하려면
 
   // return true;
 
  
 
   // 특정 체크에서 일치하지 않는다면
 
   // response.sendRedirect("특정 에러 페이지로 보낸다");
 
   // return false;
 
    
    // 인증 체크가 필요 없는 URL 체크
 
          for(int i=0; i < urls.size(); i++){
         
                if (request.getRequestURI().matches(urls.get(i))) {
                System.out.println("== 인증 체크가 필요 없는 URL ============================");
                System.out.println("== URL : "+ urls.get(i) +" ============================");
                System.out.println("== return true ============================");
                System.out.println("== 인터셉터 종료 ============================");
                return true;
               }
         
         
               // 첫페이지가 로그인 페이지일 경우
             
               // 첫페이지 jsession때문에 request.getRequestURI().indexOf("/login/login.do") != -1 사용
             
               if(request.getRequestURI().indexOf(urls.get(i)) != -1){
             
                 return true;
         
           }
 
  
  }
 
 
// 세션이 있는지 체크
 
// 세션에 로그인한 정보가 있는지 체크
 
 
return true;
 }
 
 
}
 
 
cs



이렇게 만들면 된다.

서버를 구동할때 class를 실행시키는 방법이다.


주로 소켓통신을 위해 동시에 켜주거나 여러모로 자주 사용 하게 된다.


1. web.xml 


<web-app> </web-app> 사이에 추가해 준다. 전자정부 프레임워크 라면 ContextLoaderListener 가 이미

추가 되어 있을텐데 그 밑에 고대로 복사해준다.


1
2
3
     <listener>
        <listener-class>패키지경로.클래스명</listener-class>
    </listener>
cs



끝.



주의사항: 대충 다른거 긁어와서


1
2
3
4
5
 public static void main(String[] args) {
          // 5개의 쓰레드를 생성하는 서버를 생성한다.
          PlatformServer server = new PlatformServer(5);
          server.start();
      }

cs


저런 코드 그대로 놔두고 실행시키면 안된다.

생성자를 만들어 주지 않으면 아래와 같은 에러가 발생한다.


심각: Error configuring application listener of class 패키지 경로

java.lang.InstantiationException: egovframework.패키지경로

at java.lang.Class.newInstance(Unknown Source)

at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:114)

at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4984)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1572)

at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1562)

at java.util.concurrent.FutureTask.run(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Caused by: java.lang.NoSuchMethodException: 패키지경로.<init>()

at java.lang.Class.getConstructor0(Unknown Source)

... 11 mor



제어구조

:흐름을 제어

1.반복문

while(true)

{

break; ->무조건 벗어남.(선택적으로 벗어날 수 있도록 구성)

}

만약에 menu가 2라면 if (menu == 2) -->선택문




import java.util.Scanner;



public class forgugu {

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

System.out.print("1.숫자를 입력 하세요:");

int a = s.nextInt();

System.out.print("2.숫자를 입력 하세요:");

int b = s.nextInt();

System.out.println("입력한 값은:"+a+","+b);

if (a>b)

{

for (int i = b; i<=a; i++){

for(int j=1; j<10; j++)

{

System.out.println(i+"*"+j+"="+i*j);

}

}

}

else if (a<b)

{

for (int i=a; i<=b; i++){

for(int j=1; j<10; j++)

{

System.out.println(i+"*"+j+"="+i*j);

}

}

}

else

{

System.out.print("두 수는 같다");

}

}

}



선택 흐름(if문)

1.선택

2.검사 한번만

변수에서 유효한 범위->도메인

ex) 점수의 도메인 0~100

if(kor<0 || kor>100) 한번 검사!!!

여러번 검사 (while 문)


입력값을 검사 do while문




파일 입출력

FileOutputStream fos = new FileOutputStream(""


ctrl+shift+o =>자동으로 imprort

fos.write('A'); 문자하나하나만을 출력


FileOutputStream fos = new FileOutputStream("d:\\test.text");

fos.write('A'); //문자하나 쓰는 기능

fos.flush(); //비우는 기능

fos.close();


fos.flush();->데이터가 다 찰때까지 조금 기달리는 기능(끝에 한번만 선언)

while문 밖에다 선언


do{

c= fis.read();

if( c!= -1)


4bit=1byte


8bit


Big Endian   vs  Littile Endian

연산자 정리…



코딩을 하면서 여러가지 복합적인 연산을 해야 하는 경우가 있을때 기본적으로 알고 있어야 할 사항 들이다


외우지 못해도 좋다 연산자의 연산 우선순위라는게 존재한다는 것만 알아두면 필요할때 검색하거나 이렇게 찾아서


사용하면 되니까.



문자열 입력


1.숫자 입력

출력 코드 위에다가 각 숫자를 입력하는 코드가 필요

(입력을 하기 위해선 출력문이 필요)

입력버퍼(System.in 입출력은 너무 자주사용하여 정의 해놓았다.)

System.in = new ConsoleInputStream();

int key = System.in.read();

입력을 하기 위해선 입력 버펴에 하나씩 쌓이게 된다.

엔터를 만날때 까지 자료형을 변환해주는 메소드가 존재

next()

nextLine()->하나의 줄을 받아서 변환

nextInt()->스페이스 전까지의 숫자를 변환  >

ex)”30 40 50”을 입력시 30 하나만을 가져오고 버퍼에는 “40 50”이 남아있게 된다.

nextfloat()

Scanner = 문자를 입력할 수 있게 하는 도구 ex)핸드폰

new = 개체화

Scanner scan = 도구는 이름을 붙여 주어야 한다

System.in = 입력 버퍼에 값 전달/종속 객체 ex)배터리

  (배터리를 핸드폰에 주입한다.->즉 System.in을 Scanner에 주입한다.)


Scanner : 입력 버퍼에서 값을 스캔하는 것 ex) Scanner scan = new Scanner(System.in);

PrintWriter > OutputStream

OutputStream write/flush를 보다 전문적으로 출력해주는 print메소드를 사용함.

메소드라는건 어떠한 기능을 구현하기 위해 특정 로직을 만들어 놓은 것임


printf 특수문자 (이스케이프 시퀀스 escape sequence)

특수문자

의미하는 바

\a

경고음

\b

백스페이스

\f

폼 피드(form feed)

\n

개 행(new line)

\r

캐리지 리턴(carriage return)

\t

수평 탭

\v

수직 탭

\'

작은 따옴표 출력

\"

큰 따옴표 출력

\?

물음표 출력

\\

역슬래쉬 출력

\n    /    \”      /   \\ ->중요


가끔씩 자바에서 텍스트 출력을 해야 할때 줄바꿈(개행)이라던지 따옴표를 출력해야 할때 난감한 경우가 있는데

이때 \라는 이스케이프 문자열을 사용해서 컴퓨터에게 이 다음건 그냥 단순히 텍스트일뿐이니 그대로 출력해줘

라고 알려주는 것이다.


참고)

print=>문자열 출력

println => 개행처리하여 출력  ( \n이랑 똑같은 역할)

printf(“형식”,넣을 함수)=> format을 지정하여 값만 넣어줌


* 형식 지정자 (printf)

포맷을 이용한 출력

ex) printf("%s,%d,&f,%c","hello",3,5.6,'a');

*****************printf는 개행을 \n을 써서 해주어야 한다,

ex)System.out.printf(" %d ,%d ,%d ,%d ,%2.0f \n",kor,eng,math,total,avg);


. 파일 출력과 콘솔 출력 방법은 같다. 네트워크 출력도 같다.(버퍼사용)


고정길이 출력

%10d : 앞 10자리 차지 ex)                      3

%-10d : 뒤 10자리 차지 ex) 3                    .

%5.2f : 전체 수의 길이는 5 (소수점 포함), 소수점은 2자리까지 출력. ex) 32.44



'Yame Programmer > JAVA' 카테고리의 다른 글

[이론] 연산자 정리  (0) 2015.06.11
[이론] 문자열 입력  (0) 2015.06.11
[이론] 9.값과 연산자  (0) 2015.06.10
[이론] ASCII / UNICODE  (0) 2015.06.10
[이론] 함수 그리고 객체와 캡슐  (0) 2015.06.03

8. ASCII / UNICODE

식별 되는 문자코드가 있어야 범용으로 데이터 통신을 할 수 있기 때문에 만들어진 코드 체계. 8bit로 표현

ex)입력 값 ‘2’->실제 입력값 ‘50’(key code)

ASCII 코드 -> 각국 문자 코드 확장 -> 번호(문자코드)가 겹치지 않게 하는 UNICODE 탄생

ex)ASCII 코드 한국:euc-kr   /  UNICODE 한국: utf-8

System.out.wirte(3); ->50    =3의 아스키 코드값인 50출력

System.outwrite('3'); ->3    =문자로 인식하여 3출력


무슨말인가 하면 우리들이 사용하는 문자를 컴퓨터는 바로 알아먹을 수가 없기 때문에 그것들을 코드화 했다는 말이다.

위의 예제와 같이 문자열로 입력하지 않은 3은 아스키 코드값인 50이 출력이 된다.

그렇다면 이런것들을 왜 알아야 하느냐? 

단축키를 설정하거나 혹은 문자열을 사용할수 없는 경우에 사용할 때가 있다.

혹은 컴퓨터가 유니코드로 값을 뱉는 경우에 저 표를 보고 어떤 문자인지 파악을 할때도 있다.

물론 자주 있는 경우는 아니지만 이걸 아느냐 모르느냐로 코딩에 있어서 크리티컬한 타격이 올때가 있으니

저걸 외우는건 외울필요도 없고 자주 쓰지도 않으니 저런게 있다는것만 알아두고 검색해서 그때그때 사용하자.


6. wora(자바 플랫폼)


자바의 탄생 - 그린 프로젝트

1990년대 양방향 TV가 만들어짐

(단말기에서 사용자 입력이 필요하며 컨트롤도 필요하게 되며 다양한 플랫폼을 필요하게 됨)

하나의 프로그램을 다양한 플랫폼에서 사용 가능하도록 하기 위해 자바가 탄생함.

(자바는 c++의 단점을 보완하며 탄생함) /James Gosling - 자바의 창시자




C++의 문제점

-> 간결하지 않은 C 언어의 복잡성의 어려움

(프로젝트는 규칙에 의해서 작성되어야 하고 간결하게 만들어야 한다.)

-> 메모리 자원 관리의 어려움

->Write once, Run Anywhere(WORA)*의 어려움 : 보안문제, 독립적인 플랫폼 문제

->협업의 어려움



*WORA(Write Once, Use Anywhere):

1) 한 번 작성된 코드는 모든 플랫폼에서 실행이 가능

2) C/C++ 등 기존 언어가 가진 플랫폼 종속성을 극복


자바 플랫폼(WORA)의 특징

계산은 CPU와 메모리가 필요->자바 역할

입/출력은 다양한 장치가 필요-> 콘솔  /  윈도우 / 파일 /네트워크 역할

너무 다양한 입/출력 장치들 때문에 *인터페이스를 통해 간접적으로 이용할 필요가 생김

*인터페이스 : 차단된 두 대상을 이어주는 도구 (두 개의 시스템 또는 구성 요소 사이의 상호 연결)

사물 간 또는 사물과 인간 간의 의사소통이 가능하도록 일시적 혹은 영속적인 접근을 목적으로 미리 약속(규칙,표준)되어 만들어진 물리적, 가상적 매개체를 의미한다.


JAVA란?

자바는 수학을 닮은 함수를 통해 인터페이스 제공

(*수학을 닮은 함수를 사용하여 좋은점)

자바는 함수와 Drive를 통해 프로그램을 작성

(자바가 제공하는 함수를 API라고 부른다.(API는 인터페이스 역할))

자바는 다양한 운영체제에서 하나의 프로그램으로 구동 하도록 구현.

자바는 다양한 입출력 기계들을 하나의 함수로 사용하여 이용


*함수를 사용 했을 때의 장점

1. 구현을 숨기지만 구현을 사용할 수 있는 약속을 제공.

   (같은 코드를 계속 쓰지 않음으로서 프로그램의 용량을 줄일 수 있고, 다른 부분이나 다른

  프로그램에서 같은 코드를 사용할 수 있다. (인터페이스의 역할))

2. 하나의 큰 프로그램을 여러 부분으로 분리함으로써 구조적 프로그래밍이 가능하다.

3. 함수의 기능과 내부 구현을 분리하는 캡슐화가 이루어진다.









논리 플랫폼과 API

자바 플제 1 장 자바 개요랫폼 - 다양한 OS에서 사용


※ 자바 플랫폼이 있지 않으면 사용 할 수 없다.

구동프로그램(드라이버)

Application 함Program Interface (API) : 프로그램 또는 애플리케이션이 운영 체제에 어떤 처리를 위해서 호출할 수 있는 서브루틴 또는 함수의 집합이다.

콘솔 : 사용자가 이용 할 수 있는 접근 수단

** 모든 함수가 API는 아니다.

자바 소송 후폭풍…'


내장 입/출력 객체와 멤버함수

: 관련 있는 함수들의 모임


ex)   System.out.print(30);->시스템의 출력을 담당

     System.in.read();->시스템의 입력을 담당



'Yame Programmer > JAVA' 카테고리의 다른 글

[이론] 9.값과 연산자  (0) 2015.06.10
[이론] ASCII / UNICODE  (0) 2015.06.10
[이론] 함수 그리고 객체와 캡슐  (0) 2015.06.03
[이론] 프로그래밍의 종류  (0) 2015.06.03
[이론]자바 프로그래밍 이란?  (0) 2015.06.03

1. 자바  프로그래밍이란?


자바 프로그래밍이란 자바를 이용해 컴퓨터 프로그램을 만드는 작업이다


자바 : 컴퓨터 프로그래밍 언어

프로그램 : 지시 사항들이 나열된 순서, 어떠한 목적을 이루기 위한 수행 절차

프로그래밍: 프로그램을 만드는 것

컴퓨터 프로그래밍 : 특정한 프로그래밍 언어를 이용해 구체적인(목적을 가진) 컴퓨터

        프로그램으로 구현하는 기술


즉 자바 프로그래밍이란 “자바라는 컴퓨터 언어를 이용해 어떠한 목적을 이루기 위한 컴퓨터 프로그램(절차)을 만드는 것”이라 할 수 있다.



2. 컴퓨터와 CPU


1) 컴퓨터(computer)

수식 이나 논리적 언어로 표현된 계산을 수행하거나 작업을 통제하는 기계. 즉 계산기


2)CPU(central processing unit: 중앙 처리 장치)

소프트웨어 명령의 실행이 이루어지는 컴퓨터의 부분, 혹은 그 기능을 내장한 을 말한다.  CPU는 ALU(Arithmetic And Logic Unit) + Registers + CU(Control Unit)으로 구성되어있다.



ALU = 산술 연산

CU = 제어(반복) (ALU와 레지스터를 실질적으로 용도에 맞게 사용하는 컨트롤 장치.)

register = ALU에 값을 연산하기 전에 잠시 저장해 놓는 임시 메모리






3. 플랫폼(platform)

플랫폼이란 개발 환경, 어플리케이션 소프트웨어를 작동시킬때 기반이 되는 OS의 종류나 환경, 설정을 말한다. (기반/재료,환경)

+@ 예를 들면, MS-DOS상에서 동작하는 DOS가 플랫폼이며, MS-Windows상에서 동작하는 응용 소프트웨어에 있어서는 MS-Windows가 플랫폼이다. 또 어떤 소프트웨어가 제공하는 환경을 플랫폼이라고 하는 경우도 있다. MS-Windows가 제공하는 환경이 MS-Windows의 플랫폼이다)




4. 코드


1) 코드와 코드화

기록, 의사전달을 위한 기호화 / 뜻 의미가 부여된 기호는 코드가 된다. 또한 기록이나 의사전달을 위해 기호화 하는것을 코드화 라고 한다.


2)코드의 종류

고급(high level) 언어와 저급(low level)언어로 나뉠 수 있다. 고급 언어는 저급언어보다 사용하기 쉽고, 더 추상적이며, 더 이식 가능성이 높게 디자인된다. 어떤 언어의 경우에는, 문법적으로 올바른 프로그램들은 저급 언어로 컴파일(compile)되어 컴퓨터 상에서 실행(execute)되게 된다. 오늘날 대부분의 소프트웨어는 고급 언어로 작성된다. 그 후 오브젝트 코드로 컴파일되고 난 뒤 기계어로 변환된다.


a. 저급언어


기계어:CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어를 통틀어  일컫는다. 기계어는 프로그램을 나타내는 가장 낮은 단계의 개념이다.

기계어는 어셈블리어와 1 : 1로 쓰일 수 있다.




어셈블리어: (영어: Assembly language)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍저급 언어이다. 컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다.




b. 고급언어

 고급 프로그래밍 언어란 사람이 알기쉽도록 씌어진 프로그래밍 언어로서, 저급 프로그래밍 언어보다 가독성이 높고 다루기 간단하다는 장점이 있다. 컴파일러 인터프리터에 의해 저급 프로그래밍 언어로 번역되어 실행된다. C 언어, 자바, 베이직 등 대부분의 프로그래밍 언어들은 고급언어에 속한다.


c. 컴파일

프로그래밍 언어로 작성된 프로그램을 컴퓨터가 이해할 수 있도록 기계어로 번역해 주는 역할을 하는 번역기



물리 코드, 논리 코드    < - 보충 설명 필요


물리(장치)에 종속된 코드가 물리코드.


물리장치에 종속되지 않은 코드가 논리 코드



인터프리터(interpreter, 문화어: 해석기)는 프로그래밍 언어소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시 코드를 기계어로 번역하는 컴파일러와 대비된다. 인터프리터는 다음의 과정 가운데 적어도 한 가지 기능을 가진 프로그램이다.



치수횽아

(실행코드=숫자코드=이진코드)

수학 코드

kor = 60

eng = 70

math = 80

total = kor+eng+math

avg = total/3



패턴화된 모듈들 함수.


플랫폼을 함수화 한 것 = API


모듈화 - 재사용  , 집중화, 협업


모듈화의 기본 - 차단!

'Yame Programmer > JAVA' 카테고리의 다른 글

[이론] 9.값과 연산자  (0) 2015.06.10
[이론] ASCII / UNICODE  (0) 2015.06.10
[이론] 함수 그리고 객체와 캡슐  (0) 2015.06.03
[이론] WORA(자바 플랫폼)  (0) 2015.06.03
[이론] 프로그래밍의 종류  (0) 2015.06.03

an exception has been caught while processing the refactoring delete resource 에러가 나는 경우.


프로젝트를 지우려는데 일부만 지워지고 나머진 안지워지고 에러창이 난다...


이클립스에서 지우려고 하는데 어딘가에서 쓰고 있기 때문이다.


github 에서 검색중 발견한 댓글


This is probably going to be a limitation on windows which locks the files in use. bndtools is using bnd which is using the plugins in cnf. On a sane file system, they can be deleted. I supposed the only thing that could be done is to set the files up for deletion on vm exit.

You can, of course, complete the deletion from the command line after exiting eclipse.



대충... 그냥... 다른데서 쓰고 있으니까 못지운다는 얘기 같은데...


서버 끄고 이클립스 끄고 다시 열어서 지우니까 지워진다.




포스팅이 도움이 되셨다면 마우스를 조금만 움직여서 

공감하기를 눌러주세요 블로거에게 큰 힘이 됩니다~! 


+ Recent posts