[JSP] include 사용방법


JSP include의 사용방법은 크게 두가지가 있다.

1. include directive(<%include file="file.jsp"%>) : 인클루드 디렉티브

사용방법 : 페이지가 단순히 텍스트 위주로 구성되어 있을때 사용하기 좋다.


예를 들면 페이지 헤더 또는 메타태그 등등

작동방식


동시에 컴파일 되기 때문에 main page에서 사용하던 서버변수를 include page에서도 똑같이 사용가능 하다.




2. include action tag(<jsp:include page="file.jsp" />) : 인클루드 액션 태그


사용방법 : 모듈화 되어있는 페이지들을 합쳐서 보여줘야 할 때 사용하기 좋다.


예를들면 온라인 마켓같은 곳의 카테고리만 분류하고 레이아웃이 같은 상품 정보만 보여주는 곳 등등...

작동 방식



HTML의 렌더링 방식과 같이 codument의 상단부터 차레로 하단까지 처리한다.


각각의 페이지에서 선언된 서버변수는 같이 사용할 수 없다.


페이지에 파라메터 전달하기


사용 예제

<jsp:include page="productModule.jsp">
    <jsp:param name="category" value="product1" />
</jsp:include>

한 페이지에 여러 jsp:include를 사용하여 여러 모듈을 붙이는 방식으로 사용할 수 있다.



'JAVA' 카테고리의 다른 글

[JAVA] null 체크  (0) 2017.12.13
[JAVA] 패스워드 정규식 (Regex)  (1) 2017.12.05
[JSP] jstl 과 el의 차이점  (0) 2017.12.04
[JSTL]choose와 when, otherwise 사용법  (0) 2017.11.23
[JSTL]fmt:formatNumber  (0) 2017.11.22

[자바] 널 체크


NullPointerException(java.lang.NullPointerException) : 객체나 함수를 사용할 때 인자값이 null이면 해당 함수나 객체를 사용할 수 없어 오류가 발생하게 된다.


쉽게 얘기하면 함수를 사용할 때 인자값의 타입이 지정되어 있는데 이 인자값에 null 이 들어가면 발생하는 오류다.



기본적인 null 체크 예제


if(value != null){
    //do something(value);
}


널이면 do sonthing코드를 실행하지 않게 하여 오류를 피한다.


String 의 null 체크 예제


if(StringUtils.isNotBlank(value)){
    //do somthing
}

org.apache.commons.lang3.StringUtils 을 사용하여 빈값일때는 do something을 실행 하지 않게 한다.


String value = "";
// value에 값을 넣고...
if(value.equals("")){
     // do something
}

null은 아니고 빈 스트링 문자열 일때는 equals 를 사용한다.


if("".equals(value.getStringName()){
    //do something
}


비교값을 왼쪽으로 두어 비켜가는 꼼수도 있다.



List형 null 체크 예제


객체 자체가 널인지 체크하고 사이즈도 체크하자.

if(listValue != null && listValue.size() > 0){
    //do somethong
}


커스텀 클래스를 만들어 사용하는 예제


public class CustomUtils {
    public static boolean isEmpty(Object obj) {
         if (obj == null) { return true; }
         if ((obj instanceof String) && (((String)obj).trim().length() == 0)) { return true; } 
         if (obj instanceof Map) { return ((Map<?, ?>)s).isEmpty(); }
         if (obj instanceof List) { return ((List<?>)obj).isEmpty(); }
         if (obj instanceof Object[]) { return (((Object[])obj).length == 0); } 
 
         return false;
     }
 }


오브젝트 객체에 대한 널체크를 한 후 빈값인지 아닌지 true, false로 반환한다.


사용법은 다음과 같다.


if(!CustomUtils.isEmpty(mapValue)){
    //do sonething
}


null 이면 true를 반환하기 때문에 조건문 앞에 ! 붙이는 걸 잊지 말아야 한다.

'JAVA' 카테고리의 다른 글

[jsp] include 사용방법  (0) 2018.01.01
[JAVA] 패스워드 정규식 (Regex)  (1) 2017.12.05
[JSP] jstl 과 el의 차이점  (0) 2017.12.04
[JSTL]choose와 when, otherwise 사용법  (0) 2017.11.23
[JSTL]fmt:formatNumber  (0) 2017.11.22

[JAVA] 정규식 (RegEx)


정규식

정규식이란 문자열에서 특정 문자 조합과 일치시키기 위한 패턴입니다.



정규식 사용예제

패스워드 벨리데이션 함수를 만들었다.

"정규식"이란 부분만 정규식으로 바꾸면 정상 작동한다.


import java.util.regex.Matcher;
import java.util.regex.Pattern;

private static boolean validationPasswd(String pw){
    private static Pattern p = Pattern.compile("정규식");
    Matcher m = p.matcher(pw);

    if(mtch.matches()){
        return true;
    }
    return false;
}



패스워드 정규식 예제

1. 가장 많이 사용되는 최소 8자리에 숫자, 문자, 특수문자 각각 1개 이상 포함
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"


2. 최소 8자리에 대문자 1자리 소문자 한자리 숫자 한자리
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

3. 최소 8자리에 대문자 1자리 소문자 1자리 숫자 1자리 특수문자 1자리

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}"



이메일 정규식 예제

이메일 정규식 예제

"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$"


위도, 경도 정규식 예제

위도, 경도 정규식(-90~90,-180~180 소수점 6자리)

^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$

 

IP주소 정규식 예제


"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"

정규식 확인 할 수 있는 온라인 서비스


https://regexr.com/

'JAVA' 카테고리의 다른 글

[jsp] include 사용방법  (0) 2018.01.01
[JAVA] null 체크  (0) 2017.12.13
[JSP] jstl 과 el의 차이점  (0) 2017.12.04
[JSTL]choose와 when, otherwise 사용법  (0) 2017.11.23
[JSTL]fmt:formatNumber  (0) 2017.11.22

JSTL과 EL의 차이점


JSP를 사용하면 사용하게 되는 EL과 JSTL이있습니다.


EL은 Expression Language를 뜻하고


JSTL은 JSP Standard Tag Library를 뜻합니다.



EL예제


<% = test %>
${test}

위와 같은 형태로 작성되는것을 EL이라고 한다.


JSTL예제


<c:if test=""></c:if>
<c:forEach items=""></c:forEach>


위와 같은 형태로 작성하는 문법을 JSTL이라고 한다.


보통 우리가 쓰는 JSTL에서는 JSTL안의 변수에 EL을 담아서 쓰고 있다고 생각하면 된다.


그 예제는 다음과 같다.


JSTL + EL 예제



<c:forEach items="${array}" var="el" varStatus="idx">
  <p>${el.text}<p>
</c:forEach>



EL의 연산자 종류

연산부호 

 연산자

 +

-

 *

 /

 div 

 &&

and 

|| 

 or 

 ==

eq 

!= 

ne 

ge 

lt 

<= 

ge 

>= 

le 



주의할 점 

문자열에 대해서는 + 연산자는 할 수 없다.


따라서 다음과 같은 방법으로 표현한다.


<c:forEach items="${array}" var="el" varStatus="idx">
  <p>${idx.index} : ${el.text}<p>
</c:forEach>


JSTL CORE종류


<c:set> 

 변수명에 값을 할당

 <c:out>

 값을 출력

 <c:if>

 조건식에 해당하는 블럭과 사용될 scope설정

 <c:choose>

 다른 언어의 switch와 비슷 

 <c:when>

 switch문의 case에 해당

 <c:otherwise>

 switch문의 default에 해당

 <c:forEach>

 다른언어의 loop문 items 속성에 배열을 할당할 수 있음


주로 사용하는 것은 위와 같다.



다음엔 JSTL의 커스텀에 대해서 적어봐야겠다. 



'JAVA' 카테고리의 다른 글

[JAVA] null 체크  (0) 2017.12.13
[JAVA] 패스워드 정규식 (Regex)  (1) 2017.12.05
[JSTL]choose와 when, otherwise 사용법  (0) 2017.11.23
[JSTL]fmt:formatNumber  (0) 2017.11.22
VO, Map 객체 JSON 으로 변환  (0) 2017.11.19

<c:choose>


<c:choose>는 자바의 Switch문과 비슷한 역할을 합니다.


<c:when>

case와 같은 역할을 하는것은 <c:choose>안의 <c:when>태그 입니다.


<c:otherwise>

default문 같은 역할을 사용하고 싶으면 <c:shoose>태그 안에 <c:otherwise>태그를 사용합니다.


속성


<c:choose><c:otherwise> 는 속성을 사용하지 않습니다.


<c:when>은 test 속성을 사용합니다.(필수)


예제


숫자를 비교하여 HTML의 문장을 변경하는 예제이다.


<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>

<html>
   <head>
      <title>예제 example</title>
   </head>

   <body>
      <c:set var = "money" scope = "session" value = "${5000}"/>
      <p>내가 가진 돈은  : <c:out value = "${salary}"/>원 이다.</p>
      <c:choose>
         <c:when test = "${money<= 0}">
            돈 한푼도 없어요.
         </c:when>
         <c:when test = "${money > 5000}">
            담배 한갑정도 살 수 있어요.
         </c:when>
         <c:otherwise>
            답이 없네...
         </c:otherwise>
      </c:choose>
   </body>
</html>



'JAVA' 카테고리의 다른 글

[JAVA] 패스워드 정규식 (Regex)  (1) 2017.12.05
[JSP] jstl 과 el의 차이점  (0) 2017.12.04
[JSTL]fmt:formatNumber  (0) 2017.11.22
VO, Map 객체 JSON 으로 변환  (0) 2017.11.19
java의 map이나 VO 객체를 JSON으로  (1) 2017.11.17

<fmt:formatNumber>사용법


formatNumber는 숫자, 퍼센트, 돈단위를 작성할 때 사용한다.


formatNumber을 이용하여 숫자 단위마다 콤마 자동 찍기


formatNumber의 속성 중 type에 값을 number로 하면 3자리마다 콤마가 설정된다.
type의 속성 값에 할당 할 수 있는 값은 number, percentage, currency가 있다.

예제



<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>

<html>
   <head>
      <title>formatNumber</title>
   </head>
   <body>
      <h3>단위마다 콤마 찍기</h3>
      <c:set var = "money" value = "25000" />
      <p>\<fmt:formatNumber value = "${money}" type = "number"/></p>
   </body>
</html>


formatNumber을 이용하여 통화 단위로 표현하기


type속성에 currency를 사용하면 돈 단위와 액수를 표현할 수 있다.


예제



<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>

<html>
   <head>
      <title>formatNumber</title>
   </head>
   <body>
      <h3>한화로 표현하기</h3>
      <c:set var = "money" value = "25000" />
      <p><fmt:formatNumber value = "${money}" type = "currency" currencySymbol = "\"/></p>
      <h3>US 달러로 표현하기</h3>
      <fmt:setLocale value = "en_US"/>
      <p><fmt:formatNumber value = "${money}" type = "currency"/></p>
   </body>
</html>


위의 결과 값을 보면 

첫번째 한화로 표현현 값은

\25,000.00

두번째 US달러로 표현한 값은 

$25,000.00

으로 표현된다.

currency 는 소수점 두째자리까지 표현된다.


'JAVA' 카테고리의 다른 글

[JAVA] 패스워드 정규식 (Regex)  (1) 2017.12.05
[JSP] jstl 과 el의 차이점  (0) 2017.12.04
[JSTL]choose와 when, otherwise 사용법  (0) 2017.11.23
VO, Map 객체 JSON 으로 변환  (0) 2017.11.19
java의 map이나 VO 객체를 JSON으로  (1) 2017.11.17


VO객체에서 JSON으로 변환하기



google-gson

GSON은 구글의 오픈소스 라이브러리로 자바의 Object객체를 JSON으로 변환해 준다.

GSON을 이용하면 다음과 같다.



Map<String, Object> data = new HashMap<String, Object>();
data.put( "result", "success" );
data.put( "message", "ok" );
data.put( "statusCode", 200 );
JSONObject json = new JSONObject();
json.putAll( data );
System.out.printf( "JSON: %s", json.toString(2) );




Jackson Project

Jackson 라이브러리 역시 JSON 변환이 가능하다.


Jackson을 이용하면 다음과 같다.



Map<String, Object> data = new HashMap<String, Object>();
data.put( "result", "success" );
data.put( "message", "ok" );
data.put( "statusCode", 200 );
String json = new ObjectMapper().writeValueAsString(data);
System.out.println(json);



두 라이브러리 모두 Map 대신에 VO객체도 가능하다.



취향에 맞게 골라 쓰면 된다.



'JAVA' 카테고리의 다른 글

[JAVA] 패스워드 정규식 (Regex)  (1) 2017.12.05
[JSP] jstl 과 el의 차이점  (0) 2017.12.04
[JSTL]choose와 when, otherwise 사용법  (0) 2017.11.23
[JSTL]fmt:formatNumber  (0) 2017.11.22
java의 map이나 VO 객체를 JSON으로  (1) 2017.11.17

스프링 프레임워크를 사용하다가 가끔은 AJAX 없이 첫페이지에서 데이터를 JSON으로 JSP에 넘겨주고 싶을때


서버에서 넘겨주는 ModelMap을 JSP페이지에서 어떻게 받을지에 대한 글 입니다.



ModelMap.addAttribute("result", result);


보통 이렇게 JAVA파일에 작성하여 JSP의 JSTL을 사용합니다.


그런데 가끔 자바스크립트의 데이터로 사용할 일이 생깁니다. 그럴땐 다음과 같은 방법으로 JSON을 생성합니다.


자바파일에서 


JACKSON을 이용하는 방법



String json = new ObjectMapper().writeValueAsString(JsonVO); ModelMap.addAttribute("result", json );



또는


Gson을 사용하는 방법



Map<String, String> jsonMap = new HashMap<String, String>();
jsonMap.put("one", "hello");
jsonMap.put("two", "world");

Gson gson = new GsonBuilder().create();
String json = gson.toJson(jsonMap);
ModelMap.addAttribute("result", json );



이런 방식으로 JSP단으로 JSON을 넘겨주고 JSON을 스크립트에서 받을때는 



<script>
var jsonData = ${result};
</script>


이렇게 저장 합니다.

여기서 중요한건 데이터에 따움표가 없다는 것입니다.

그래야 javascript의 eval메소드 없이 값을 할당 할 수 있습니다.



{
    "one" : "hello",
    "two" : "world"
}


jsonData 변수에 위의 JSON이 할당 됩니다.




가끔 쓰는 방법이니 기억해 두고 있으면 편리 합니다.

'JAVA' 카테고리의 다른 글

[JAVA] 패스워드 정규식 (Regex)  (1) 2017.12.05
[JSP] jstl 과 el의 차이점  (0) 2017.12.04
[JSTL]choose와 when, otherwise 사용법  (0) 2017.11.23
[JSTL]fmt:formatNumber  (0) 2017.11.22
VO, Map 객체 JSON 으로 변환  (0) 2017.11.19

+ Recent posts