Java

JSP 기초 문법

ryeonng 2024. 7. 5. 16:14

JSP는 기본적으로 HTML 문서 안에 자바 언어를 삽입해 사용할 수 있도록 설계 되어 있다.

그래서 실제로 대부분의 변수 선언, 메서드 선언, 로직 등은 자바 언어로 작성할 수 있다.

하지만, HTML 사이에 자바 코드를 끼워 넣을 때 필요한 문법이 몇가지 있다.

 

JSP 기초 문법의 종류
       - JSP 지시어, Directive
       - 스크립트릿 (Scriptlet)
       - 선언부 (Declaration)
       - 표현부 (Expession)
       - JSP 액션 태그

 

 

JSP 지시어, Directive

<%@ xxxx... %>

JSP 디렉티브는 JSP 페이지의 전반적인 속성을 설정한다. 주로 페이지 속성, import 등을 지정한다.

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.lang.Math" %>

 

스크립트릿(Scriptlet)
  • Java 코드를 HTML 중간에 삽입할 때 사용한다.
  • <% ... %> 태그 사이에 Java 코드를 작성한다. (코드 실행 영역에 해당한다.)
<% 
    String greeting = "Hello, JSP!";
    out.println(greeting);
%>

 

선언부(Declaration)

JSP 페이지에서 변수를 선언하거나, 메서드를 정의할 때 사용한다.

  • <%! ... %> 태그를 사용한다.
<%! 
    private String greeting = "Hello, JSP!";
    
    public String getGreeting() {
        return greeting;
    }
%>

 

표현식(Expression)
  • 값을 출력할 때 사용하며, Java 표현식을 평가한 결과를 HTML로 출력한다.
  • <%= ... %> 태그를 사용한다.
<%
    String greeting = "Hello, 길동!";
%>
<p>Greeting: <%= greeting %></p>

 

JSP 액션 태그(Action Tags)
  • JSP 페이지에서 자바빈즈(Beans)를 사용하거나 다른 JSP 페이지를 포함시키는 등의 작업을 수행할 때 사용된다.
// 자바빈즈를 생성하거나 찾을 때 사용합니다.
<jsp:useBean id="myBean" class="com.example.MyBean" scope="session" />

// 자바빈즈의 속성 값을 설정할 때 사용합니다.
<jsp:setProperty name="myBean" property="username" value="JohnDoe" />

// 자바빈즈의 속성 값을 가져올 때 사용합니다.
<p>Username: <jsp:getProperty name="myBean" property="username" /></p>

// 다른 JSP 페이지를 포함시킬 때 사용합니다. 
<jsp:include page="header.jsp" />

// 다른 JSP 페이지로 요청을 포워드할 때 사용합니다.
<jsp:forward page="nextPage.jsp" />

... 등

 

자바빈즈(JavaBeans)
     - 재사용 가능한 객체 : 자바빈즈는 재사용 가능하도록 설계된 Java 객체이다.
     - 특정 규약이 적용된 객체 : 자바빈즈는 캡슐화, 기본 생성자, 직렬화 등의 규약을 따른다.
            - 캡슐화(Encapsulation) : 필드는 private으로 선언하고, 접근자 메서드(getter)와 설정자 메서드(setter)를 통해 접근한다.
            - 기본 생성자(Default Constructor) : 자바빈즈 클래스는 기본 생성자를 반드시 가져야 한다.
            - 직렬화(Serialization) : 자바빈즈는 Serializable 인터페이스를 구현하여 직렬화할 수 있다.
     - 데이터 저장, 연산 및 전송: 자바빈즈는 애플리케이션에서 데이터를 저장하고, 연산을 수행하며, 다른 컴포넌트나 시스템으로 데이터를 전송하는 데 도움을 준다.

정리 - 동일한 클래스를 여러 곳에서 인스턴스화 해서 사용가능하며 스코프(scope) 내에서 재사용될 수 있다. 세션 스코프(scope)에서 생성된 자바빈즈 객체는 세션 내내 동일한 객체로 유지될 수 있다.

자바빈즈와 스코프
- page: 현재 페이지에서만 사용 가능 (기본값)
- request: 하나의 요청 동안 사용 가능
- session: 세션 동안 사용 가능
- application: 애플리케이션 전체에서 사용 가능

 

코드 실습 1 - 인사말 생성기
1. HTML 폼 생성
2.  greet.jsp 작성
3. 결과 테스트

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>인사말 생성기</h1>
	<!-- 절대 경로 -->
	<!-- 상대 경로 -->
	<!-- 상대 경로로 주소 설계 (폴더/클래스네임)-->
	<form action="greet.jsp" method="POST">
		<label for="name">당신의 이름을 입력 하세요 :</label>
		<input type="text" id="name" name="name" required="required">
		<button type="submit">서버로 제출</button>
	</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!-- 위 구문은 JSP 페이지의 설정을 정의하는 지시자이다. -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>인사말을 완성하였습니다.</h1>
	
	<%
		// 자바 실행 코드
		// request 객체에서 값 추출하기
		
		String name = request.getParameter("name");
		if(name == null || name.trim().isEmpty()) {
			out.println("<p> 이름을 먼저 입력해주세요. </p>");
		} else {
			out.println("<p> 안녕하세요, " + name + "! JSP Site 방문을 환영합니다.");
		}
	%>
	
	<!-- 다시 이전 페이지(특정 페이지)로 이동 처리 만들기 -->
	<a href="greet_form_page.html">Back</a>
	
</body>
</html>

 

코드 실습2 - 간단한 계산기 만들기
1. HTML 폼 만들기
2. calculator.jsp 작성
3. 결과 테스트

<!DOCTYPE html>
<html>-
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	
	body {
		display: flex;
		height: 100vh; /* 높이를 화면 전체 높이로 */
		justify-content: center; /* 주축 방향 정렬 */
		align-items: center; /* 교차축 방향 아이템 정렬 */
		margin: 0;
		background-color: #f0f0f0;
	}
	
	.container {
		background-color: white;
		padding: 20px;
		border-radius: 8px;
		box-shadow: 0 0 10px rgba(0,0,0, 0.1); /* 그림자 영역 */
		width: 300px;
	}
	
	form {
		display : flex;
        flex-direction: column;
	}
	
	label {
		
	}
	
	input[type="number"] {
	  margin-bottom: 15px;
      padding: 10px;
      border: 1px solid #ccc;
      border-radius: 4px;
	}
	
	input[type="submit"] {
	  padding :10px;
      background-color: #28a745;
      color: white;
      cursor: pointer;
      border: none;
      border-radius: 4px;
	}
	
	input[type="submit"]:hover {
		background-color: #45a049;
	}
	
</style>
</head>
<body>
	<div class="container">
		<h1>간단한 계산기</h1>
		<form action="calculate.jsp" method="POST">
		<label for="num1">첫 번째 숫자를 입력하세요.</label>
		<input type="number" id="num1" name="num1" required="required" value="10">

		<label for="num2">두 번째 숫자를 입력하세요.</label>
		<input type="number" id="num2" name="num2" required="required" value="20">

		<input type="submit" value="계산 요청하기">
		</form>
	</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산 결과</title>
</head>
<body>
	<h1>계산 결과</h1>
	
	<!-- html 주석 -->
	<%-- JSP 주석 --%>
	<%
		// 스크립트 릿 태그
	
		// 폼에서 데이터 추출
		String num1Str = request.getParameter("num1");		
		String num2Str = request.getParameter("num2");		

		// 방어적 코드 작성
		if(num1Str != null && num2Str != null) {
			
			try {
				
			int num1 = Integer.parseInt(num1Str);
			int num2 = Integer.parseInt(num2Str);

			int sum = num1 + num2;
			
			out.print("<p> " + num1 + " 와 " + num2 + " 의 합은 " + sum + "</p> ");
			
			} catch(NumberFormatException e) {
				out.print("<p> 유효한 숫자를 입력해주세요. </p>");
			} 
	
		} else {
			out.print("<p> 두 숫자를 모두 입력하세요. </p>");			
		}
		
		// 계산의 결과를 스트림을 통해 내려주기
	%>
	
	<a href="calculator_form.html">돌아가기</a>
</body>
</html>

'Java' 카테고리의 다른 글

JSP 기본 태그 (스크립트릿, 선언, 표현식)  (5) 2024.07.09
JSP 주석과 지시자  (0) 2024.07.09
JSP 라이프사이클  (0) 2024.07.05
JSP(Java Server Pages)  (1) 2024.07.05
서블릿 필터와 리스너  (0) 2024.07.05