22.02.21 JSP 내장 객체

최고고·2022년 2월 21일
0
post-custom-banner

내장 객체 out 활용

-jsp로 만든 파일은 서블릿컨테이너를 통해 서블릿파일로 변환이 됨
-서블릿 컨테이너에서 내장객체를 확인해서 자동으로 생성해줌

  • out객체를 이용해 웹페이지에 출력해 줄 수 있다.
    웹 페이지에 정보를 출력하기 위한 객체 :
    PrintWriter out = response.getWriter();
    서블릿의 출력스트림이 jsp에서는 내장객체라 객체 생성 안하고 바로 out.print를 쓸 수 있다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<table border="1">
		<tr>
		<%
		for(int i = 1; i<=10; i++){
			out.print("<td>"+i+"</td>");
		}
		%>
		<!-- out객체 : 웹 페이지에 정보에 출력하기 위한 객체
		서블릿에서 PrintWriter 객체생성한것과 같음
		 -->
		
		</tr>
	</table>
</body>
</html>

HTML에서 클라이언트가 요청하면 받아온 값을
post방식일 때 인코딩 설정 => request.setCharacterEncoding("euc-kr");
get방식 => server.xml에서 설정 Connector URIEncoding="EUC-KR"
클라이언트에 응답할 페이지의 인코딩방식 설정:
response.setContentType("text/html; charset=euc-kr");

  • input 태그에서 checkbox같은 type은
    String[] 변수명 = request.getParameterValues("name값");
    배열형태로 담아주고, 출력해줄때는 새로운 String변수를 선언하고 누적시켜 값을 표현해준다!

  • HTML에서 데이터를 넘겨받을때 String형으로만 받을 수 있는데, 값이 정수라면 형변환해줘야됨
    int java = Integer.parseInt(request.getParameter("java"));


  • out 객체 활용 예제

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>JSP로 데이터 전송</h1>
	<!-- 데이터 전송 조건3가지 : action, name, submit + method -->
	<form action="ex08request.jsp">		
	<!-- 문자열을 가진 서블릿 찾기 때문에 jsp는 확장자 써줘야 파일로 가게됨 -->
		<input type="text" name="data">
		<input type="submit" value="전송">
		
	</form>
	
	<!-- jsp로 데이터를 전송! -->
</body>
</html>

-데이터 전송 조건3가지 : action, name, submit + method
-문자열을 가진 서블릿 찾기 때문에 jsp는 확장자 써줘야 파일로 가게됨

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<%
	String data = request.getParameter("data");
	out.print(data);
	//out 내장객체로 출력
	//서블릿의 출력스트림이 jsp에서는 내장객체라 객체생성안하고 바로out.
	
	%>
	<%= data %> 
	<!-- 표현식으로 출력 -->
\

</body>
</html>

-html에서 보낸 name값인 "data"를 받아옴 =>request.getParameter("data")
-웹페이지에 보여줄때 스크립틀릿(<% %>) 안에 out객체로 바로 보여주거나 표현식(<%= %>)로 출력해 보여줌


  • 성적확인 페이지 만들기

<!DOCTYPE html>
<html>
<head>
<style>
	tr{
		height: 40px;
		text-align: center;
	}
	table{
		margin: 0 auto;
	}
</style>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body >	
	<form action="ex09score.jsp" method="post">
		<fieldset>
			<legend>성적확인프로그램</legend>
			<table width="500">	
				<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>IOT점수</td>
					<td><input type="text" name="iot"></td>
				</tr>		
				<tr>
					<td>ANDROID점수</td>
					<td><input type="text" name="and"></td>
				</tr>		
				<tr>
					<td colspan="2"><input type="submit" value="확인하기!"></td>
				</tr>																																			
			</table>
		</fieldset>
	</form>
</body>
</html>

-fiedset요소는 하나의 그룹으로 묶은 요소들 주변으로 박스 모양의 선을 그려줌
< legend> 요소를 사용하면 < fieldset> 요소의 캡션(caption)을 정의할 수 있다.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<style>
tr {
	height: 40px;
	text-align: center;
}

table {
	margin: 0 auto;
}
</style>
<body>
	<%
	//post방식 인코딩
	request.setCharacterEncoding("euc-kr");
	//파라미터수집
	String name = request.getParameter("name");
	int java = Integer.parseInt(request.getParameter("java"));
	int web = Integer.parseInt(request.getParameter("web"));
	int iot = Integer.parseInt(request.getParameter("iot"));
	int and = Integer.parseInt(request.getParameter("and"));

	double avg = (java + web + iot + and) / 4;
	String score = "";
	if (avg >= 95) {
		score = "A+";
	} else if (avg >= 90) {
		score = "A";
	} else if (avg >= 85) {
		score = "B+";
	} else if (avg >= 80) {
		score = "B";
	} else if (avg < 80) {
		score = "F";
	}
	%>

	<fieldset>
		<legend>성적확인프로그램</legend>
		<table width="500">
			<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>IOT점수</td>
				<td><%=iot%></td>
			</tr>
			<tr>
				<td>ANDROID점수</td>
				<td><%=and%></td>
			</tr>
			<tr>
				<td>평균</td>
				<td><%=avg%></td>
			</tr>
			<tr>
				<td>학점</td>
				<td><%=score%></td>
			</tr>
		</table>
	</fieldset>
</body>
</html>
Insert title here 성적확인프로그램
이름
JAVA점수
WEB점수
IOT점수
ANDROID점수

  • 랜덤 추첨 페이지 만들기
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>선택이 어렵다면?</h1>
	<form action="ex10input.jsp" method="get">
		<fieldset>
			<legend>랜덤숫자입력</legend>
			<input type="text" name="num">
			<input type="submit" value="생성">
		</fieldset>
	</form>
</body>
</html>

-fieldset 안에 랜덤숫자 입력받아,입력한 숫자만큼의 input태그가 생성되게 하는 jsp생성시켜줌

<%@ page language="java" contentType="text/html; charset=EUC-KR"
	pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<%
	//파라미터수집
	int num = Integer.parseInt(request.getParameter("num"));
	//num을가져오기 받아온 값이 String 타입이기때문에 형변환해줌
	%>
	<form action="ex10result.jsp">			// 폼태그 값을 ex10result.jsp로 보내줌
		<fieldset>
			<legend> 랜덤당첨 작성 </legend>
			주제 : <input type="text" name="title"><br>
			<!-- 입력했던 num의 수만큼 input태그를 만들어야함 -->
			<%
			//입력한 num만큼 input태그 반복하기
			for (int i = 1; i <= num; i++) {
				out.print("아이템" + i + "<input type='text' name='item'><br>");
			}
			%>
			<input type="submit" value="랜덤 당첨 시작">
		</fieldset>
	</form>
</body>
</html>

-입력한 수만큼의 input태그가 생성되면 사용자가 input태그에 값을 입력하게됨=>값은 name값인 item에 저장

<%@page import="java.util.Random"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
	//파라미터수집 
	//주제 반복했던 input태그 가져오기
	String title = request.getParameter("title");
	String[] items = request.getParameterValues("item");
	Random rd = new Random();
	int random = rd.nextInt(items.length); 
	//입력값이  3이라면 랜덤수는 0,1,2 가나옴
%> 
	<fieldset>
		<legend>
		랜덤당첨결과
		</legend>
		<!-- 주제데이터 받아와서 출력하기 -->
		<%= title %>
		<!-- 반복했던 input태그들 중에 랜덤으로 출력하기 -->
		<%= items[random] %>
	</fieldset>
	
</body>
</html>

내장객체 response.sendRedirect 페이지 강제 이동

  1. a태그
    href="" 경로로 이동할 수는 있지만 한번 클릭이 있어야된다.
  2. sendRedirect - jsp내장객체인 response 사용
  3. forward()
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>page이동하기</h1>
	<form action="ex11redirect.jsp">
		<input type="submit" value="이동하기">
	</form>
</body>
</html>
  • 이동하기 버튼을 누르면 예제로 만들어놓은 ex11redirect.jsp로 이동하게됨
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<!-- 	<a href="http://www.naver.com">네이버 이동</a> -->
	<%
	
	response.sendRedirect("http://www.naver.com");
	//sendRedirect : 페이지 강제이동
	
	%>

</body>
</html>

  • select태그로 option선택시 해당포털사이트로 넘어가게 하기
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>원하는 페이지로 이동</h1>
	<form action="ex12moveURL.jsp" method="get">
		<select name="page">
			<option value="naver">네이버</option>
			<option value="daum">다음</option>
			<option value="google">구글</option>
		</select>
		<input type="submit" value="페이지 이동">
	</form>
</body>
</html>

-스크립틀릿에 response.sendRedirect("주소");

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<%
	//파라미터 수집 
	String homepage = request.getParameter("page");
	//각 데이터가 네이버,다음,구글이라면 맞는 페이지 이동하게
	if(homepage.equals("naver")){
		response.sendRedirect("http://www.naver.com");
	} else if(homepage.equals("daum")){
		response.sendRedirect("http://www.daum.net");
	} else {
		response.sendRedirect("http://www.google.com");
	}
	%>
</body>
</html>
post-custom-banner

0개의 댓글