일단 해보는 코딩/JSP

[JSP] JSP이란?

eun_zoey2 2022. 8. 16. 15:06
728x90

JSP(JavaServer Pages)는 간단히 말하면 내부적으로 연산 능력을 가지는 html이다.

Servlet에서는 html의 태그(<   />)를 하나하나 작성해 주어야 하는데 jsp로 작업하면 자동으로 만들어서 Tomcat이 이를 서블릿으로 변환시켜 준다. 서블릿으로 변환된 결과가 클라이언트 브라우저로 가서 표시된다. 

서블릿만으로는 UI 작업이 어렵기 때문에 화면의 UI 디자인을 좀 더 쉽게 해주는 기능이 JSP라고 볼 수 있다.

 

1. 클라이언트가 어떤 동작을 함으로써 Hi.jsp 를 요청하였다.

2. JSP 컨테이너가 JSP 파일을 읽는다.

3. JSP 컨테이너가 Generete (변환) 작업을 통해 Servlet (. java )  파일을 생성한다.

4. .java 파일은 다시. class 파일로 컴파일된다.

5. Execute (실행) 을통해 HTML 파일을 생성하여 JSP 컨테이너에게 전달한다.

6. JSP 는 HTTP 프로토콜을 통해 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>

</body>
</html>

 jsp.file 의 첫머리에서 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> 는 servlet과 동일한 설정으로 지시어 (Standard Directives)로써 JSP속성을 지니고 있다.

여기에 page, contentType, charset, pageEncoding 이외에 include file = "header.jsp", "body.sjp" 식으로 추가 가능, 

그리고 taglib tagdir = "WEB-INF/tags" prefix = "m"식으로 써줄 수 있다.  
<%..................... %>을 스크립트릿(Scriptlet)이라고 하는데 jsp에서 자바 코드를 사용하고자 할 때 지정하는 영역 

 

■ <%! ...... %> : 는 멤버 필드 영역(클래스에서의 멤버 전역변수와 메서드 선언)이다.

■ <% ....... %> : 일반 영역이다.  로컬 변수로 인식된다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <% String ip = request.getRemoteAddr();	//접속자의 IP주소 얻어오기
// request 는 서블릿 객체이지만 나중에 이 JSP가 작업한 뒤 서블릿으로 변환되기 때문에 사용가능 
    
    %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>&lt;%@내용%&gt; : jsp header로 전송 시 인코딩, 페이지 인코딩, import 문장 등 설정, 필수</p>
	<p>&lt;%@자바코드%&gt; : Scriptlet으로 JSP에서 자바코드 입력 부분</p>
	<p>&lt;%@변수_명%&gt; : Scriptlet에서 변수출력</p>
	<p>&lt;%@변수_명;%&gt; : Scriptlet에서 변수_명; 식으로 사용하면 오류</p>
<%=ip %> 님 방문해주셔서 감사합니다. <!-- =ip는 JSP에서 변수_명 출력 --> 
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
String[] fruit_array = {"사과","배","참외","오렌지","복숭아"};
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
ul {width:30px;}
li{list-style:none; background:#ff3300; padding:5px; margin:3px;
	color:#ffffff; font-weight:bold;}
li:hover{background:#00cc00; color:#ffff00}	
</style>
</head>
<body>
	과일목록<br>
	<ul>
	<%
	for(int i=0; i<fruit_array.length; i++){
	%> 		
	<li> <%= fruit_array[i] %> </li>
	<% }
	%>
	</ul>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
	for(int i=2; i<=9; i++){
		for(int j=1; j<=9; j++){
			System.out.println(i + "*" + j + "=" + j*i + "\t");
		}
		System.out.println();
	}
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
	table { border:2px solid black; border-collapse:collapse; }
	tr { height:30px;}
	td { width:100px; text-align:center; }
</style>
</head>
<!-- html 주석인데 컴파일 시 그대로 자바코드로 전환되기 때문에 비추천 -->
<%-- JSP 주석인데 컴파일 시 자바코드로 전환되지 않아 추천 --%>
<body>
구구단
<table border="1">
<% for(int i=1; i<=9; i++){ %>
<tr>
	<%for(int j=2; j<=9; j++){ %>
		<td>
		 <% String str = String.format("%d * %d = %d" , i , j , j*i); %>
		 <%=str %> <%-- "<% "는 변수처리 --%>
		 </td>
		 <% } %>
		 </tr>
	<% } %>
</table>
</body>
</html>

+ 버튼을 누르고
= 누르면
결과값이 나온다

package Web.kahn.edu;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/calc2")
public class Calc2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void service(HttpServletRequest request
			, HttpServletResponse response) 
					throws ServletException, IOException {
		ServletContext application = request.getServletContext();	//별도의 저장공간; 전역변수
//		이 부분은 필요에 의해 session, cookie, application으로 사용할 수 있다. 
		HttpSession session = request.getSession();
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=utf-8");
		String v_ = request.getParameter("v");	// 값 입력
		String op = request.getParameter("operator");  // 연산
		int v = 0;	// 초기화
		if(!v_.contentEquals(""));
		v = Integer.parseInt(v_);
		if (op.contentEquals("=")) {
			int x = (Integer)session.getAttribute("value");
			int y = v;
			String operator = (String)session.getAttribute("op");
			int result = 0;
			if(operator.equals("+"))
				result = x+y;
			else 
				result = x-y;
			response.getWriter().printf("result is %d\n" , result);
		} else {
			session.setAttribute("value", v);
			session.setAttribute("op", op);
		}
	}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="calc2" method="post">
	<div>
		<label>입력</label>
		<input type ="text" name="v" />
	</div>
	<div>
		<input type ="submit" name="operator" value="+" />
		<input type ="submit" name="operator" value="-" />
		<input type ="submit" name="operator" value="=" />
	</div>
		결과 : 0
	</form>
</body>
</html>

 

※ 웹 프로그래밍 Full-stack Couse 

더보기

■ HTML : 클라이언트 웹 브라우저에 보이기 위함

■ CSS : html을 좀 더 화려하게 UI 디자인하기 위함

■ JavaScript : 입력 UI form(ID, PX, x값, y값,...) 값을 WAS 서버에게 해석해서 전달함

■ Servlet : WAS 서버에서 클라이언트에게서 전달 된 값을 목적별로 처리함

■ JSP : html 에 자바 코드를 넣음

■ Spring :  특히 Database와 연계할 때 사용하는데 일단 JSP로 프로그래밍하는 부분을 대폭 줄임

■ Spring boot : Spring을 더욱 간편하게 처리시킴

■ Android : 이런 과정을 묶어서 Android 폰에서 작동되게 함

'일단 해보는 코딩 > JSP' 카테고리의 다른 글

[JSP] JSP와 DB연결  (0) 2022.08.18
[JSP] VO(Value Object), 내장객체  (0) 2022.08.16
[JSP] 작업설정하기  (0) 2022.08.16
[JSP] 서블릿2  (0) 2022.08.12
[JSP] 서블릿 환경 설정하기  (0) 2022.08.11