JSP파일에 자바형식의 코드를 사용하면 불편한 점을 한방에 해결할 수 있는 EL (Expression Language) 과 JSTL (Jsp Standard Tag Library)를 이용해 코드를 간결하게 사용하는 방법에 대해 포스팅하도록 하겠습니다. 


EL의 개념은 해석 그대로 표현 언어를 이해하고 속성 값들을 편리하게 출력하기 위해 제공된 언어이며, JSTL은 표준 액션태그로 처리하기 힘든 부분을 담당합니다. 


JSP 2.0버전에서 새로 추가된 스크립트 언어인 EL(Expression Language)은 <%= abc %>를 ${abc}로 간단하게 사용할 수 있게 하였고, JSTL의 Core에서 c를 이용해 <%= if%>문을 <c:if>, <%=for%>문을 <c:forEach>로 대체하여 사용합니다. 그럼 따로따로 살펴보도록 하겠습니다. 둘을 같이 묶어서 포스팅하는 이유는 제 게시판 프로젝트에 같이 사용되기 때문입니다.





 EL (Expression Language)


▼ 사용목적

<%= %> , out.println()과 같은 자바코드를 

더 이상 사용하지 않고 좀더 간편하게 출력을 지원하기 위한 도구.

배열이나 컬렉션에서도 사용되고, JavaBean의 프로퍼티에서도 사용됩니다.



▼ 문법

Attribute형식에서는 <%= cnt + 1 %>를 쓰지 않고 ${cnt + 1}로 쓰고

Parameter형식에서는 ${param.abc}으로 씁니다.


여기서 cnt는 자바에서는 변수 이름이고, EL 식에서는 Attribute의 이름으로 해석되는데요. 

값을 찾을때 Attribute는 작은 Scope에서 큰 Scope로 찾습니다.

(page → request → session → application)


[ attribute란? : 메소드를 통해 저장되고 관리되는 데이터 ]

PageContext / Request에서 사용될때

setAttribute("key", value) → 값을 넣는다.

getAttribute("key") → 값을 가져온다.

removeAttribue("key") → 값을 지운다.

session에서 사용될때

set / get / remove 동일하고 추가로++

invalidate( ) → 값을 전부 지운다.




▼ 연산자



▼ 내장객체

1) pageScope → 페이지Scope에 접근

2) request Scope → 리퀘스트Scope에 접근

3) sessionScope  세션Scope에 접근

4) applicationScope → 어플리케이션Scope에 접근

5) param → 파라미터값 얻어올때 ( 1개의 Key에 1개의 Value )

6) paramValues → 파라미터값 배열로 얻어올때( 1개의 Key에 여러개의 Value) 

7) header → 헤더값 얻어올때 ( 1개의 Key에 1개의 Value ) 

8) headerValues → 헤더값 배열로 얻어올때 ( 1개의 Key에 여러개의 Value ) 

9) cookie → ${cookie. key값. value값}으로 쿠키값 조회

10) initParam → 초기 파라미터 조회

11) pageContext → 페이지컨텍스트 객체를 참조할때



▼ paramValues 나 headerValues 사용법

 $ { paramValues . boadDto [0] } 

 $ { paramValues ["bardDto"] [1] }

Values 옆에 점을 찍는 방법과 대괄호로 묶어 사용하는 2가지 방법이 있습니다.

대신 ①번에서는 인덱스가 0부터 시작하고 ②번에서는 인덱스가 1부터 시작하네요.






 JSTL (Jsp Standard Tag Library)


▼ JSTL은?

JSP는 자신만의 태그를 추가할 수 있는 기능을 제공하고 있는데요. 

<jsp:include>나 <jsp:usebean>과 같은 커스텀 태그처럼

연산이나 조건문이나 반복문인

if문, for문, DB를 편하게 처리할 수 있는것이 JSTL입니다.



▼ 태그 종류

(1) Core  (prefix : c)

→ 일반 프로그래밍에서 제공하는 것과 유사한 변수선언

 실행 흐름의 제어 기능을 제공

 페이지 이동 기술 제공

URI  http://java.sun.com/jsp/jstl/core


(2) Formatting (prefix : fmt)

 숫자, 날짜, 시간을 포매팅하는 기능을 제공

→ 국제화, 다국어 지원 기능 제공

URI → http://java.sun.com/jsp/jstl/fmt


(3) DataBase (prefix : sql)

→ DB의 데이터를 입력 / 수정 / 삭제 / 조회 하는 기능을 제공

URI → http://java.sun.com/jsp/jstl/sql


(4) XML (prefix : x)

→ XML문서를 처리할 때 필요한 기능 제공

URI → http://java.sun.com/jsp/jstl/xml


(5) Function (prefix : fn)

→ 문자열을 제공하는 함수 제공

URI → http://java.sun.com/jsp/jstl/functions



▼ JSTL 선언


<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR" isELIgnored="false"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>테스트</title>
</head>
<body> 
</body>
</html>



JSTL은 코드를 아래와 같이 선언합니다.

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

필요한 JSTL 태그는 prefix 와 uri 만 바꿔주면 되겠죠.


추가로 2번째 줄에 페이지를 인코딩하는 부분 마지막에

isELIgnored="false" 

를 추가하면 EL을 사용할 수 있게 됩니다.






마음같아서는 JSTL의 5가지 태그에 대해서

전부 정리해보고 싶지만, 지금은 게시판 프로젝트를 하는 도중이기 때문에

 나중에 따로 게시물 하나당 잡아서 정리하도록 하겠습니다.

그러면 제 게시판 jsp파일에 들어갈 코어를 정리해볼게요.





 JSTL의 Core Library



일단 JSTL의 코어 라이브러리의 태그들입니다. 자바문법 이름과 비슷해서 그리 낯설지는 않지만 처음에는 적응이 잘 안되는게 사실입니다. 익숙해지려면 여러번 반복해서 써봐야 손에 익을것같아요. 태그는 위 사진과 같이 쓰시면 되지만 그래도 하나하나 살펴볼게요.


1. <C:set>

자바의 int num = 100; 을 <c:set var="num" value="100">으로 바꿔 쓴 코드입니다. 어렵지 않죠?? 


2. <c:out>

역시 자바의 system.out.println(" 안녕하세요 ");을 간단하게 <c:out value=" 안녕하세요 ">로 변경 되었습니다. 또한 제 생각에는 장점이라고 생각하는데, 이 태그는 특수문자를 그대로 출력합니다.


3. <c:remove>

한 영역의 변수명을 지우는 코드입니다. 만약에 영역을 생략할 경우 모든 영역의 변수가 삭제됩니다. 

영역에는 아까 Attribute에서 정리했다 시피 (page → request → session → application) 순서의 영역을 가집니다.


4. <c:if>

자바의 if - else 문과 동일하지만 JSTL에서는 else문이 없습니다. 여기서 scope값을 생략하면 기본으로 page영역이 지정됩니다.


5. <c:choose> / <c:when> / <c:otherwise>

자바의 switch 구문과 if-else 구문을 혼합한 형태로 다수의 조건문을 걸고 싶을때 사용합니다.

<c:choose>
    <c:when test="${empty list }">
        등록된 글이 없습니다.    
    </c:when>
    <c:when test="${abc}">
        안녕하세요    
    </c:when>
    <c:otherwise>
        <c:set var="doneLoop" value="false" />
    </c:otherwise>
</c:choose>


이렇게 <c:choose> 태그안에 <c:when>이 중복되어 사용이 가능하며 boolean값이 True일 경우 블록을 수행합니다. <c:otherwise>는 <c:when>의 결과 값이 모두 False 일 경우 실행이 됩니다. 그래서 필요한 경우에만 사용됩니다.

 

6. <c:forEach>

자바에서는 for문으로 불리던게 JSTL에서는 forEach로 변경되었습니다. 배열이나 컬렉션, Map에 저장되어 있는 값들을 순서대로 처리 할때 사용되며, <c:forEach var=" i " begin=" 1 " end=" 10 " step=" 1 "> ${ i } </c:forEach>로 i가 1부터 10까지 1씩 증가한다는 구문을 쉽게 만들 수 있습니다.


7. <c:forTokens>

자바의 StringTokenizer 를 JSTL를 사용하면 아주 간편하게 사용할 수 있습니다. 

<c:forTokens var="abc" items="안녕/하세요/hunit블로그/입니다" delims="/" >이렇게 코드를 작성할 수 있겠죠.


8. <c:catch>

try{
     자바에서는 여기에 행동    
    } catch (Exception err){
            에러내용 표시 
     }
 
 
<c:catch var= "abc ">
      JSTL에서는 여기에 행동 
</c:catch>
태그 밖에 ${abc}를 사용하여 에러내용


자바의 Try-catch 구문과 같죠. 단 <c:catch>태그는 에러내용을 ${abc}로 빼내서 처리해줘야 합니다.



추가로 <c:redirect>와 <c:import> , <c:url> 태그가 있지만 글이 길어진 관계로 짤막하게 정리하고 끝내도록 하겠습니다. 별로 설명할게 없다는 것도 하나의 이유지만요.


9. <c:redirect>는 아래와 같이 파라미터 값을 지정된 url로 보냅니다.

<c:redirect url="baordList.jsp">

<c:param name="abc" value="안녕하세요" />

</c:redirect>

 

10. <c:import>는 <jsp:include>와 비슷합니다.


11. <c: url>은 <c:set>과 비슷하며 GET방식으로 파라미터를 전달합니다.



출처: http://hunit.tistory.com/203 [HunIT Blog]

Posted by 파란개발자
,

C 프로그래머에게는 Java의 입출력부터 고민이 된다. C는 scanf, printf 같은 함수가 있는데, Java에서 이런 함수를 찾기 쉽지 않기 때문이다. 대신 Java는 더 안전한 방법을 이용한다. scanf보다 Scanner라는 객체를 만들어 이 객체에게 원하는 데이터를 요청하는 식이다. 그리고 Java 1.5(코드명 Tiger)부터 printf를 지원한다. 정수를 읽고 그 두 배를 출력하는 간단한 Java 프로그램을 작성하면 다음과 같다.

import java.util.Scanner;
public class DoubleUp {
    static public void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter an integer: ");
        int n = sc.nextInt();
        System.out.printf("2 * %d = %d%n", n, n * 2);
    }
}


정수 대신 문자열을 읽고 싶다면 nextInt() 대신 next()를 이용하면 된다. 
또 한 가지 언급해 둘 것은 줄바꿈 문자를 \n 대신 %n으로 쓴다는 것이다. 사실 \n을 써도 상관없다. 그렇지만 %n을 사용하면 플랫폼마다 줄바꿈 문자가 달라지는 문제를 Java가 알아서 해결해 준다.


출처 : 살아가는 이야기 

http://woogyun.tistory.com/326

Posted by 파란개발자
,

자바의 정석 공부 내용 요약

키워드 중심

1장 자바시작전

2장 변수

3장 연산자

4장 조건문, 반복문 

for문, while문, do while문

switch case문

5장 배열(Array)


6,7장 객체지향 :

오버로딩

다형성

오버라이딩


8장 예외처리(Exception handling)

9장 java.lang패키지

10장 내부클래스

11장 컬렉션 프레임웍(Collection Framework)

Map, Set, Iterator, Property

12장 쓰레드(Thread)

Thread란 하나의 cpu가 여러 작업을 병행하여 수행하므로 전체적인 효율을 높일 수 있도록 하는것(io 처리하는 도중에 시간이 오래 걸리므로 그 사이에 다른 작업을 수행함)

13장 AWT와 애플릿

14장 io

FileInputStream, FileOutputStream

15장 네트워크



Posted by 파란개발자
,

SimpleWebServer

Java-Spring/Java 2015. 4. 23. 11:13

package ch15;


import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;


public class SimpleWebServer {    // 같은 폴더내에 NewFile.html파일이 존재해야 작동함.

 // http://211.238.142.62:8800/NewFile.html

public static void main(String[] args) {

try {

ServerSocket ss = new ServerSocket(8800);

while (true) {

System.out.println("접속대기");

Socket sock = ss.accept();

System.out.println("새 쓰레드를 시작합니다");

HttpThread ht = new HttpThread(sock);

ht.start();

}

} catch (Exception ex) {

System.out.println(ex);

}


}


}


class HttpThread extends Thread {

private Socket sock = null;

BufferedReader br = null;

PrintWriter pw = null;


public HttpThread(Socket sock) {

this.sock = sock;


try {

br = new BufferedReader(

new InputStreamReader(sock.getInputStream()));

pw = new PrintWriter(new OutputStreamWriter(sock.getOutputStream()));

} catch (Exception ex) {

System.out.println(ex);

}

}


public void run() {

BufferedReader fbr = null;

try {

String line = br.readLine();

System.out.println("line : " + line);

int start = line.indexOf("/") + 1;

int end = line.lastIndexOf("HTTP") - 1;

String filename = line.substring(start, end);

System.out.println(filename);

if(filename.equals(""))

filename = "index.html";

System.out.println("사용자가 " + filename + "을 요청했습니다.");

fbr = new BufferedReader(new FileReader(filename));

String fline = null;

while ((fline = fbr.readLine()) != null) {

pw.println(fline);

pw.flush();

}

}

catch (Exception ex) {

System.out.println(ex);

}

finally {

try {

if(br != null)

br.close();

}

catch (Exception ex) {

}

try {

if(pw != null)

pw.close();

}

catch (Exception ex) {

}

}

}

}



Posted by 파란개발자
,

자바의 정석 공부 내용 요약

키워드 중심


4장 연산자

5장 반복문, 조건문

for문, while문, do while문

switch case문


6,7장 객체지향 :

오버로딩

다형성

오버라이딩


12장 Collection Framework

Map, Set, Iterator, Property


13장 Thread

Thread란 하나의 cpu가 여러 작업을 병행하여 수행하므로 전체적인 효율을 높일 수 있도록 하는것(io 처리하는 도중에 시간이 오래 걸리므로 그 사이에 다른 작업을 수행함)


14장 io

FileInputStream, FileOutputStream

15장 네트워크


Posted by 파란개발자
,

parseInt() : 문자열을 정수형(int)으로 변환

substring() : 한 문자열에서 내용의 일부를 추출하는데 쓰임

indexOf() : 특정 문자를 특정 위치부터 찾음


Posted by 파란개발자
,

정의


overloading(오버로딩) :  기존의 메서드와 이름이 같고 매개변수의 타입이나 개수가 다른 메서드를 만드는것.


overriding(오버라이딩) : 조상클래스로부터 상속받은 메서드의 내용을 자식클래스에서 사용하기에 맞게 변경하는것.

-부모클래스가 갖고있는 메서드를 상속받아 body(구현부)를 자식클래스에서 사용하고자 하는데로 변경하여 사용하는것으로 다형성을 추구하기 위해 사용된다.


장점


overloading의 장점 : 같은 기능을 하는 메서드의 이름을 하나로 정의함으로서 개발자가 기억하기 쉽다. 메서드의 이름을 절약할 수 있다.


overriding의 장점 : 같은이름으로 body(구현부)를 변경하여 내용을 수정하여 사용함을 통해 프로그램의 리소스를 줄여준다.

'Java-Spring > Java' 카테고리의 다른 글

SimpleWebServer  (0) 2015.04.23
java 전체 정리(자바의 정석 공부 내용 요약)  (0) 2015.04.22
java.lang패키지의 유용한 메서드  (0) 2015.04.10
자주쓰는 eclipse 단축키  (0) 2015.04.02
Java의 구성 4가지 및 기타  (0) 2015.03.24
Posted by 파란개발자
,

1. Ctrl + space : 자동완성기능

2. Ctrl + shift + /   : /* */ 모양으로 주석달기 


3. Ctrl + /  : // 모양으로 주석달기(한줄씩 각줄 주석), 해제

Ctrl + shift + /  : /* */ 모양으로 주석달기(여러줄 주석)

Ctrl + shift + \  : /* */ 모양으로 주석달기(여러줄 주석) 해제

4. Ctrl + shift + O : import 하기

5. Ctrl + shift + f : 정렬하기

6. 클래스 이름 클릭 후 Ctrl + shift + T : 같은 이름의 클래스 찾기

7. Ctrl + 클릭 : 정의된 부분으로 이동 

   alt + left : 원래 있던곳으로 이동

8. 변수명클릭해서 선택후 Alt + shift + R : 변수명 일괄 변경

9. 코드긁어서 선택후 Alt + 상/하 화살표 : 선택한 코드 위 아래로 이동

10. shift + Home / End : 현재 커서 위치에서 앞 / 뒤 코드 선택

(Home 누른 후 , shift+Home 하면 현재 줄 코드 선택이 됨)


마우스를 통한 자동입력

toString 입력하기 : 우클릭 -> source -> Generate toString()

Getter 와 Setter 입력하기 : 우클릭 -> source -> Generate Getters and Setters

생성자 입력하기 : 우클릭 -> Constructor Using Fields

interface implement시 method overiding -> 클래스 명에 마우스 갖다대기 -> Add umimlemented methods


Posted by 파란개발자
,

Java의 구성 4가지

1. 클래스

2. 변수

3. 메소드

4. 생성자


-변수의 종류 2가지

1.기본형 - 8가지 : int, byte, short, long, float, double, char, boolean

2.참조형


-메소드의 구성 4가지

1.접근제어자 : public, private 등..

2.메소드명

3.리턴타입

4.매개변수(parameter)

Posted by 파란개발자
,