본문 바로가기
JSP Servlet

JSP Servlet 내장 객체 (Implicit Object)

by wanttosleep1111 2023. 2. 4.

JSP Servlet 내장 객체 (Implicit Object)

 

내장 객체 (Implicit Object)

 

  • JSP page 안에 선언을 하지 않고도 사용할 수 있는 객체
  • Web container가 JSP page를 Servlet class로 변환시키면서 자동으로 내장 객체를 선언

 

  • Scriptlet을 다중으로 사용하지 않아 코드가 간결해질 수 있음

 

  • response.sendRedirect() : 현재 실행 중인 JSP page의 실행을 중단하고 다른 Web page가 대신 호출되도록 만드는 기능

 

  • forward 방식으로 페이지 이동 및 데이터 전송

    RequestDispatcher rd = request.getRequestDispatcher("데이터를 받는 경로");
    request.setAttribute("key", value)
    rd.forward(request, response)

    forward로 보내진 데이터 꺼내오기 (반환값이 Object 타입이므로 다운캐스팅 필요)
    (필요자료형) request.getAttribute("key");


 

▶ 예제

입력한 데이터들을 jsp 파일에 보낼 수 있는 조건을 완성하기 (전송방식 : post)

 

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

	<fieldset align="center">
		<legend>학점 확인 프로그램</legend>
			<form action="Ex01request.jsp" method="post">
				<table align="center">
					<tr>
						<td>이름</td>
						<td><input type="text" name="name"></td>
					</tr>
					<tr>
						<td>JAVA 점수</td>
						<td><input type="text" name="java"></td>
					</tr>
					<tr>
						<td>WEB 점수</td>
						<td><input type="text" name="web"></td>
					</tr>
					<tr>
						<td>DB 점수</td>
						<td><input type="text" name="db"></td>
					</tr>
					<tr>
						<td>Python 점수</td>
						<td><input type="text" name="python"></td>
					</tr>
					<tr>
						<td></td>
						<td align="left"><input type="submit" value="확인하기"></td>
					</tr>
				</table>
			</form>	
	</fieldset>
	
</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>
	<%
		request.setCharacterEncoding("UTF-8");
		
		String name = request.getParameter("name");
		int java = Integer.parseInt(request.getParameter("java"));
		int web = Integer.parseInt(request.getParameter("web"));
		int db = Integer.parseInt(request.getParameter("db"));
		int python = Integer.parseInt(request.getParameter("python"));
		
		double avg = (double)(java+web+db+python)/4;
		String grade = "";
		if (100>=avg && 95<=avg) {
			grade = "A+";
		} else if (94>=avg && 90<=avg) {
			grade = "A";
		} else if (89>=avg && 85<=avg) {
			grade = "B+";
		} else if (84>=avg && 80<=avg) {
			grade = "B";
		} else if (80>avg) {
			grade = "F";
		}
	%>
	
	<fieldset align="center">
		<legend>학점 확인 프로그램</legend>
			<table align="center">
				<tr>
					<td>이름</td>
					<td><%= name %></td>
				</tr>
				<tr>
					<td>JAVA 점수</td>
					<td><%= java %></td>
				</tr>
				<tr>
					<td>WEB 점수</td>
					<td><%= web %></td>
				</tr>
				<tr>
					<td>DB 점수</td>
					<td><%= db %></td>
				</tr>
				<tr>
					<td>Python 점수</td>
					<td><%= python %></td>
				</tr>
				<tr>
					<td>평균</td>
					<td><%= avg %></td>
				</tr>
				<tr>
					<td>학점</td>
					<td><b><%= grade %></td>
				</tr>
			</table>
	</fieldset>
</body>
</html>

 


 

▶ 예제

랜덤 당첨 게임 만들기

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

	<fieldset align="center">
		<legend>랜덤 숫자 입력</legend>
			<form action="Ex02createInput.jsp">
				<input type="number" name="num">
				<br>
				<input type="submit" value="생성하기">
			</form>
	</fieldset>

</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 num = Integer.parseInt(request.getParameter("num"));
	%>


	<fieldset align="center">
		<legend>랜덤 당첨 작성</legend>
			<form action="Ex02randomWinner.jsp">
				주제 : <input type="text" name="title">
				<%
					for (int i = 0; i<num; i++) {
						out.print("<br>");
						out.print("아이템"+(i+1)+" : ");
						out.print("<input type=\"text\" name=\"item\">");
					}
				%>
				<br>
				<input type="submit" value="시작">
			</form>
	</fieldset>
</body>
</html>

 

<%@page import="java.util.Random"%>
<%@ 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 title = request.getParameter("title");
		String[] item = request.getParameterValues("item");
		
		Random rd = new Random();
		int rd_num = rd.nextInt(item.length);
	%>
	
	<fieldset align="center">
		<legend>랜덤 당첨 결과</legend>
			<%= title %> <br>
			<%= item[rd_num] %> <br>
	</fieldset>

</body>
</html>

 

 


 

▶ 예제

각 웹페이지로 이동하는 jsp 만들기

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

	<form action="Ex04_url.jsp">
		<select name="url">
			<option value="http://www.naver.com">네이버</option>
			<option value="http://www.google.com">구글</option>
			<option value="http://www.daum.net">다음</option>
			<input type="submit" value="이동">		
		</select>
	</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>
	<%
		response.sendRedirect(request.getParameter("url"));
	%>
</body>
</html>

 


 

▶ 예제

로그인창 만들기

아이디와 패스워드를 입력받기

아이디 : onlyPractice / 비밀번호 : 123 이 맞으면 로그인 성공 페이지 출력, 아닐 시 로그인 실패 페이지 출력

(전송방식 post)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<fieldset align="center">
		<legend>로그인</legend>
			<form action="Ex05Login.jsp" method="post">
				<input type="text" name="id" placeholder="ID를 입력하세요"> <br>
				<input type="text" name="pw" placeholder="PW를 입력하세요"> <br>
				<input type="submit" value="로그인">
			</form>
	</fieldset>
	
</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 id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		if (id.equals("onlyPractice") && pw.equals("123")) {
			response.sendRedirect("Ex05LoginSuccess.jsp?id="+id);
		} else {
			response.sendRedirect("Ex05LoginFail.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>

	<fieldset align="center">
		로그인 정보를 다시 확인하세요. <br>
		<a href="Ex05Login.html">로그인 페이지</a>
	</fieldset>
	
</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>

	<%
		request.setCharacterEncoding("UTF-8");
		String id = request.getParameter("id");
	%>
	<fieldset align="center">
		<h1><%= id %>님 환영합니다.</h1> <br>
		<a href="Ex05Login.html">로그아웃</a>
	</fieldset>
</body>
</html>

 

※ forward 방식으로 페이지 이동 및 데이터 전송

<%@ 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 id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		if (id.equals("onlyPractice") && pw.equals("123")) {
			// response.sendRedirect("Ex05LoginSuccess.jsp?id="+id);
			
			// forward 방식으로 페이지 이동 및 데이터 전송하기!! -> post 방식과 함께 쓰임
			RequestDispatcher rd = request.getRequestDispatcher("Ex05LoginSuccess.jsp");
			request.setAttribute("result", id); // k, v
			rd.forward(request, response);
		} else {
			response.sendRedirect("Ex05LoginFail.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>

	<%
		request.setCharacterEncoding("UTF-8");
	 	// String id = request.getParameter("id");
	 	
	 	// forward방식으로 보내진 데이터 꺼내오기
	 	// getAttribute()의 반환값은 Object 타입
	 	// -> 원하는 타입의  변수에 담기 위해서는 다운캐스팅 필요
	 	String id = (String) request.getAttribute("result");
	 	
	 
	%>
	<fieldset align="center">
		<h1><%= id %>님 환영합니다.</h1> <br>
		<a href="Ex05Login.html">로그아웃</a>
	</fieldset>
</body>
</html>

댓글