HighCode

블로그 이미지

프알못

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

'HighCode/Java'에 해당되는 글 11건

제목 날짜
  • [SPRING] JSP 주석 정리 2018.09.06
  • [Spring] 이클립스(eclipse) 톰캣 연동 오류 총 정리(3) 2018.08.25
  • [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
  • 프알못을 위한 Java 04. 조건문 if 와 switch 2016.09.27
  • [TIP] 정규표현식(Pattern Matching) 완전 정리!(6) 2016.09.22
  • [TIP] 두 날짜 사이의 차이 계산하기(1) 2016.09.21
  • 프알못을 위한 Java - 02. 문자열 출력 2016.09.04

[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

    비밀댓글입니다

트랙백

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

[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

    오 깔끔한 정리 감사드려요

트랙백

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

프알못을 위한 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

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

트랙백

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

[TIP] 두 날짜 사이의 차이 계산하기

HighCode/Java 2016. 9. 21. 12:07

프로그래밍을 하다 보면 날짜 계산을 할 경우가 생기게 되는데요..


그럴때 사용할 수 있는 방법을 소개하겠습니다.


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
public void calDateBetweenAandB()
{
    String date1 = "2016-09-21";
    String date2 = "2016-09-10";
 
    try{ // String Type을 Date Type으로 캐스팅하면서 생기는 예외로 인해 여기서 예외처리 해주지 않으면 컴파일러에서 에러가 발생해서 컴파일을 할 수 없다.
        SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
        // date1, date2 두 날짜를 parse()를 통해 Date형으로 변환.
        Date FirstDate = format.parse(date1);
        Date SecondDate = format.parse(date2);
        
        // Date로 변환된 두 날짜를 계산한 뒤 그 리턴값으로 long type 변수를 초기화 하고 있다.
        // 연산결과 -950400000. long type 으로 return 된다.
        long calDate = FirstDate.getTime() - SecondDate.getTime(); 
        
        // Date.getTime() 은 해당날짜를 기준으로1970년 00:00:00 부터 몇 초가 흘렀는지를 반환해준다. 
        // 이제 24*60*60*1000(각 시간값에 따른 차이점) 을 나눠주면 일수가 나온다.
        long calDateDays = calDate / ( 24*60*60*1000); 
 
        calDateDays = Math.abs(calDateDays);
        
        System.out.println("두 날짜의 날짜 차이: "+calDateDays);
        }
        catch(ParseException e)
        {
            // 예외 처리
        }
}    
        
Colored by Color Scripter
cs


18 line 이해 안되시는 분. getTime() 에 대한 문서를 보게되면..


Declaration

public long getTime()

Return Value

This method returns how many milliseconds have passed since January 1, 1970, 00:00:00 GMT


번역: 이 메소드는 해당 날짜가 1970년 1월 1일 00:00:00시 부터 얼마나 지났는지를 리턴합니다.


출처 : https://www.tutorialspoint.com/java/util/date_gettime.htm


getTime() 을 한번 써보시면 알게될거예요..



20 line에서는 Math.abs() 를 통해 음수 결과일 경우 양수로 바꿔주었습니다.


날짜 차이만 구하는 거라면 이 방법이 깔끔하게 값을 이용할 수 있습니다.










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

'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 프알못
  • Mc
    2018.10.15 22:02

    7번줄 SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
    mm은 분이고 MM이 월입니당!

트랙백

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

프알못을 위한 Java - 02. 문자열 출력

HighCode/Java 2016. 9. 4. 16:56

간단하게 자바를 이용해서 원하는 내용을 출력하는 간단한 프로그램을 만들어 봅시다.


예제 먼저 보여드리고 설명해드리겠습니다.


예제1)

1
2
3
4
5
6
7
8
9
10
11
12
13
 package highcode;
 
public class test {
 
    public static void main(String[] args) {
        System.out.println("Hello JavaWorld");
        System.out.print("Hello JavaWorld\n");
        System.out.printf("Hello JavaWorld");
    }
 
}
 
 
Colored by Color Scripter
cs


코드에서 보이는 생소한 3줄 각각 알아보겠습니다.


1. (line : 6)


6
System.out.println("Hello JavaWorld");
cs


System.out.println() 함수 입니다. 괄호안에 입력된 내용을 출력하는 함수이고 평문은 ""이용해서 wrapping 시켜줘야 합니다.

특징은 자동으로 개행(줄을 바꿈. 자동엔터라고 생각하세요)이 되는 함수 입니다.

다양한 응용법은 변수를 배우고 추가적으로 알려드리겠습니다.


2. (line : 7)


7
System.out.print("Hello JavaWorld\n");
cs


System.out.print() 함수 입니다. System.out.println() 함수와 마찬가지로 괄호안에 입력된 내용을 출력하며 평문은 ""으로 감싸줘야 합니다.

System.out.println()와는 다르게 자동으로 개행하지 않습니다. 그래서 위 예제에는 개행문자 \n을 따로 기입해주었습니다.

개행문자와 같은 이스케이프 시퀀스(escape sequence)는 따로 정리해드리겠습니다.


3. (line : 8)


8
System.out.printf("Hello JavaWorld");
cs


System.out.printf() 함수 입니다. 위의 함수들과 마찬가지로 괄호안에 입력된 내용을 출력할때 사용하고 평문은.. 알죠?

System.out.print() 함수처럼 자동으로 개행하지 않습니다. 개행문자(\n)을 통해 개행시킬 수 있습니다.

위 두 출력함수와의 차이점은 C언어 스타일의 출력을 지원한다는 것입니다. 

이 스타일은 차차 알아보도록 합시다.



여기서 중요한 포인트 1. 줄마다 끝에 ;(세미콜론) 이 붙는데 이거 뭔가요?


컴퓨터에게 "끝"을 알려주기 위해 사용합니다. 변수의 선언, 함수의 사용 등 거의 모든 문법 뒤에 온다고 알아두세요. 예외도 있답니다.



출력함수 응용



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package highcode;
 
public class test {
 
    public static void main(String[] args) {
        System.out.println("Hello I'm System.out.println()");
        System.out.println();
        System.out.print("Nice to meet you.\n I'm System.out.print()\n\n");
        System.out.printf("Hi guys. My name is System.out.print()\n\n");
        
        System.out.println("안녕 나는 한국인이야.");
        System.out.print("こんにちは。私は日本人です。\n");
        System.out.printf("你好。我是日本人。");
    }
 
}
 
 
 
Colored by Color Scripter
cs


1. (line : 7)

System.out.println();


System.out.println() 함수가 자동으로 개행한다는것을 응용해서 단순히 개행을 위해 호출할 수도 있습니다.


2. (line : 8)


개행문자는 얼마든지 여러번 써도 상관없습니다. 이런식으로 사용하면 한 함수로 여러줄을 만드는것도 가능합니다.


3. (line : 10)

(빈공간)


아무리 파일내에서 엔터를 쳐도 개행되지 않습니다. 개행을 위해서는 개행문자 혹은 자동으로 개행을 하는 함수를 이용해주세요.


4. (line : 11, 12, 13)


11
12
13
System.out.println("안녕 나는 한국인이야.");
System.out.print("こんにちは。私は日本人です。\n");
System.out.printf("你好。我是日本人。");
cs


출력함수들은 유니코드를 지원하기 때문에 영어뿐 아니라 다양한 charset을 지원합니다. 이때 파일은 UTF-8형식으로 저장되어야 합니다.



출력함수를 여러 가지로 스스로 응용해보시길 바랍니다. 오늘은 여기까지 하고 다음시간에는 변수에 대해 알아보겠습니다.







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

'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 프알못

트랙백

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

모두를 위한 프로그래밍, 보안, 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