이번엔 JSP가 제공하는 내장변수에 대해 알아보겠습니다.

기존에 자바프로그래밍을 할 때에 변수를 사용하기 전에 먼저 어떻게 하는지 기억하시나요?

먼저 변수를 선언을 합니다.

하지만, JSP에서는 변수를 선언하지 않고도 바로 사용할 수 있는 변수(객체)가 있습니다. 이것을 JSP의 내장변수라고 합니다.

JSP가 제공하는 내장변수는 다음의 표와 같습니다.


변수(객체) 이름

기능,역할 

타입 

 request 

 사용자(클라이언트)의 요청을 처리하는 객체

 javax.servlet.http.HttpServletRequest

 response 

 사용자(클라이언트)의 요청에 대한 응답을 처리하는 객체

 javax.servlet.http.HttpServletResponse 

 out 

 JSP페이지에서의 결과를 출력하는 출력용 스트림객체

 (HTML코드  를 출력)

 javax.servlet.jsp.JspWriter

 session

 사용자(클라이언트)의 세션정보를 저장,유지 하는 객체

 javax..servlet,http.HttpSession 

 application

 JSP페이지의 웹 어플리케이션 정보를 제공하는 객체

 javax.servlet.ServletContext 

 pageContext

 JSP페이지에 대한 정보를 저장하는 객체

 javax.servlet.jsp.PageContext

 page

 JSP페이지의 서블릿 인스턴스 객체

 java.lang.Object 

 config 

 JSP페이지의 설정정보를 저장하는 객체

 javax.servlet.ServletConfig 

 exception 

 익셉션 객체, 에러페이지에서 사용 

 java.lang.Throwable 


표를 보니 9개 정도가 있네요.


각 객체가 제공하는 메소드를 알기 위해서는 API를 보시면 됩니다. 

http://tomcat.apache.org/tomcat-7.0-doc/index.html

위 주소로 가시면 apacheTomcat7에 대한 문서가 나옵니다

그 중 왼쪽 하단에 Reference란에 보시면

Servlet Javadocs와 JSP2.2 Javadocs가 있습니다.

이 두가지 문서를 보시면 아주 많~~~은 도움이 될 겁니다.


각각의 내장변수(객체)를 어떻게 사용하는지에 대해서는 이제부터 차차 공부해보려고 합니다.

이번 포스팅에서는 아마 가장 많이 사용하게 될 request객체에 대해 알아보겠습니다.


requset객체는 표에서 보듯이 사용자의 요청을 처리하는 객체입니다.

우리가 서블릿에서 사용했던 doGet, doPost메소드를 떠올려 봅시다.

이 메소드의 첫번째 파라미터와 두번쨰 파라미터의 타입은 HttpServletRequset와 HttpServletResponse 입니다.

requset객체는 바로 첫번째 파라미터인 HttpServletRequest와 동일한 역할을 하고 타입 역시 동일합니다.

따라서 같은 방법으로 사용을 합니다.


제가 request객체를 이용해서 클라이언트의 정보를 몇개 추출 해보겠습니다.


requestDemo.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>request객체를 이용해 클라이언트의 정보 추출</title>
</head>
<body>
클라이언트의 IP : <%=request.getRemoteAddr()%> <br>
정보의 전송방식 : <%=request.getMethod()%> <br>
요청URI : <%=request.getRequestURI()%> <br>
서버이름 : <%=request.getServerName()%> <br>
서버포트 : <%=request.getServerPort()%>
</body>
</html>
cs

request객체의 여러 메소드 중 5가지 메소드를 사용했습니다.

소스를 보시다시피 클라이언트의 IP, 전송방식, 요청 URI, 서버의 이름과 포트번호 이렇게 보려고 합니다.

결과는 다음과 같이 나옵니다.


자 여기서 주소표시줄에 있는 주소와 한번 비교해서 봐주세요.

저 주소표시줄에 적힌 주소가 뭘 의미하는지 이제는 알 수 있습니다.


이번에는 저번에 서블릿으로 작성했던 개인정보입력페이지를 JSP페이지로 만들어보겠습니다.


info.html

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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>개인정보입력화면</title>
</head>
<body>
    <form action="info/infoResult.jsp" method="post">
    <h1>개인정보입력</h1>
    아이디 : <input type="text" name="id"><br><br>
    비밀번호 : <input type="password" name="password"><br><br>
    이름 : <input type="text" name="name"><br><br>
    성별 : 
        남자<input type="radio" name="gender" value="male">
        여자<input type="radio" name="gender" value="female"><br><br>
    메일 수신여부<br>
        이벤트 소식<input type="checkbox" name="eventmail">
        광고 메일<input type="checkbox" name="admail"><br><br>
    직업 : 
        <select name="job">
            <option>학생</option>
            <option>회사원</option>
            <option>기타</option>
        </select>
        <br><br><br>
    <input type="submit" value="확인">
    <input type="reset" value="취소">
    </form>
</body>
</html>
cs


infoResult.jsp

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>개인정보입력 결과확인</title>
</head>
<body>
<%
    request.setCharacterEncoding("UTF-8");
    String gender = request.getParameter("gender");
    String adMail = request.getParameter("adMail");
    String eventMail = request.getParameter("eventmail");
%>
<h1><%=request.getParameter("name")%>님 환영합니다.</h1> <br>
아이디 : <%=request.getParameter("id")%> <br>
비밀번호 : <%=request.getParameter("password")%> <br>
성별 : <%=genderCheck(gender)%> <br>
이벤트소식 : <%=mailcheck(adMail)%> <br>
광고메일 : <%=mailcheck(eventMail)%> <br>
직업 :  <%=request.getParameter("job")%> <br><br>
</body>
</html>
 
<!-- 성별을 한글로 출력해주기 위한 메소드 -->
<%!
    private String genderCheck(String gender){
    if(gender.equals("male")){
        return "남자";
    }else if(gender.equals("female")){
        return "여자";
    }else{
        return gender;
    }
}
%>
<!-- 메일수신여부를 한글로 출력해주기 위한 메소드 -->
<%!
    private String mailcheck(String mail){
    if(mail == null){
        return "수신거부";
    }else if(mail.equals("on")){
        return "수신";
    }else{
        return mail;
    }
}
%>
cs


어우~ 막 길어서 복잡해 보이지만 한줄씩 따져보면 별거 없습니다 ^^

info.html에서 정보를 입력하는 화면을 만들었습니다. form태그의 action속성과, method속성을 한번 더 봐주세요.

action속성에 적힌 URL로 데이터가 전송이 되겠죠? method속성을 보니 post방식입니다.


infoResult.jsp에서 먼저 11번라인을 봐주세요.


라고 적었습니다.

우리가 서블릿에서 post방식으로 전송할때 한글이 깨져서 출력되는것을 막기 위해 적었던과 같은 역할을 합니다.

이 또한 역시 제일 먼저 적어주는게 좋습니다^^

12번~14번라인을 보시면 받아온 데이터를 변수에 각각 담았습니다.

받아온 모든데이터를 같은 방식으로 변수에 담아서 출력하여도 상관 없지만 이렇게 사용된다는 것을 보여주기 위해서 몇개만 적어 보았습니다.

그리고제일 하단에는 선언부를 이용해 성별과 메일을 한글로 출력해주기 위한 메소드를 만들었습니다.



여기까지 request객체 였습니다~