본문 바로가기
JSP/JSP & Servlet

JSP 기초문법

by avvin 2019. 4. 28.

01. JSP의 스크립트


JSP 스트립트의 이해


스크립트 요소 : JSP 프로그래밍에서 사용되는 문법의 표현 형태


1. 선언문(Declaration)

2. 스크립트릿(Scriptlet)

3. 표현식(Expression)

4. 주석(Comment)



1. 선언문 :  <%! ... %>

변수나 메서드를 실행할 수 있는 영역의 요소

동적인 HTML 코드 생성하는데 사용

선언문에서 선언된 변수 = 멤버 변수 (스크립트릿은 지역변수)


<%!

//멤버변수 및 메서드를 선언하는 선언문 영역

Stirng name = "JSP Study"

int year = 2019;

%>


선언된 변수는 jsp페이지가 서블릿 코드로 변환이 되면 서블릿 클래스의 멤버변수가 된다.

선언문에 선언된 변수는 선언된 위치에 상관없이 모든 메서드에 참조가 가능한데, 이는 객체 생성 시에 멤버 변수가 메서드보다 먼저 생성되기 때문이다.


일반적으로 선언문은 잘 사용되지 않는다. 멤버 변수를 선언하는 이유는 몇 가지가 있지만 jsp 페이지에서 메서드를 선언하는 일이 거의 없기 때문이다.

jsp페이지에서 선언된 메서드는 자신의 페이지에서만 반복적으로 사용할 수가 있고 다른 jsp페이지에서는 사용할 수 없어서 차라리 반복적으로 사용할 기능의 메서드가 필요하다면 자바 파일로 만들어서 모든 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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <%!/*스크립트릿은 서블릿 변환시 _jspService메서드 안에 위치하게 되는데, 
    메서드 안에는 메서드를 쓰지 못하기 때문에 스크립트릿에는 메서드 선언이 불가능하다.
    jsp에서 메서드를 선언할 때에는 선언문(Declaration)을 쓴다.
    */
    public void inCrease() {
 
    }%>
 
    <%!int a; //멤버변수로 선언됨 //초기화하지 않아도 된다.%>
 
    <%
        int a = 100//_jspService메서드의 지역변수로 선언됨
        //멤버변수는 명시적으로 초기화하지 않더라도 타입에 맞게 기본값으로 초기화되지만 
        //지역변수는 반드시 초기화 해줘야한다.
    %>
 
</body>
</html>
cs




2. 스크립트릿 : <% ... %>

가장 많이 사용되는 스트립트 요소

jsp페이지가 서블릿으로 변환되고 요청될 때 _jspService(Tomcat 기준)메서드 안에 선언이 되는 요소

선언문과는 다르게 선언된 변수는 지역 변수로 선언이 되고(메서드 안에 선언됨) 메서드는 선언할 수 없다.

스크립트릿에서 선언된 변수는 선언시에 반드시 초기화를 해주어야한다. 

(멤버변수는 명시적으로 초기화하지 않더라도 타입에 맞게 기본값으로 초기화되지만 지역변수는 반드시 초기화 해줘야한다.)

변수를 사용하려면 먼저 선언이 돼있어야하기 때문에 변수의 선언 위치가 중요하다.


스크립트릿은 문장블록을 닫지 않고 끝낼 수 있는 성격을 가지고 있어 JSP제어문 처리에 유연하게 쓸 수 있다 

특히 조건문, 순환문, 예외 처리 시에 유용하게 사용되며 중간에 정적인 코드가 필요한 부분에서 스크립트릿을 닫고

다시 필요한 부분에서 스크립트릿 사용(블럭이 안닫힌 상태에서 스크립트릿을 닫을 수 있다.)

(이하 스크립트릿에 대한 예제는 JSP의 기본 제어문에서 자세하게 다루기)


스크립트릿은 서블릿 코드에서 _jspService 메서드에 들어간다.




3. 표현식 :  <%=동적인 변수 %>

 jsp 페이지에서 동적인 코드 부분을 브라우저로 표현하기 위한 요소

스크립트릿과 달리 변수나 메서드 출력(호출)하고 세미콜론 붙이지 않는다.


${} / out.print =Sytem.out.println 과 비슷한 기능이라고 보면 된다. 

${} : EL언어 (Expression Language)



4. 주석 : <!--  ...  -->  <%--  ...  --%>

소스 분석 내용 및 파일 설명 처리를 위한 요소


<!--  주석 1)  '소스보기'에서 보이는 부분  --!> 

<%-- 주석2) jsp페이지에서만 보이는 부분. 브라우저에 보이지 않는 문장  --%>


주석 단축키 : Ctrl + Shift + / 


스크립트 요소의 주석(자바 주석처리와 동일)

<% /* 주석처리 내용 */  %>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<h1>Comment Example</h1>
<%
String msg = "동적인 변수";
%>
<!--  주석 1)  '소스보기'에서 보이는 부분  --> 
 
<%-- 주석2) jsp페이지에서만 보이는 부분. 브라우저에 보이지 않는 문장  --%>
 
<!-- 주석1) '소스보기'에서만 보이는 부분에도 <%=msg%> 사용가능 -->
 
<%=msg/* 표현식에 주석달기 */ %>
 
cs











JSP의 기본 제어문


if문 예제)


if.html

1
2
3
4
5
6
7
8
9
10
11
12
<meta charset="utf-8">
<h1>IF-else Example</h1>
<form method="post" action="if.jsp"
 이름 : <input name="name"><p/>
 좋아하는 색깔 : <select name = "color">
 <option value ="blue" selected>파란색</option>
  <option value ="red">붉은색</option>
    <option value ="orange">오렌지색 </option>
      <option value ="etc">기타 </option>
     </select><p/>
      <input type ="submit" value="보내기">
      </form>
cs



if.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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
    String msg;
%>
<%
    String name = request.getParameter("name");
    String color = request.getParameter("color");
 
    if (color.equals("blue")) {
        msg = "파란색";
    } else if (color.equals("red")) {
        msg = "붉은색";
    } else if (color.equals("orange")) {
        msg = "오렌지색";
    } else {
        color = "white";
        msg = "기타색";
    }
%>
<body bgcolor=<%=color%>>
    <b><%=name%></b>님이 좋아하는 색깔은
    <b><%=msg%></b>입니다.
</body>
 
cs


응답 결과






for문)


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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <%
        //1-10까지의 숫자를 화면에 출력하시오
        for (int i = 1; i < 11; i++{
            //System.out.println(i);
            //브라우저에서 소스 코드가 나오는게 아니라 콘솔창에 나타남
            //브라우저 창에 출력하기 위해서는 표현식(Expression)을 써야한다.
    %>
 
    <%=/* 자바코드를 중간에 끊고 표현식을 삽일할 수 있다.*/%> <br/>
    
    <%
        }
    %>
 
 
</body>
</html>
cs



구구단


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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <%
        for (int i = 1; i < 10; i++) {
    %>
    <br/><%=i%>단 <br/>
    <%
        for (int j = 1; j < 10; j++) {
    %>
 
    <%=i%>*<%=j%>=<%=* j%><br />
 
    <%
        }
 
        }
    %>
 
 
</body>
</html>
cs




이러한 예제에서는 표현식을 열고닫는 것보단 

스트립트릿 안에서 out.write( i + "*" + j + "=" + i*j ); 를 쓰는 것이 더 편하다.


table태그 쓸때는 out.write보다 Expression이 더 쓰기 편하다.