본격적인 JSP들어가기, ScriptTag

전영덕·2023년 3월 26일
0

JSP

목록 보기
4/16

JSP

4-1. JSP란?

  • Java Server Pages
  • HTML 코드에 Java 코드를 넣어 동적 웹페이지를 생성하는 웹 어플리케이션 도구이다.
  • HTML + Java
  • HTML을 중심으로 Java와 연동하여 사용하는 웹 언어이다.
  • JSP가 실행되면 자바 서블릿(servlet)으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고,
    그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답하게 된다.

4-2. 스크립트 태크

  • HTML 코드에 자바 코드를 넣어 프로그램이 수행할 기능을 구현할 수 있다.

  • 선언문(declaration)
    자바 변수나 메서드를 정의하는데 사용하는 태크
    <%! ... %>

  • 스크립틀릿(scriptlet)
    자바 변수선언 및 자바 로직코드를 작성하는데 사용되는 태크
    여기에서도 변수선언을 할 수 있기때문에 선언문을 따로 사용하기보다는 이걸로 한번에 사용한다.
    <% ... %>

  • 표현문(expression)
    변수, 계산식, 메서드 호출 결과를 나타내는 태크
    <%= ... %>

  • 지시자
    페이지 속성 지정
    <%@ ... %>

  • 주석
    <%-- ... --%>

  • 스크립트 태그 예시_시간 출력하기 : ScriptTag1.jsp

<%@page import="java.util.Date"%>
<%@ 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>
<%-- 	<p> Today's Date : <%= new java.util.Date() %> </p> --%>
	<p> Today's Date : <%= new Date() %> </p>
</body>
</html>
  • 스크립트 태그 예시_반복문 출력 : ScriptTag2.jsp
<%@ 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">
	<%
		for(int i=1;i<=3;i++){		
	%>
		<tr>
			<% 
			for(int j=1;j<=5;j++){
			%>
				<td><%=i %>행 <%=j %>열</td>
			<%
			}
			%>
		</tr>
		<%
	}
	%>
	</table>
</body>
</html>
  • 스크립트 태그 예시_이쁜 반복문 출력 : ScriptTag3.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> Insert title here

.odd {
color: blue;
}

<% for (int i = 1; i <= 10; i++) { %> "> <% for (int j = 1; j <= i; j++) { %> <% if (i + j >= 11) { break; } } %> <% } %>
<%=i%>행 <%=j%>열

4-3. JSP내장 객체

  • JSP 내장 객체
  • JSP 페이지 내에서 제공되는 특수한 클래스 형의 객체
  • 내장 객체는 선언과 할당 없이 사용할 수 있다.
  • Java에서 Math클래스 같은 것

4-4. JSP 내장 객체 종류

  • request : 웹 브라우저의 요청 정보를 저장하고 있는 객체
  • response : 웹 브라우저의 요청에 대한 응답 정보를 저장하고 있는 객체
  • out : JSP페이지에 출력할 내용을 가지고 있는 출력 스트림 객체
  • session : 하나의 웹 브라우저의 정보를 유지하기 위한 세션 정보를 저장하고 있는 객체
    -----위 4개가 많이 사용되고 아래는 보기만 하자-----
  • application
  • pageContext
  • page
  • config : JSP페이지에 대한 설명
  • exception : 예외

예시 : first.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    	String cntStr = request.getParameter("cnt");
    
    	int cnt = 100;
    	if(cntStr !=null && !cntStr.equals("")){
    		cnt = Integer.parseInt(cntStr);
    	}
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%for(int i=0;i<cnt;i++){ %>
	안녕 Servlet!<br>
	<%} %>
</body>
</html>

예시_객관식 문제 : from.jsp 와 to.jsp

  <%@ 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>

	<div><h1>Q. 100+200?</h1></div>
	<div>
	<a href="to.jsp?ans=100">100</a>
	<a href="to.jsp?ans=200">200</a>
	<a href="to.jsp?ans=300">300</a>
	<a href="to.jsp?ans=400">400</a>
	<a href="to.jsp?ans=500">500</a>
	</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
  	String ans = request.getParameter("ans");
  	
    //결과 값을 출력할 결과 문자열
  	//이렇게 자바는 자바끼리 모아놓아야 유지보수하기 좋다. 자바 코드영역은 상단에 미리 해두고 HTML태그부분에는 결과값만 출력하기  
  	String result = null;
    if( ans ==null){
    	result = "응답 내용이 없습니다.";
    } else{
    	int user_select = Integer.parseInt(ans);
    	if(user_select==300){
    		result = "정답입니다.";
    	} else {
    		result =  "정답이 아닙니다.";
    	}
    }
    
  	%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div><h1>응답결과</h1></div>
	<div><p><%= result %></p></div>
</body>
</html>

예시_파라미터 넘기기 : action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    String user_name = request.getParameter("user_name");
    
    String result = null;
    
    user_name = user_name.trim();
    if(user_name==null){
    	result = "이름이 없습니다.";
    } else if(user_name==""){
    	result = "이름을 입력하세요"; 
    } else { result = user_name;}
    
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div><h1>이름 : <%= result %></h1></div>
</body>
</html>

4-5. doGet, doPost, doProcess방식

한 개의 JSP파일과 servlet파일을 만들 것임.
doGet이던 doPost던 doProcess메서드를 따로만들고 호출하는 것으로 처리하는 방식
먼저 정수 2개받아와서 더하는 계산기 JSP파일

  <%@ 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>
	<form action="calc5" method="get">
	첫번째 정수 <input type="text" name=num1><br>
	두번째 정수 <input type="text" name=num2><br>
	<input type="submit">
	</form>
</body>
</html>
  • 정수 2개를 넘겨받아오는데 그게 어떤 방식이던 간에doProcess 메서드를 호출할 것임
    package com.codingbox.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

@WebServlet("/calc5")
public class CalcServlet extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("GET 방식");
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.print("POST 방식");
		doProcess(req, resp);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws IOException {
		int num1 = Integer.parseInt(request.getParameter("num1"));
		int num2 = Integer.parseInt(request.getParameter("num2"));
		
		PrintWriter out = response.getWriter();
		out.println("<html><body>"+(num1+num2)+"</body></html>");
	}
}

4-6. 디렉티브 태크

<%@ include file="파일명" %>

  • 현재 JSP 페이지의 특정 역역에 외부 파일의 내용을 포함시키는 태그이다. 보통 header와 footer는 대부분의 페이지에
    동일한 내용으로 작성되기 때문에 유지보수 및 편의를 위해서 외부파일로 만든 후 include하여 사용한다.
  • 이건 예시만 봐도 알 수가 있다.
  • 먼저 모두 포함하는 include_test.jsp 파일
  <%@ 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>
<%@ include file = "header.jsp" %>
<h4>--------------------페이지 영억--------------------</h4>
<p>페이지 내용</p>
<h4>------------------------------------------------</h4>
<%@ include file = "footer.jsp" %>
</body>
</html>
  • header.jsp 파일
<%@ 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>
	<p>여기는 헤더영역</p>	
</body>
</html>  
  • footer.jsp파일
<%@ 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>
	<p>Copyright 여기는  푸터영역</p>	
</body>
</html>

0개의 댓글