HighCode

블로그 이미지

프알못

모두를 위한 프로그래밍, 보안, IT 정보

'HighCode'에 해당되는 글 14건

제목 날짜
  • [SPRING] JSP 주석 정리 2018.09.06
  • [Spring] 이클립스(eclipse) 톰캣 연동 오류 총 정리(3) 2018.08.25
  • [C] Anti Sandbox 2017.03.29
  • [Spring] Controller 에서 ModelAndView 와 String 으로 리턴할때 차이 2016.12.22
  • [Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 2016.12.21
  • [JSTL] Map에 있는 elements들을 원하는 순서대로 출력 2016.12.21
  • [Spring] Restful한 스프링 @ResponseBody vs @RestController(1) 2016.12.21
  • [VB] Visual Basic 6.0 에서 C/C++ DLL 사용하기 2016.10.10
  • 프알못을 위한 Java 04. 조건문 if 와 switch 2016.09.27
  • [TIP] 정규표현식(Pattern Matching) 완전 정리!(6) 2016.09.22

[SPRING] JSP 주석 정리

HighCode/Java 2018. 9. 6. 15:12

JSP에서는 두 종류의 주석문을 사용할 수 있다.



1. <!-- --> 


<!-- 여기에 있는 글자는 주석 처리 됩니다. -->


2. <%-- --%>


<%-- 여기에 있는 글자는 주석 처리 됩니다. --%>



둘의 차이점은 html 소스 보기에서 확인할 수 있다.


html문서에서 소스보기를 할때 


<!-- -->는 주석이 소스코드로 보이게 된다.


하지만 <%-- --%>는 소스보기에도 보이지 않는다. 



두 주석의 특징을 고려해서 주석을 사용하자

저작자표시비영리동일조건

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

[SPRING] JSP 주석 정리  (0) 2018.09.06
[Spring] 이클립스(eclipse) 톰캣 연동 오류 총 정리  (3) 2018.08.25
[Spring] Controller 에서 ModelAndView 와 String 으로 리턴할때 차이  (0) 2016.12.22
[Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path  (0) 2016.12.21
[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
Posted by 프알못
자바

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[Spring] 이클립스(eclipse) 톰캣 연동 오류 총 정리

HighCode/Java 2018. 8. 25. 13:49

1. 자바 가상머신 오류


오랜만에 스프링 프로젝트를 할 일이 생겨서 기본 셋팅을 하고 나니 다음과 같은 오류가 나타났다.


주 오류 내용


Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.


서버 재설정하고 힙 메모리 용량과 vm 관련 설정을 바꿔봐도 해결되지 않았다.

구글을 통해 영미권 사이트를 돌아다녀서 해결법을 알아냈다.


해당 오류는 이클립스 Oxygen a.3 버전에서 발생했다.


이클립스가 현재 PC에 설치된 jdk 의 버전과 호환이 안되는경우 발생한다는것이다. (필자의 경우 jdk10)


jdk8로 새로 다운받아서 서버셋팅을 다시 해주니 잘 구동되었다.


이클립스를 압축파일이 아닌 설치형으로 받은경우 이클립스 역시 다시 설치해줘야하는것 같다.


요약하자면 자신의 jdk 와 현재 설치된 이클립스의 버젼이 잘 호환되는지 확인해서 맞춰줘야한다는 것!





2. The superclass "javax.servlet.http.HttpServlet" wsa not found on the Java Build Path



JSP 파일 제일 첫줄에 나오는 오류.


보통 Runtime이 제대로 설정이 안되서 발생한다.


해당 오류가 나는 프로젝트 Properties > Project Facets > 오른쪽 탭에서 Runtimes 탭 > 해당 버전의 Tomcat 선택후 Apply






3. bootstrap.jar which is referenced by the classpath, does not exist

bootstrap.jar 외에도 다른 jar 파일에서도 발생할 수 있는 오류로 해당 jar 파일을 찾을 수 없을 경우에 발생하는데,
해당 jar파일이 있는 경로를 잘못 설정해줬거나 동일한 jar 파일이 여러개 등록되어있을경우 발생할 수 있다.


오류가 나는 프로젝트 Run As > Run Configurations... > Apache Tomcat > 해당 프로젝트에 설정된 Tomcat 서버 선택 > Classpath 탭 선택


Classpath 탭에서 오류가 나는 jar 파일의 경로를 정확하게 수정해주고 중복되는 jar파일을 한 개 빼고 제거 해주면 오류가 해결된다.

아예 등록이 안되어있다면 Add JARs... 버튼을 눌러 새로 등록해주면 될 것이다.




4. 그외 서버 실행시 나타나는 오류. 보통은 Error: Could not create the Java Virtual Machine.


1번 오류와 유사하지만 2줄이 아닌 한줄만 나오는경우 이클립스 폴더 내의 eclipse.ini 의 설정을 바꿔주는것으로 해결이 가능한경우가 있다.


4-1)


이클립스가 jdk위치를 제대로 잡지 못하는경우 발생할 수 있다.

eclipse.ini 설정파일을 편집프로그램으로 연 뒤 openFile 밑에 설정을 추가 해주자


openFile // 이 줄 말고 아랫줄부터 추가할것

-vm

C:\Program Files\Java\[자신의 jdk 폴더]\bin\javaw.exe


4-2)


서버 실행시 메모리에 필요한 파일을 적재하다가 용량 문제로 오류가 나는경우에는 해당 해결법이 도움이 될 수 있다. 

eclipse.ini 설정파일 아래에 Heap 메모리 설정 부분을 수정 해준다.


-Xms512m // 최소 heap 메모리 관련 설정. 256 혹은 512로 잡아준다. 메모리에 여유가 있다면 더 높게도 OK

-Xmx512m // 최대 heap 메모리 관련 설정. 512 혹은 그 위로 잡아주되 최소 heap 설정과 편차가 너무 많이 나면 오류가 날 수 있다고 함


그 외에 현재 프로세스중 메모리를 가장 많이 차지하는 프로세스를 종료 시켜 메모리를 확보하는것으로도 오류를 방지 할 수 있다고 한다.

스프링 서버를 실행하기 전에 충분한 메모리가 확보되어있는지 확인해보자.



이클립스 오류, 이클립스 스프링 오류, eclipse spring 오류, 이클립스 에러, 톰캣 에러, tomcat 오류, eclipse 에러, eclipse error, tomcat error




저작자표시비영리동일조건

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

[SPRING] JSP 주석 정리  (0) 2018.09.06
[Spring] 이클립스(eclipse) 톰캣 연동 오류 총 정리  (3) 2018.08.25
[Spring] Controller 에서 ModelAndView 와 String 으로 리턴할때 차이  (0) 2016.12.22
[Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path  (0) 2016.12.21
[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
Posted by 프알못
스프링, 이클립스, 자바

  • 2018.08.25 17:58

    비밀댓글입니다


    • 2018.08.25 17:59

      비밀댓글입니다


  • 2018.09.09 21:37

    비밀댓글입니다

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[C] Anti Sandbox

HighCode/C/C++ 2017. 3. 29. 17:11

작성한 C언어 프로그램을 샌드박스로 실행 할 수 없도록 하는 코드 입니다.


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
bool detectSandbox(char* exeName, char* user){
// Used for detecting sandboxes. So far it detects
// Anubis, CW, Sunbelt, Sandboxie, Norman, WinJail.
 
char* str = exeName;
char * pch;
 
HWND snd;
 
if( (snd = FindWindow("SandboxieControlWndClass", NULL)) ){
return true; // Detected Sandboxie.
} else if( (pch = strstr (str,"sample")) || (user == "andy") || (user == "Andy") ){
return true; // Detected Anubis sandbox.
} else if( (exeName == "C:\file.exe") ){
return true; // Detected Sunbelt sandbox.
} else if( (user == "currentuser") || (user == "Currentuser") ){
return true; // Detected Norman Sandbox.
} else if( (user == "Schmidti") || (user == "schmidti") ){
return true; // Detected CW Sandbox.
} else if( (snd = FindWindow("Afx:400000:0", NULL)) ){
return true; // Detected WinJail Sandbox. 
} else {
return false;
}
}

cs


sandboxies, anubis, sunbelt, CW Sandbox, WinJail, Norman Sandbox 를 모두 탐지가능합니다.

저작자표시비영리동일조건

'HighCode > C/C++' 카테고리의 다른 글

[C] Anti Sandbox  (0) 2017.03.29
Posted by 프알못
c언어, IT

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[Spring] Controller 에서 ModelAndView 와 String 으로 리턴할때 차이

HighCode/Java 2016. 12. 22. 14:33

Controller 에서 View로 값을 넘길 때, ModelAndView 혹은 String으로 반환형을 줄 수 있다.

이 때 어떤 차이점이 있는지 궁금하여 검색을 하던중 한 블로그에서 좋은 글을 발견했다.




소스코드 : STS케플러 버전에서 Spring MVC Project를 생성하면 아래와 같은 HomeController 코드가 기본으로 생긴다. 보시다시피 한국에서 가장 많이 쓰이는(?)  ModelAndView 반환 형식이 아니다 String이다.


그럼 이 녀석은 어떻게 ModelAndView로 되는걸까?






DispatcherServlet을 통하는것은 동일 하다. 이후 적용되는 ViewNameMethodReturnValueHandler를 참고하면


String 형식일 경우, mavContainer 에 ViewName을 셋팅하는 작업을 하고 있음을 볼 수 있다. 이 코드에서 추가로 볼 수 있는 결국에 이렇게 mavContainer에 셋팅 된 이후




RequestMappingHandlerAdapter에서


ModelMap model = mavContainer.getModel();


ModelAndView mav = new ModelAndView(mavContainer.getViewName(), model);


으로 ModeAndView를 확정한다.




출처 : dev.bistro님의 블로그(스프링MVC에서 return type이 String 일경우)




저작자표시비영리동일조건

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

[SPRING] JSP 주석 정리  (0) 2018.09.06
[Spring] 이클립스(eclipse) 톰캣 연동 오류 총 정리  (3) 2018.08.25
[Spring] Controller 에서 ModelAndView 와 String 으로 리턴할때 차이  (0) 2016.12.22
[Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path  (0) 2016.12.21
[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

HighCode/Java 2016. 12. 21. 17:36
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

갑자기 에러가 나서 뒤적여보니 톰캣 라이브러리가 제대로 import 되지 않아서 였다.


해결법

해당 프로젝트 마우스 우클릭 > Build Path > Configure Build Path 
Library 탭에서 add Library 버튼 > Server Runtime > Tomcat Server(버젼은 각자의 버젼에 맞도록) 선택




저작자표시비영리동일조건

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

[Spring] 이클립스(eclipse) 톰캣 연동 오류 총 정리  (3) 2018.08.25
[Spring] Controller 에서 ModelAndView 와 String 으로 리턴할때 차이  (0) 2016.12.22
[Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path  (0) 2016.12.21
[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[JSTL] Map에 있는 elements들을 원하는 순서대로 출력

HighCode/Java 2016. 12. 21. 17:21

Map에 들어있는 각 요소들을 내가 원하는 순서대로 출력하기 위한 방법을 찾던 중 한 블로그에서 좋은 jstl을 소개해줘서 퍼왔습니다.


미리 정의한 key들을 이용하여 map에 있는 요소들을 순서대로 출력할 수 있다.

back-end에서 Map을 순서대로 정렬하는 방식을 쓸 수도 있지만 그럴경우 서버의 성능저하로 이어진다.


map에 있는 요소를 원하는대로 출력하고 싶다면 이런 방식을 사용하는게 좋을듯 하다.



출처 : http://reikop.tistory.com/entry/JSTL-Array-cset-Tag

저작자표시비영리동일조건

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

[Spring] Controller 에서 ModelAndView 와 String 으로 리턴할때 차이  (0) 2016.12.22
[Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path  (0) 2016.12.21
[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[Spring] Restful한 스프링 @ResponseBody vs @RestController

HighCode/Java 2016. 12. 21. 17:11

Spring 에서 restful 하게 작성하기 위해 @Controller 내에 @ResponseBody 사용하거나 혹은 @RestController 을 사용할 수 있습니다.


스프링 MVC 프레임 워크와 REST


일반적인 Spring MVC 컨트롤러와 RESTful 웹 서비스 컨트롤러의 주요 차이점은 HTTP 응답 바디가 생성되는 방식이다. 일반적인 MVC 컨트롤러는 View 기술을 사용하지만, RESTful 웹 서비스 컨트롤러는 객체를 반환하기 만하면(!) 객체 데이터는 JSON / XML 형식의 HTTP 응답에 직접 작성되게 됩니다.


▲ 일반적인 Spring MVC 흐름



@ResponseBody 와 @RestController 두가지 차이점을 알아보기 전에 우선 스프링에서 REST하게 데이터가 송수신 되는 과정은 다음과 같다.


  1. 클라이언트에서 웹서비스에 요청을 보냄.
  2. Handler Mapping과 그 타입을 찾는 Dispatcher Servlet에 의해 요청이 가로채짐.
  3. 요청은 Controller에 의해 처리되고 응답은 Dispatcher Servlet으로 반환되고 Dispatcher Servlet은 다시 View로 보내게 됩니다.

@ResponseBody

메소드에서 @ResponseBody 어노테이션을 사용하면 Spring은 반환 값을 변환하여 HTTP Response 에 자동으로 씁니다. Controller 클래스의 각 메소드에는 @ResponseBody 어노테이션이 있어야합니다.





@RestController


Spring 4.0은 @Controller와 @ResponseBody 을 합쳐놓은것 이상의 역할을 수행하는@RestController를 추가했습니다. 컨트롤러 클래스에 @RestController 어노테이션을 작성함으로써 더 이상 @ResponseBody를 모든 요청 매핑 메소드에 추가 할 필요가 없습니다. @ResponseBody 어노테이션은 이제 기본으로 작동..!




결론


스프링을 restful하게 만들 때, 앞으로는 스프링 4.0 부터 추가된 @RestController을 활용하므로써 기존의 @ResponseBody in @Controller 방식을 벗어나 좀 더 쉽게 restful한 코드를 작성할 수 있습니다.



각각의 예제는 다음 시간에 올려드리겠습니다. 그럼 이만 :)

저작자표시비영리동일조건

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

[Spring:Error] The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path  (0) 2016.12.21
[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
Posted by 프알못
  • 지나가던럭초
    2017.03.03 15:33

    오 깔끔한 정리 감사드려요

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[VB] Visual Basic 6.0 에서 C/C++ DLL 사용하기

HighCode/Other 2016. 10. 10. 06:17


- DLL 파일(TestDll.dll)

1
2
3
4
5
6
7
8
9
10
#define TEST_DLL extern "C" __declspec(dllexport)
 
// 1. 'int' Return
TEST_DLL int Test_Sum(int Num1, int Num2);
 
// 2. 'void' Return
TEST_DLL void Test_Output();
 
// 3. 'void*' Return
TEST_DLL void* CreateUser();
cs


▲DLL 에 이러한 함수들이 있다고 가정을 합니다.



미리 선언해줄 부분


1
2
3
4
5
6
7
8
' 1. 'int' Return 
Declare Function Test_Sum Lib "TestDll.dll" (ByVal Num1 As Integer, ByVal Num2 As Integer) As Integer
 
' 2. 'void' Return
Declare Sub Test_Output Lib "TestDll.dll" ()
 
' 3. 'void*' Return
Declare Function CreateUser Lib "TestDll.dll" () As Int32

cs


기본틀


1
Declare [Function / Sub] <FunctionName> Lib "<DLL Name>" (인자들) (As 반환값)
cs




★ VB에서 C/C++ DLL을 사용할 때 알아둘 점


1. 해당함수가 리턴하는 값이 없는 경우(void 형 함수)에는 Sub 를 사용한다.


2. 함수의 인자가 값을 넘겨주는 경우는 ByVal 을 주소값(포인터)를 넘겨주는 경우는 ByRef를 사용한다.


3. 선언의 제일 마지막에는 해당함수의 리턴형태를 As 를 사용해서 지정해준다.

    void* 함수처럼 포인터를 리턴하는 경우는 해당 바이트의 수에 맞는 데이터형을 지정한다.

    ( DLL 에서 32비트 데이터로 리턴을 하면 VB에서도 32비트 데이터형으로 받는다. )


선언이 끝나면 코드에서 사용이 가능한데 사용방법은 C/C++ 에서 함수의 사용과 비슷합니다.


단, Sub 로 선언한 함수의 경우는 Call 명령으로 호출해주도록 합니다.

(ex. Call Test_Output() )



저작자표시비영리동일조건

'HighCode > Other' 카테고리의 다른 글

[VB] Visual Basic 6.0 에서 C/C++ DLL 사용하기  (0) 2016.10.10
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

프알못을 위한 Java 04. 조건문 if 와 switch

HighCode/Java 2016. 9. 27. 16:43

오늘은 if와 for문을 알아봅시다


조건문 if 


어디에 왜 쓰이나?


프로그램을 제작하다보면 특정 조건에서만 동작하게 하고픈 로직이 분명 존재하게 됩니다.

사용자 입력값에 따라 다른 값을 넘겨준다던가 할때 유용하게 사용할 수 있겠죠?


if 사용법


1
2
3
4
5
6
7
int var = 3;
 
if(var==3) // 조건문 if. 여기서는 var이 3이면 조건식을 만족한다.
    {
        // 조건식이 만족하면 실행되는 
        System.out.println("I'm "+ var);
    }

cs


3행에서 if문을 써서 조건을 확인하고 있습니다. 여기서는 var이 3일때를 조건으로 놓고 만족한다면 if 내부의 루틴을 실행하게 됩니다.

만약 만족하지 않는다면 if내부의 코드는 실행되지 않습니다.


여러가지 조건을 주기


if문을 통해 여러가지 조건을 충족하도록 조건을 줄 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int var = 3;
 
if(var==3) 
    {
        System.out.println("I'm "+ var);
    }
else if(var==4) // 추가적인 조건
    {
        System.out.println(" I'm not executable :< ");
    }
else if(var==5)
    {
        System.out.println("blah blah");
    }
else // 아무 조건도 충족 못한다면?
    System.out.println("Fully not matched!");
cs


새로운 키워드가 등장했습니다. else if 와 else.


if else


if문으로 조건을 주고 그 외의 조건을 더 주고 싶다면 if else를 통해 조건을 주면 되겠습니다.

예제에서는 if문 외의 조건을 추가적으로 else if를 통해 2개 더 주고 있습니다.


else


else문은 만약 위 조건식이 모두 충족하지 않을 경우 실행되는 조건입니다. var이 3,4,5 중 하나도 충족하지 않는다면 else문 내의 코드가 실행될것입니다.



if문 내의 if?


if문 내에 if문을 추가적으로 사용할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
int var = 3;
int var2 = 4;
 
if(var==3) 
    {
        if(var2==4) // 이중 if
            {
                System.out.println("var2: "+var2);
            }
    }

cs


if문을 2중으로 사용해서 이런식으로 조건을 줄 수 있습니다. var이 3일경우 처음 조건이 실행되며, 그다음 var2 4일 경우에만 8행의 출력문이 실행되게 됩니다.



if문을 이런식으로 다중으로 사용할 수 있지만 꼭 필요한 경우가 아니라면 이런 방식은 지양하고 코드를 작성하셔야 합니다.

위의 코드라면 이렇게 개선해볼 수 있겠죠?


1
2
3
4
5
6
7
int var = 3;
int var2 = 4;
 
if(var==3 && var2==4) 
    {
        System.out.println("I definitely agree what var is three and var2 is four.");
    }

cs


if문 처음에 조건을 다중으로 주는 방법으로 다중 if문을 회피할 수도 있습니다.

다중if문은 꼭 필요한 경우에만!




조건문 switch


또다른 조건문 switch 입니다.


사용하는이유는 if와 마찬가지로 특정코드실행에 조건을 주기 위함입니다.



swtich 문 사용법 - 예제1


1
2
3
4
5
6
7
8
int var = 3;
 
swtich(var)
{
    case 1: System.out.println(var); break;
    case 2: System.out.println(var); break;
    case 3: System.out.println(var); break;
}

cs


switch 외에 생소한 키워드 case와 break 가 보이는군요.


먼저 switch문의 괄호안에 확인할 타깃을 넣어주세요. -> switch(타깃)

예제에서는 타겟으로 var을 사용하고 있습니다.

그다음 switch문 안에 case라는 키워드를 이용해서 검사할 조건을 넣어주시면 됩니다.


5

6

7
// 타겟이 1일경우
case 1: System.out.println(var); break;
// 타겟이 2일경우
case 2: System.out.println(var); break;
// 타겟이 3일경우
case 3: System.out.println(var); break;
cs


case <조건> : <조건이 만족할때의 실행할 코드> 이런식으로 써주시면 됩니다.


예제에서는 var은 3이니까 case 3 조건을 만족 합니다.


break는 각 조건식마다 맨 마지막에 적어주는 키워드로 현재 진행중인 switch문을 종료합니다.

종료를 시키지 않으면 다른 case문도 조건을 무시하고 실행시키므로 조심하셔야 해요.



나쁜 코드 - 예제 2


1
2
3
4
5
6
7
8
int num = 1;
 
switch(num)
{
    case 1: System.out.println("1만 나오겠지?");
    case 3: System.out.println("이건 실행 안될거야");
    case 5: System.out.println("ㅎㅎㅎㅎ");
}

cs


break문을 쓰지 않은 switch ~ case문 입니다.


[예제 2 실행결과]


1만 나오겠지?

이건 실행 안될거야

ㅎㅎㅎㅎ


break가 없으면 이런 참사가 일어나니 종료시점에서 꼭 써주세요.



if에는 else가 있다면 switch에는? - 예제 3


1
2
3
4
5
6
7
8
9
int num = 10;
 
switch(num)
{
    case 1: System.out.println("1"); break;
    case 2: System.out.println("2"); break;
    case 3: System.out.println("3"); break;
    default: System.out.println(num); break;
}

cs


switch문에도 if의 else 처럼 모든 조건을 충족하지 않으면 실행하는 default 문이 있습니다.

이 예제에서는 num은 조건식을 만족하지 못하므로 default가 실행이 될겁니다.




예제4


1
2
3
4
5
6
7
8
String s = "A";
 
switch(s)
{
    case "A": System.out.println(s); break;
    case "B": System.out.println(s); break;
    case "C": System.out.println(s); break;
}

cs


이렇게 문자열이 타겟이더라도 잘 돌아갑니다.



예제5


1
2
3
4
5
6
7
8
String s = "가나";
 
switch(s)
{
    case "가": System.out.println(s); break;
    case "가나": System.out.println(s); break;
    case "가나다": System.out.println(s); break;
}

cs


유니코드문자도 사용가능!


예제6 - 좋은 가독성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int num = 10;
 
switch(num)
{
    case 1: 
        System.out.println("1");
        break;
    case 2: 
        System.out.println("2");
        break;
    case 3: 
        System.out.println("3");
        break;
    default: 
        System.out.println(num);
        break;
}
cs




저작자표시비영리동일조건

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

[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[TIP] 정규표현식(Pattern Matching) 완전 정리!

HighCode/Java 2016. 9. 22. 17:48

오늘은 자바에서 지원하는 정규표현식을 이용해서 사용자가 설계된 원하는 값만 입력할 수 있도록 코드를 짜보겠습니다.


먼저 예제를 보여드린 뒤 자세히 알아보아요


예제1) 숫자만 허용


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
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class OnlyInteger {
    
    public static void main(String[] args) {
        
        Pattern p = Pattern.compile("(^[0-9]*$)");
        
        int onlyNum;
        String inputVal;
        Scanner iStream = new Scanner(System.in);
        
        inputVal = iStream.nextLine();
        Matcher m = p.matcher(inputVal);
        
        if(m.find())
        {
            onlyNum = Integer.parseInt(inputVal);
            System.out.println(onlyNum);
        }
        else
        {
            System.out.println("숫자가 아닌데..?");
        }    
    }
}
Colored by Color Scripter
cs


▲ 사용자 입력값이 숫자인지 검증하는 OnlyInteger Class 입니다.


2
3
import java.util.regex.Matcher;
import java.util.regex.Pattern;
cs


▲ 정규표현식을 사용하기 위해 import해줍니다. 


10
Pattern p = Pattern.compile("(^[0-9]*$)");
cs


▲ 숫자만 허용하는 Pattern p 입니다.


17
Matcher m = p.matcher(inputVal);
cs


▲ inputVal의 값이 저희가 선언한 패턴 p 에 맞는 조건인지 검사해서 m에 저장합니다.


19
if(m.find())
cs


▲ m.find() 는 패턴이 일치하는경우 boolean 형으로 true를 아니면 false를 리턴합니다.


21
onlyNum = Integer.parseInt(inputVal);
cs


▲ inputVal을 int형으로 형변환 해줍니다.



정규표현식 설명


대충 구조는 알았고 그럼 패턴을 만드는 방법을 알아보겠습니다.


10
Pattern p = Pattern.compile("(^[0-9]*$)");
cs


아까 예제1) 에서 사용한 Pattern 을 보면  "(^[0-9]*$)" 이 부분이 바로 패턴 부분입니다.


각각 의미를 알아보면..


표현식

 설명 

 ^

 문자열의 시작

$ 

 문자열의 종료

 .

 임의의 한 문자 (문자의 종류 가리지 않음)

 단, \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

+ 

 앞 문자가 하나 이상

? 

 앞 문자가 없거나 하나있음

 []

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 {}

 횟수 또는 범위를 나타낸다.

 ()

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

\ 

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

▲ 출처 : http://lng1982.tistory.com/141


이렇게 되시겠습니다.


예제의 ^[0-9]*$ 를 분석해보면 


^ 으로 우선 패턴의 시작을 알립니다.

[0-9] 괄호사이에 두 숫자를 넣어 범위를 지정해줄 수 있습니다.

* 를 넣으면 글자 수를 상관하지 않고 검사합니다.

$ 으로 패턴의 종료를 알립니다.


즉 , 0부터 9 까지의 수를 글자 수 제한을 하지 않고 검사하는 패턴입니다.


[자주 쓰이는 패턴]


1) 숫자만 : ^[0-9]*$

2) 영문자만 : ^[a-zA-Z]*$

3) 한글만 : ^[가-힣]*$

4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$

5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

7) 일반전화 : ^\d{2,3} - \d{3,4} - \d{4}$

8) 주민등록번호 : \d{6} \- [1-4]\d{6}

9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})



예제2) 영어만 허용 (Not Case Sensitive)


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
import java.util.regex.Pattern;
 
public class EngPattern {
    
    public static void main(String[] args) {
        
        String pattern = "^[a-zA-Z]*$";
        String input = "ABzzzDAWRAWR";
        
        
        
        boolean i = Pattern.matches(pattern, input);
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
        
        
    }
    
}
 
Colored by Color Scripter
cs


패턴분석


^[a-zA-Z]*$


a-z 까지 그리고 A-Z 까지 즉, 알파벳은 모두 허용.

* 글자 수 상관하지 않음


-> 알파벳이기만 하면 패턴에 맞음.



예제3) 파일 확장자 확인 1


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
package Pattern;
 
import java.util.regex.Pattern;
 
public class ExtendtionPattern {
    
    public static void main(String[] args) {
        
        
        String pattern = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
        String input = "abc.txt";
        
        
        
        boolean i = Pattern.matches(pattern, input);
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
    }
 
}
 
Colored by Color Scripter
cs


패턴분석


^\\S+.(?i)(txt|pdf|hwp|xls)$


^ : 시작

\ : \ 가 왔기 때문에 다음에 올 문자는 특수문자로 취급하고 , \다음 특수문자고 오면 그 자체로 취급.

\S : 공백 아닌 문자

+. : .이 반드시 한개는 와야한다.

(?i) : 대소문자 구별하지 않음.

(txt|pdf|hwp|xls) : txt 혹은 pdf 혹은 hwp 혹은 xls 만 허용. | 을 이용한 or 연산!

$ : 끝


-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.



예제4) 파일 확장자 1, 2


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
import java.util.regex.Pattern;
 
public class extensionPattern {
    
    public static void main(String[] args) {
    
        String pattern = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
        String input = "Java.pdf";
        
        String pattern2 = "(.+?)((\\.tar)?\\.gz)$";
        String input2 = "library.tar.gz";
        
        
        vaildPattern(pattern, input);
        vaildPattern(pattern2, input2);    
    }
 
    
    public static void vaildPattern(String pattern, String input)
    {
        boolean i = Pattern.matches(pattern, input);
        
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
    }
}
 
Colored by Color Scripter
cs


새로 이중 확장자를 구분하는 표현식을 추가했습니다. 여기서는 tar.gz 인지 구분합니다. 한번 테스트 해보세요



저작자표시비영리동일조건

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

[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
프알못을 위한 Java - 01. 프로젝트,클래스 생성  (0) 2016.09.04
Posted by 프알못
  • 복실이
    2018.07.25 10:42

    좋은 내용 감사합니다. 혹시 "일반전화" 패턴 내용 중 "일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$" 에서 "^\d{2.3} 괄호 안의 .가 ,로 바꾸는게 맞는지 문의드립니다.

    • Carpe D!em
      2018.08.03 10:29

      , 콤마가 맞습니다.
      우연히 방문했다가 글 보고 댓글남겨봅니다

    • 프알못
      2018.08.25 17:13 신고

      ,(콤마) 가 맞습니다. 지적 감사드려요!

  • Rudy
    2018.09.07 11:47

    패턴 중 "^\\S+.는 \ 하나가 맞는 듯...

    • Perit
      2018.10.08 16:07

      문자열 내라서 \\\\ 쓰는 게 맞고, 오히려 .이 아니라 \\\\. 이 맞을 듯

  • 정규식어려워
    2018.10.11 16:25

    .바로 뒤에 공백 혹은 줄바꿈 문자가 있는 경우를 찾고싶은데 도저히 모르겠네요 ㅠ^ㅠ 어떻게하면 될지 혹시 조언 구해도 될까요??

트랙백

※ 스팸 트랙백 차단중 ...{ ? }
이전페이지 다음페이지
블로그 이미지

모두를 위한 프로그래밍, 보안, IT 정보

by 프알못

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • [SPRING] JSP 주석 정리
  • [Spring] 이클립스(eclipse) 톰캣.. (3)
  • [C] Anti Sandbox
  • 2017년 1월 토렌트 트래커 모음(201..
  • [Spring] Controller 에서 ModelAnd..
  • 더 보기
  • 델파이개발하나요? 아니면 델파이리..
    craz_box ㆍ 2019
  • 7번줄 SimpleDateFormat format = n..
    Mc ㆍ 2018
  • .바로 뒤에 공백 혹은 줄바꿈 문자..
    정규식어려워 ㆍ 2018
  • 문자열 내라서 \\\\ 쓰는 게 맞고,..
    Perit ㆍ 2018
  • 패턴 중 "^\\S+.는 \ 하나가 맞는..
    Rudy ㆍ 2018

태그

  • 토렌트
  • 컴퓨터 청소
  • 악성코드무료치료
  • 자바
  • 맬웨어
  • 백신
  • .트래커
  • 이클립스
  • 소프트웨어
  • CCleaner
  • IT
  • 트렌드
  • 랜섬웨어
  • 2016
  • Python
  • c언어
  • 포털사이트
  • 크랙
  • 파이썬
  • 프리웨어
  • 프로그래밍 언어
  • 악성코드
  • 토렌트 사용법
  • 리버싱
  • 스프링

글 보관함


  • 2018/09
    (1)

  • 2018/08
    (1)

  • 2017/03
    (1)

  • 2017/01
    (1)
«   2020/06   »
일 월 화 수 목 금 토
  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        

링크

카테고리

분류 전체보기 (28)
HighCode (14)
C/C++ (1)
Python (1)
Java (11)
C# (0)
Other (1)
UnderCode (6)
Malware (3)
Hacking Tool (1)
Exploit (0)
Cracking (2)
Software (5)
Torrent (3)
Game (0)
Freeware (2)
App (0)
News & Issue (2)
IT꿀팁 (0)
잼잼 (1)

카운터

Total
327,760
Today
21
Yesterday
404
방명록 : 관리자 : 글쓰기
프알못's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

HighCode

모두를 위한 프로그래밍, 보안, IT 정보

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (28)
    • HighCode (14)
      • C/C++ (1)
      • Python (1)
      • Java (11)
      • C# (0)
      • Other (1)
    • UnderCode (6)
      • Malware (3)
      • Hacking Tool (1)
      • Exploit (0)
      • Cracking (2)
    • Software (5)
      • Torrent (3)
      • Game (0)
      • Freeware (2)
      • App (0)
    • News & Issue (2)
    • IT꿀팁 (0)
    • 잼잼 (1)

카테고리

PC화면 보기 티스토리 Daum