include 메서드도 forward 메서드처럼 다른 jsp 페이지를 호출하는 기능을 하지만 

호출된 jsp 페이지가 끝나고나면 실행 흐름의 제어가 본래의 jsp 페이지로 돌아온다는 점이 다르다.

그렇기 때문에 이 메서드는 여러 jsp 페이지가 공통으로 사용하는 코드를 호출하고자 할 때 사용하는 것이 좋다.


이메서드는 forward 메서드와 마찬가지로 javax.servlet.RequestDispatcher 인터페이스에 속하므로 

먼저 RequestDispatcher 객체를 구해야 한다. 그런 객체는 getRequestDispatcher 메서드를 이용해서 구할수 있으며

이메서드를 호출할 때는 include 메서드가 호출할 jsp 페이지의 url 경로명을 파라미터로 넘겨줘야 한다.


1
RequestDispatcher dispatcher = request.getRequestDispatcher("today.jsp");
cs


이렇게 구한 RequestDispatcher 객체를 이용해서 include 메서드를 호출할 때는 

request 내장 변수와 response 내장 변수를 파라미터로 넘겨줘야 한다.


1
dispatcher.include(request,response);
cs


include 메서드를 통해 호출되는 jsp 페이지로 데이터를 넘겨주기 위해서는 
forward 메서드의 경우와 마찬가지로 request 내장변수에 대해 
setAttribute 메서드와 getAttribute 메서드를 호출하면 된다.


1
2
3
request.setAttribute("WEIGHT"new double(72.5));
 
Double weight = (double) request.getAttribute("WEIGHT");
cs


include 메서드는 include 지시자와 비슷해 보이지만 내부적으로 작동하는 방식은 다르다.
include 메서드는 jsp페이지가 실행되는 시점에 해당 jsp 페이지를 호출해서 실행하지만
include 지시자는 웹 컨테이너가 jsp 페이지를 서블릿 클래스로 변환하는 시점에 해당 jsp 페이지 로부터
변환된 코드를 그 서블릿 클래스의 일부로 만든다.

'JSP&Servlet' 카테고리의 다른 글

서블릿 클래스의 init 메서드/destroy 메서드  (0) 2017.02.26
서블릿 클래스에서 세션 사용하기  (0) 2017.02.26
forward  (0) 2017.02.26
servlet 에서 파일 업로드  (0) 2017.02.26
JSTL 코어 라이브러리  (0) 2017.02.26

forward 메서드는 jsp 페이지 안에서 다른 jsp 페이지를 호출할때 사용하는 메서드이다.

이메서드는 호출된 jsp 페이지가 끝나고 나도 실행 흐름의 제어를 되돌려주지 않는다.

그러므로 어떤 jsp 페이지가 할 일을 모두 마치고 난 다음에 다른 jsp 페이지를 호출하고자 할 때 사용하는것이 적합하다.


이메서드는 javax.servlet.RequestDispatcher 인터페이스에 속하기 때문에 이 타입의 객체가 있어야 호출할수 있다.

그런 객체는 아무렇게나 만들면 안 되고 반드시 request 내장 변수에 대해 getRequestDispatcher 메서드를 호출해서 얻어야 한다

getRequestDispatcher 메서드를 호출할대는 forward 메서드가 호출할 jsp 페이지의 url 경로명을 파라미터로 넘겨야한다.


1
2
3
4
RequestDispatcher dispatcher = request.getRequestDispatcher("Result.jsp");
 
RequestDispatcher dispatcher = request.getRequestDispatcher("/Result.jsp");
 
cs

 

 / 슬러시 로 시작하는 값은 웹 애플리케이션 디렉터리를 기준으로 한 url 경로명으로 해석되기 때문에 

/Result.jsp 라고 쓰면 웹 애플리케이션 디렉터리에 있는 Result.jsp 파일을 가르킨다.



RequestDispatcher 객체를 구한 다음에는 그 객체에 대해 forward 메서드를 호출할수 있다.

이 메서드를 호출할 때에는 request 내장 변수와 response 내장 변수를 파라미터로 넘겨야 한다.


1
dispatcher.forward(request,response);
cs



이 메서드를 통해 호출되는 jsp 페이지로부터 데이터를 넘겨주려면 forward 메서드보다 먼저

request.setAttribute 라는 메서드를 호출해서 request 내장변수 안에 데이터를 저장해 놓으면 된다 .

이메서드는 문자열 타입의 데이터 이름과 객체 타입의 데이터값을 파라미터로 받는다 .


1
2
request.setAttribute("HEIGHT","new Integer");
                //    데이터 이름  데이터 값
cs

 


이렇게 저장된 데이터를 호출된 jsp 페이지 안에서 가져오려면 request.getAttribute 메서드를 이용해야 한다.

이메서드는 데이터 이름을 파라미터로 받고 그에 해당하는 데이터 값을 찾아서 리턴한다.

하지만 리턴타입이 object 타입이기 때문에 본래의 타입으로 사용하려면 캐스트 연산을 해야한다.


1
2
3
Integer height = (Integer) request.getAttribute("HEIGHT");
                //캐스트연산자                   데이터이름
 
cs
 


'JSP&Servlet' 카테고리의 다른 글

서블릿 클래스에서 세션 사용하기  (0) 2017.02.26
include  (0) 2017.02.26
servlet 에서 파일 업로드  (0) 2017.02.26
JSTL 코어 라이브러리  (0) 2017.02.26
EL 익스프레션 언어  (0) 2017.02.26


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <h1>파일 업로드 폼</h1>
    <form method = "post" enctype = "multipart/form-data" action = "/java-web005/AddFile">
        <div><input type ="text" name ="name"/></div>
        <div><input type ="file" name ="uploadfile"/></div>
        <div><input type = "submit" value = "파일업로드"/></div>
    </form>
</body>
</html>
cs


파일을 업로드하는 폼을 생성한다.

파일을 전송하려면 enctype이 "multipart/form-data" 가 되어야한다

"multipart/form-data" 은 post방식으로만 전송이 가능하다.



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
package controller;
 
import java.io.IOException;
 
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
 
 
@WebServlet("/AddFile")
@MultipartConfig
//sevlet클래스에서 request를 javax.servlet.http.Part 
//타입으로 받을 수 있도록@MultipartConfig 어노테이션  추가
public class AddFileServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public AddFileServlet() {
        super();
 
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("euc-kr");
        String name = request.getParameter("name");
        System.out.println(name);
        Part part = request.getPart("uploadfile"); //part타입으로 업로드된 파일을 받아온다.
        System.out.println(part);
        String dir ="D:/JB2/wrokspace_neon/java-web005/upload/";
        String filename = UUID.randomUUID().toString().replace("-""");
        //UUID는 파일명이 중복되지않도록 랜덤의 문자열을 생성한다.
        String ext = ".png";
        
        part.write(dir+filename+ext);//write메서드의 매개변수로 경로와 파일이름 확장자명을 넘긴다.
        
    }
 
}
 
 
cs


'JSP&Servlet' 카테고리의 다른 글

include  (0) 2017.02.26
forward  (0) 2017.02.26
JSTL 코어 라이브러리  (0) 2017.02.26
EL 익스프레션 언어  (0) 2017.02.26
jsp 에서 세션 사용하기  (0) 2017.02.26

<c:set>

<c:set>은 변수를 선언하고 나서 그 변수에 초기값을 대입하는 기능의 커스텀 액션이다.

선언된 변수는 EL식 안에서 사용할수 있다. <c:set>커스텀 액션은 자바 변수가 되는게 아니라

page 데이터 영역의 애트리뷰트가 된다.

1
2
<c:set var="num" value="100" />
// num-변수명 100- 초기값
cs

 

사용예제

1
2
3
4
5
6
7
<c:set var="num1" value="7">
<c:set var="num2" value="9">
<c:set var="result" value="${num1*num2}">
 
<HTML>
    ${num1}과 ${num2} 의곱은? ${result}
</HTML>
cs


<c:set>액션을 이용하면 page 데이터 영역 뿐만 아니라 

request,session,application 데이터 영역에 애트리뷰트를 저장하는것도 가능하다.

<c:set> 태그에 scope 라는 애트리뷰트를 추가하고 

page,request,session,application 중 하나를 애트리뷰트 값으로 지정한다.

1
2
<c:set var="PRICE" value="10000" scope="request" />
 
cs


<c:remove>

<c:remove>는 <c:set>를 사용해 선언한 변수를 삭제한다.

1
2
3
4
<c:remove var="num" /> 
// page,request,session,application 영역의 num이라는이름을 가진 애트리뷰트 모두 제거
<c:remove var ="code" scope="request" /> 
//request 영역의 애트리뷰트 제거
cs
 

<c:if>

<c:if>는 자바의 if 문과 비슷한 역할을 한다. 주어진 조건에 따라 어떤 동작을 수행하도록 만드는 액션이다.

<c:if>는 조건식을 괄호안에 쓰는것이 아니라 test 라는 애트리뷰트 값으로 지정해야 한다.

1
2
3
<c:if test="${num1 > num2}">
    num1이 더 큽니다.
</c:if>
cs


ex

1
2
3
4
5
<c:if test="${status.count < 6}">
</c:if>
 
<c:if test="${movie.movStatus == '상영중' || movie.movStatus == '상영예정'}">
</c:if>
cs


<c:forEach>

<c:forEach>는 자바의 for문에 해당하는 기능을 제공하는 커스텀 액션이다.

<c:forEach>를 이용해 반복문을 사용하려면 이 액션에 begin과 end 라는 이름의 애트리뷰트를 

 쓰고 거기에 각각 카운터 변수의 시작값과 끝값을 지정한다.

1
2
3
4
5
6
7
<c:forEach var="cnt" begin="1" end="10">
    ${cnt}<br>
</c:forEach>
 
<c:forEach var="cnt" begin="1" end="10" step="2">
    ${cnt}<br>                            //step 애트리뷰트에 증가치를 지정할수 있다.
</c:forEach> 
cs

 

<c:forEach> 커스텀 액션을 이용하면 배열의 항목을 순서대로 출력할 수 있다.

액션태그에 items 애트리뷰트를 쓰고 그곳에 배열 이름을 지정한다 

var애트리뷰트의 값은 배열의 항목을 담는 변수 이름으로 사용한다.


1
2
3
<c:forEach var="str" items="${arr}"> 
    ${str}<br> //var=배열을담을변수명 items=배열의이름
</c:forEach>
cs


배열반복수 출력

1
2
3
<c:forEach var="str" items="${boxList}" varStatus="status"> 
    ${status.count}
</c:forEach>
cs


<c:redirect>

sendRedirect 와 동일한 기능

1
<c:redirect url="http://www.hanb.co.kr" />
cs

 

<c:import>

<c:import>는 <jsp:include>표준액션과 비슷한 일을 한다.

1
<c:import url="http://www.hanb.co.kr" />
cs


<c:url>

url을 지정하기 위한 변수의 선언에 사용된다.

1
2
<c:url var="myUrl" value="http://localhost:8080/board/add.jsp" >
//var=변수명 value =
cs


'JSP&Servlet' 카테고리의 다른 글

forward  (0) 2017.02.26
servlet 에서 파일 업로드  (0) 2017.02.26
EL 익스프레션 언어  (0) 2017.02.26
jsp 에서 세션 사용하기  (0) 2017.02.26
jsp 내장변수  (0) 2017.02.26

익스프레션 언어는 식을 중심으로 코드를 기술하는 언어이다.

연산자와 피연산자의 조합을 ${}로 둘러싸서 표현한다.

1
2
3
${cnt+1//익스프레션 언어의 식
<%= cnt+1 %>//익스프레션의 식
 
cs
 
1
${cnt+1}
cs

이런 형태를 EL 식 이라고 한다.


익스프레션에서 사용된 cnt는 자바의 변수 이름이고 EL식에서 사용된 cnt는 변수가 아니다.

EL 식에 포함된 데이터 이름은 기본적으로 애트리뷰트의 이름으로 해석된다.

1
2
3
4
5
6
7
<%
int sum = {...}
request.setAttribute("RESULT"new Integer(sum)); // 애트리뷰트에 sum의 결과 저장
%>
 
<%=request.getAttribute("RESULT")%> //익스프레션으로 애트리뷰트 값 출력
${RESULT} //EL식으로 애트리뷰트 값 출력
cs


데이터 하나로만 구성된 EL식

1
${RESULT}
cs

서블릿과 JSP 에서 사용할수 있는 애트리뷰트의 종류는 네가지이다.

EL식에서 주의해야 할 점은 네종류의 애트리뷰트 중 어느것 으로도 해석될수 있다는 것이다.

페이지안에 이름이 같고 종류가 다른 애트리뷰트가 있다면 익스프레션 언어에서 정해놓은 순서대로 해석된다.

이 순서는 사용 범위가 좁은 애트리뷰트부터 점점 더 사용 범위가 넓은 애트리뷰트 순으로 진행된다.


page애트리뷰트 -> request애트리뷰트 -> session 애트리뷰트 -> appliction애트리뷰트


이순서에 상관 없이 특정한 종류의 애트리뷰트를 선택해서 출력하고 싶다면 

그 데이터영역에 해당하는 scope 라는 내장 객체를 표시한다.

1
2
3
4
5
${pageScope.RESULT} //page애트리뷰트
${requestScope.RESULT} //request애트리뷰트
${sessionScope.RESULT} //session애트리뷰트
${applictionScope.RESULT} //page애트리뷰트
 
cs



익스프레션 언어의 내장 객체


param 웹브라우저 로부터 입력된 데이터의 집합

1
${param.NUM} ${param["COLOR"]}
cs

param은 웹 브라우저에서 <FORM> 엘리먼트를 통해 입력된 데이터를 가져올 때 사용하는 내장객체이다.

이 객체의 사용방법은 두가지 이다. 객체의 이름뒤에 마침표를찍고 해당데이터이름을 쓰거나

객체의 이름뒤에 대괄호를 입력하고 그안에 작은 따옴표나 큰 따옴표로 묶은 데이터 이름을 적는다.


<FORM>엘리먼트를 통해 똑같은 이름의 데이터가 여러개 입력될 경우 ex <CHECKBOX>,<SELECT>

그럴 때는 param 내장 객체 대신 paramValues 라는 내장 객체를 사용한다.

1
2
${paramValues.ANIMAL[0]}
${paramValues["ANIMAL"][1]}
cs


pageContext

EL식을 이용해서 pageContext의 get 메서드를 호출하려면

메서드 이름 앞에있는 get이라는 단어를 때고 그다음에 있는 첫 문자를 소문자로 변경한 이름을 사용한다.

1
2
${pageContext.request} //getRequest 메서드
${pageContext["request"]} //getRequest 메서드
cs
 
1
2
3
4
5
${pageContext.request.requestURI}
${pageContext["request"]["requestURI"]}
${pageContext.request["requestURI"]}
${pageContext.["request"].requestURI}
//getRequestURI 리턴값을 가져오는 EL 식
cs



익스프레션 언어의 연산자

1
2
3
${gender=="female"//두값의 같으면 true 다르면false
${"CAR"<"CAT"//유니코드에 따른 사전식 비교 CAR가 먼저이므로true
${"CAT">"DOG"//CAT이 먼저이므로 false
cs


마침표 연산자

마침표연산자로 가리킬 수 있는 데이터

배열, java.util.List 객체의 데이터 항목,java.util.Map 객체의 데이터 항목,자바빈 프로퍼티


배열,리스트 인터페이스,Map인터페이스 출력

1
2
3
4
5
6
7
request.setAttribute("WINNER",winner)//배열을 애트리뷰트로 저장
${WINNERS[0//배열 출력
ArrayList<String> items = new ArrayList<String> list객체
request.setAttribute("FRUITS",items)//list객체 애트리뷰트로 저장
${FRUITS[2]} //list객체 출력 
request.setAttribute("ADDRESS",map) //map객체 저장
${ADRESS[param.NAME] // map객체 내에서 데이터 이름에 해당하는 항목을 찾아 
cs


자바빈: JavaBean 규격서에 따라 작성된 자바 클래스, 

파라미터가없는 생성자가 존재해야함,

멤버변수에 접근할때 메서드를통해접근해야함(set,get)

자바빈 프로퍼티 출력

1
2
3
request.setAttribute("PRODUCT",product) //자바빈객체 저장
${PRODUCT.name} //자바빈 프로퍼티 
${PRODUCT.price}
cs



'JSP&Servlet' 카테고리의 다른 글

servlet 에서 파일 업로드  (0) 2017.02.26
JSTL 코어 라이브러리  (0) 2017.02.26
jsp 에서 세션 사용하기  (0) 2017.02.26
jsp 내장변수  (0) 2017.02.26
스크립틀릿/익스프레션/선언부/지시자  (0) 2017.02.26

서블릿클래스에서는 새로운 세션을 시작하거나 진행중인 세션을 계속하기 위해 getSession 메서드를 호출해야한다.

jsp페이지 에서는 그럴 필요가 없다 jsp 페이지가 서블릿 클래스로 변환될 때 이 메서드를 호출하는 코드가 자동으로 추가된다.

이 메서드의 실행결과는 session 내장변수에 저장된다.


1
2
3
4
5
6
7
session.setAttribute("ID""lee77"); //세션에 데이터 저장
        
String str = (String) session.getAttribute("ID"); //세션 데이터를 가져옴
        
session.removeAttribute("ID"); //세션 데이터 삭제
        
session.invalidate(); //
cs



jsp 페이지에서 세션을 사용하지 않으려면 page 지시자의 session 애트리뷰트에 false 라는 값을 지정하면 된다.


1
<%@ page session = 'false' %>
cs



이 애트리뷰트는 세션을 끝내는 기능까지 하는것이 아니므로 세션을 끝내기 위해서는 invalidate 메서드를 사용해야한다.

'JSP&Servlet' 카테고리의 다른 글

JSTL 코어 라이브러리  (0) 2017.02.26
EL 익스프레션 언어  (0) 2017.02.26
jsp 내장변수  (0) 2017.02.26
스크립틀릿/익스프레션/선언부/지시자  (0) 2017.02.26
jsp:useBean  (0) 2017.02.26

jsp 페이지에서는 선언하지 않고도 사용할 수 있는 변수가 있다 그런변수를 jsp페이지의 내장변수(implicit variable)라고한다.

jsp페이지에서 내장변수를 사용할수있는 이유는 웹 컨테이너가 jsp 페이지를 서블릿 클래스로 변환할 때 자동으로 선언해주기 때문이다.


request

 doGet,doPost 메서드의 첫번째 파라미터와 동일한 역할

response

 doGet,doPost 메서드의 두번째 파라미터와 동일한 역할

out

 웹 브라우저로 html 코드를 출력하는 기능

application

 jsp 페이지가 속하는 웹 어플리케이션에 관련된 기능

config

 jsp 페이지의 구성 정보를 가져오는 기능

pageContext

 jsp 페이지 범위 내에서 사용할수 있는 데이터 저장 기능 등

session

 세션에 관한 기능

page

 jsp 페이지로부터 생성된 서블릿

exception

 익셉션 객체




'JSP&Servlet' 카테고리의 다른 글

EL 익스프레션 언어  (0) 2017.02.26
jsp 에서 세션 사용하기  (0) 2017.02.26
스크립틀릿/익스프레션/선언부/지시자  (0) 2017.02.26
jsp:useBean  (0) 2017.02.26
Statement PrepareStatement  (0) 2017.02.26

스크립틀릿(scriptlet) 은 글자 그대로 해석하면 작은 스크립트 라는 뜻이다. <% 로 시작해서 %> 로 끝나고

그사이에 자바 명령문들이 들어갈수 있다. 이명령문들은 웹브라우저로 전송되는것이 아니라 웹 서버쪽에서 실행된다.


1
2
3
4
5
<%
    int total = 0;
    for(int cnt = 1;cnt<=100;cnt++)
        total +=cnt;
%>
cs


 

익스프레션(expression) 은 글자그대로 해석하면 식 이라는 뜻이다. 익스프레션은 <%=로 시작해서 %>로 끝나고

그 사이에 자바 식을 쓸수있다. 이식은 상수나 변수 이름 하나로 구성될수도있고 연산자를 포함한 식이 될수도 있으며

리턴값이 있는 메서드 호출식이 될수도 있다. 이식은 웹서버 쪽에서 실행되고 그 결과만 웹브라우저로 전송된다.


1
<%= total %> <%= total +100%> <%=Math.sqrt(num)%>
cs



선언부(declaration) 는 <%! 로 시작해서 %>로 끝나고 그사이에 변수 선언이나 메서드 선언을 쓸수 있다.

이 변수와 메서드는 jsp 페이지로부터 변환된 서블릿 클래스의 멤버가 되기 때문에 

final public private protected static 키워드를 붙이는 것도 가능하다.


1
2
3
4
5
6
7
8
<%!
    final static int MAX = 10000//변수선언 
 
    private int add (int num1,int mun2){ //메서드 
        int sum = num1+num2;
        return sum;
    }
%>
cs



지시자(directive) 는 jsp의 다른 문법들과는 다른목적으로 사용되는 문법이다. 이것은 웹브라우저로부터의 요청을 처리하기 위해서가 아니라

웹 컨테이너가 jsp페이지를 서블릿클래스로 변환할때 필요한 여러가지 정보들을 기술하기 위해 사용하는 문법이다.


page지시자 include 지시자 taglib 지시자

이지시자들은 <%@ 로시작해서 %>로 끝나야한다. 지시자 다음에는 애트리뷰트(엘리먼트속성)가 올수 있다.


1
2
<%@ page contentType = "text/html; charset = euc-kr" %> //한글이 포함된 jsp페이지
<%@ page import  ="java.utill.*" %>
cs



 속성 설명
 buffer jsp 페이지의 출력 크기를 킬로바이트(KB) 단위로 지정하는 속성이며 기본값은 8KB
 autoFlush jsp 페이지의 내용들이 브라우저에 출력이 되기 전에 버퍼에 다 찰 경우에 저장되어 있는 내용들을 어떻게 처리 할지를 설정
 contentType jsp 페이지의 내용의 출력형태(MIME)
 errorPage jsp 페이지에 예외가 발생할 경우 예외를 처리하는 페이지
 isErrorPage 현재 JSP 페이지가 에러 처리를 담당하는 페이지인지 아닌지의 여부를 지정
 extends jsp 페이지의 class파일이 만들어 질때 상속 받을 클래스
 import 다른 패키지에 있는 클래스 import
 info 페이지를 설명
 isThreadSafe 하나의 JSP 페이지가 동시에 여러 브라우저의 요청을 처리할 수 있는지 여부를 지정
 language jsp 페이지의 스크립트 요소에서 사용할 언어
 session session의 사용 여부
 pageEncoding jsp 페이지에서 사용하는 문자(character)의 인코딩







'JSP&Servlet' 카테고리의 다른 글

jsp 에서 세션 사용하기  (0) 2017.02.26
jsp 내장변수  (0) 2017.02.26
jsp:useBean  (0) 2017.02.26
Statement PrepareStatement  (0) 2017.02.26
jsp 한글인코딩  (0) 2017.02.26

+ Recent posts