본문 바로가기
JSP Servlet

JSP Servlet Java Server Pages 기본

by wanttosleep1111 2023. 1. 30.

JSP Servlet Java Server Pages 기본

 

1. JSP(Java Server Pages)

  • HTML내에 Java 코드를 작성하고 웹 서버에서 웹 페이지를 생성하여 웹 브라우저에 돌려주는 자바를 기반으로 한 스크립트 언어
  • .jsp 확장자를 가짐
  • 동적으로 작동하여 응답은 html을 이용함
  • jsp → Servlet(.java) → 클래스(.class) → html로 변환되어 실행

 

※ 실제 자동 생성되는 servlet과 .class

 


 

2. JSP 필요성

  • Servlet의 특징
    자바 코드로 구현한 후 컴파일하고 배포해야 한다.
    코드가 수정되면 다시 컴파일하고 배포해야 한다.
    HTML 코드를 Servlet 클래스 내에서 문자열로 작성해야 한다.
    프로그램이 복잡해지면 출력되는 HTML 페이지를 상상하기 어렵다.

 

  • Servlet, JSP 비교

 


 

3. JSP 구성요소

 

  • 스크립트릿(Scriptlet) : <% %>, JSP 페이지 내부에 Java 소스 코드를 삽입

 

  • 표현식(Expression) : <%= %>, 출력결과(html 요소 내)에 값을 넣기 위해 사용

 

  • 선언문(Declaration) : <%! = %>, JSP 페이지 내부에 자바 메소드, 전역 변수를 선언

 

  • 지시자(Directive) : <%@ %>, JSP에 대한 설정 정보 또는 JSP 페이지에 다른 문서를 포함시킬 때 사용
    (Web container가 JSP page를 Servlet class로 변환할 때 필요한 정보를 기술하기 위해 사용)
    page 지시자 : JSP 페이지의 전체적인 환경설정을 할 때 사용
    include 지시자 : 현재 페이지에 다른 파일의 내용을 삽입할 때 사용
    taglib 지시자 : 태그 라이브러리에서 태그를 가져와 사용할 수 있는 기능 제공

※ page 지시자

 

※ include 지시자

 

※ taglib 지시자

 

  • 주석 <%-- --%> : 프로그램 설명, 테스트 목적으로 사용되는 태그

 

 

▶ 연습

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h1>JSP 페이지입니다~~!</h1>
	
	<%
		int num1 = 10;
		int num2 = 20;
		
		int sum = num1 + num2;
		
		System.out.print(sum);
	%>
	<!-- Scriptlet 안에서 벗어난 경우 -->
	int sum = num1 + num2;
	<br>
	<%= sum %>

</body>
</html>

 


 

▶ 예제

1~100까지 합을 구하여 화면에 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		int sum = 0;
		for (int i = 1; i < 101; i++){
			sum += i;
		}
	%>
	1~100까지의 합 : <%= sum %>
</body>
</html>

 


 

▶ 예제

방이 10개인 테이블을 만들어 화면에 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<table border=1>
	<tr>
	<%
		for (int i = 1; i < 11; i++) {%>
			<td><%= i %></td>
		<%} %>
	</tr>
	</table>
	
</body>
</html>

 


 

▶ 예제

HTML에서 이름을 입력 받아 JSP에서 입력한 이름을 출력하기

※ action 속성에 .jsp (형식까지 적기)

※ JSP 파일은 내장 객체로 request 객체를 포함하고 있음

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="Ex03PrintName.jsp">
		<input type="text" name="name">
		<input type="submit">
	</form>

</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%
		String name = request.getParameter("name");
	%>
	
	입력한 이름 : <%= name %>
	
</body>
</html>

 


 

▶ 예제

HTML에서 정수 2개와 연산기호를 입력 받아 JSP에서 연산 결과를 출력하기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<form action="Ex04Return.jsp">
		<input type="text" name="num1"> <br>
		<input type="text" name="num2"> <br>
		<select name="op">
			<option>+</option>
			<option>-</option>
			<option>*</option>
			<option>-</option>		
		</select>
		<input type="submit" value="계산">
	</form>
	
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		String op = request.getParameter("op");
	
		int result = 0;
		if (op.equals("+")) {
			result = num1 + num2;
		} else if (op.equals("-")) {
			result = num1 - num2;
		} else if (op.equals("*")) {
			result = num1 * num2;
		} else if (op.equals("/")) {
			result = num1 / num2;
		}
	%>
	
	<%= num1 %> <%= op %> <%= num2 %> = <%= result %>
	
</body>
</html>

 


 

▶ 예제

절댓값을 구하는 메소드 abs를 작성하고 사용해보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%!
		public int abs(int num){
			int result = num>=0 ? num : -(num);
			return result;
		}
	%>
	
	5의 절댓값 : <%= abs(5) %> <br>
	-5의 절댓값 : <%= abs(-5) %>	
	
</body>
</html>

 


 

▶ 예제

num1, num2, sum 변수를 선언하고 정수의 홀짝을 판별하는 메소드를 작성하기

sum이 짝수인지, 홀수인지 화면에 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<%
		int num1 = 10;
		int num2 = 21;
		int sum = num1 + num2;
	%>
	
	sum은 <%= isOdd(sum) %>입니다.
	
	<%! 
		public String isOdd(int num) {
			String result = num%2==0 ? "짝수" : "홀수";
			return result;
		}
	
	%>
	
	
</body>
</html>

 


 

예제

지시자를 이용해 오류페이지를 바꿔보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- page 지시자 추가 : 오류가 발생했을 때 띄워줄 수 있는 새로운 페이지 연결  -->
<%@ page errorPage="error.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	2를 0으로 나누면?
	<%= 2/0 %>
	
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<img src="https://previews.123rf.com/images/djvstock/djvstock1710/djvstock171000838/87280073-%ED%8C%8C%EB%9E%80%EC%83%89-%EB%B0%B0%EA%B2%BD-%EC%9C%84%EC%97%90%EB%8F%84-%ED%91%9C%EC%A7%80%ED%8C%90-%EC%98%A4%EB%A5%98-404%EC%9D%98-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%99%94%EB%A0%A4%ED%95%9C-%EB%94%94%EC%9E%90%EC%9D%B8-%EB%B2%A1%ED%84%B0-%EC%9D%BC%EB%9F%AC%EC%8A%A4%ED%8A%B8-%EB%A0%88%EC%9D%B4-%EC%85%98.jpg">
</body>
</html>

 


 

▶ 예제

include 지시자를 사용하여 a태그로 연결된 두 개의 페이지 내용 하단에

Eat Sleep Code Repeat

onlyPractice 

출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h3>메인 페이지</h3> <br><br><br>
	
	<a href="Ex08subPage.jsp">서브 페이지로 이동</a> <br><br><br>
	
	<%@ include file="Ex08footer.jsp" %>
	
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h3>서브 페이지</h3> <br><br><br>
	
	<a href="Ex08mainPage.jsp">메인 페이지로 이동</a> <br><br><br>
	
	<%@ include file="Ex08footer.jsp" %>
	
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body align="center">
	Eat Sleep Code Repeat <br>
	onlyPractice
</body>
</html>

 

댓글