반응형
반응형
<%@ 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>
<H2>forward , sendRedirect 테스트</H2>
<HR>
<form method = post action = "forward_action2.jsp">
	forward action : <input type = text name = username>
	<input type = submit value = "확인"> <!-- URL이 forward_action을 가르킨다 -->
</form>

<form method = post action = "response_sendRedirect.jsp">
	response.sendRedirect : <input type = text name = username>
	<input type = submit value = "확인"> <!-- URL이 control_end를 가르킨다 -->
</form>
</body>
</html>

에는 맨 처음 페이지 화면입니다.

 

 

 

 

<% response.sendRedirect("page_control_end.jsp"); %>

<%//	request.setCharacterEncoding("utf-8"); // post방식을 사용할때 utf-8 캐릭터셋 맞춰주기 + 한글 쓸 경우 사용 %>
<%@ 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>
<H2>forward action 및 sendRedirect() 결과</H2>
<HR>
이름 : <%= request.getParameter("username") %> <BR> 
<%-- null값 왜냐하면 control에 요청 Redirect에서 control_end를 요청해라 지시 다시 
클라이언트가 control_end 요청 즉 username은 비어있음 --%>
<%-- forward로 한 경우 control username값하고 forword에 tel도 같이 넘어옴 --%>
전화번호 : <%= request.getParameter("tel") %>	
</body>
</html>

sendRedirect에 대해서 알아보도록 하겠습니다.

sendRedirect페이지를 요청하는 것입니다.

 

<form method = post action = "response_sendRedirect.jsp"> 

첫 페이지에서 SendRedirect 부분에 검색해서 전송을 누르면 response_sendRedirect.jsp(a.jsp)로 이동해

<% response.sendRedirect("page_control_end.jsp"); %> 을 통해 page_control_end.jsp(b.jsp)로 연결합니다.

 

좀 다른 점이 있는데 page_control_end.jsp(b.jsp)바로 넘어가는게 아니라 다시 클라이언트에게 

page_control_end.jsp(b.jsp)열어달라고 명령을 하는 겁니다.

 

<input type = text name = username>

그 과정에서 저장되어있는 username값이 사라지게 되어서 null값이 출력되는 것입니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("utf-8"); %>

<jsp:forward page="page_control_end.jsp">
	<jsp:param name = "tel" value = "000-000-0000"/> 
</jsp:forward>

<%-- param태그는 추가적으로 전달하고 싶은 태그 --%>
<%-- page 저기로 이동시키면서 name 하고 value를 같이 보냄 --%>
<%@ 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>
<H2>forward action 및 sendRedirect() 결과</H2>
<HR>
이름 : <%= request.getParameter("username") %> <BR> 
<%-- null값 왜냐하면 control에 요청 Redirect에서 control_end를 요청해라 지시 다시 
클라이언트가 control_end 요청 즉 username은 비어있음 --%>
<%-- forward로 한 경우 control username값하고 forword에 tel도 같이 넘어옴 --%>
전화번호 : <%= request.getParameter("tel") %>	
</body>
</html>

forward 방식을 통해 페이지 이동을 시킬 시에 sendRedirect처럼하지 않고 바로 페이지로 이동값이 남게 됩니다.

 

<jsp:forward page="page_control_end.jsp">
	<jsp:param name = "tel" value = "000-000-0000"/> 
</jsp:forward>

<jsp:forward page = "이동할 페이지"> 이걸로 페이지를 이동할 수 있습니다.

<jsp:param 속성 = 값 ....>을 이용해 default값을 설정할 수 있습니다. 저는 aa라고 치고 넘겼기 때문에

이름 : tel 이 아니라 aa가 나왔지만 전화번호 같은 경우 입력 안 했기 때문에 param에 입력한 게 나오게 됩니다.

반응형
반응형
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
	table td {border : 1px solid black; padding : 5px}
</style>
<title>Insert title here</title>
</head>
<body>
	<div>
		<H2> request 테스트 폼</H2>
		<HR>
		<form name = form1 method = post action = "request_result.jsp">
			<table>
				<tr>
					<td>이름</td>
					<td><input type = text size = 10 name = username></td>
				</tr>
				<tr>
					<td>직업</td>
					<td>
					<select name = job>
						<option selected> 무직</option>
						<option>회사원</option>
						<option>전문직</option>
					</select>
					</td>
				</tr>
				<tr>
					<td> 지역  </td>
				  	<td> 
				  		<input type = "radio" name ="local" value = "서울"> 서울
				  		<input type = "radio" name ="local" value = "인천"> 인천 <br> 
				  	</td>
				</tr>
				<tr>
					<td>관심분야</td>
					<td>
						<input type =checkbox name = favorite value ="정치">정치
						<input type =checkbox name = favorite value ="사회">사회
						<input type =checkbox name = favorite value ="정보통신">정보통신
					</td>
				</tr>
				<tr>
					<td colspan = 2 >
						<input type = submit value = "확인"><input type = reset value = "취소">
					</td>
				</tr>
			</table>
		</form>
	</div>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %> 
<%-- 내장 객체(특별한 상황에 쓰이는)이기 때문에 객체 생성 없이 그냥 메소드 사용 가능 --%>
<%-- request된 것들이 한글이라면 받을 때 문제가 안 생기도록 utf-8로 설정 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align = "center">
	<H2>request 테스트 결과 - 1</H2>
	<HR>
	
	<table border = 1 cellspacing ="1" cellpadding = "5">
		<tr>
			<td>이름</td>
			<td><%=request.getParameter("username") %>
		</tr>
		<tr>
			<td>직업</td>
			<td><%= request.getParameter("job") %></td>
		</tr>
		<tr>
			<td>지역</td>
			<td>
			<%
				String temp[] = request.getParameterValues("local");
				out.println(temp[0]);
			%></td>
		</tr>
		<tr>
			<td>관심분야</td>
			<td>
				<%
					String favorites[] = request.getParameterValues("favorite");
					//getParameterValues 문자열을 반환
				
					for (int i = 0 ; i < favorites.length; i++){
						out.println(favorites[i]+"<BR>");
					}
				%>
			</td>
		</tr>
	</table>
	<HR>
	<H2> request 테스트 결과 - 2 </H2>
	<table border = 0 >
		<tr> 
			<td>
				1. 클라이언트 IP 주소 : <%= request.getRemoteAddr() %> <BR> <%-- IP주소 --%>
				2. 요청 메서드 : <%= request.getMethod() %> <BR> <%-- 어떤 방식으로 보내는지 Post get --%>
				<% Cookie cookie[] = request.getCookies(); %>
				3. <%= cookie[0].getName() %>에 설정된 쿠키값 : <%= cookie[0].getValue() %><BR>
				4. 프로토콜 : <%= request.getProtocol() %>
			</td>
		</tr>
	</table>
</div>
</body>
</html>

<form name = form1 method = post action = "request_result.jsp">
... <input type = submit value = "확인">

 

form 태그와 input태그 type이 submit을 이용해 form태그 안에 정보를 보낼 수 있습니다.

form 태그에 methodpost방식으로 보낼지 get방식으로 보낼지 정할 수 있습니다. 

post방식과 get방식은 따로 포스팅 했습니다.

action은 어디 페이지로 연결할지에 대해서 적는 것입니다.

확인 버튼을 누르면 request_result.jsp페이지로 정보와 같이 넘어가게 되는 것이죠

 

주의할 게 있는데 post방식으로 보냈을 때 넘어가는 페이지에 이러한 걸 적어야합니다.

<% request.setCharacterEncoding("UTF-8"); %> 

그래야 한글이 깨지지 않고 넘어갑니다.

 

그러면 어떤게 어떤 정보인지 어떻게 알 수 있을까요?

그건 name을 통해 구분이 가능합니다.

<input type = text size = 10 name = username>

여기에서 보면 text를 적는 곳에는 username이라는 곳에 값이 저장되어 넘어간다고 생각하면 됩니다.

 

request.getParameter("name명")

그러면 action에 연결된 페이지에서 request.getParameter("username") 이런식으로 받을 수 있습니다.

 

<input type = "radio" name ="local" value = "서울"> 서울
<input type = "radio" name ="local" value = "인천"> 인천 <br>

라디오버튼에 문제가 생기는데 어떤 라디오버튼이 눌렸는지 알아야 request.getParameter로 가져올 수 있는데

어떤 버튼을 누를지는 선택이니까 이 같은 경우는 name을 똑같이 정하고 value라는 걸 설정

local에 "서울" 이라는 값 또는 "인천"이라는 값이 들어간 겁니다.

 

<input type =checkbox name = favorite value ="정치">정치
<input type =checkbox name = favorite value ="사회">사회
<input type =checkbox name = favorite value ="정보통신">정보통신

체크박스의 경우는 여러개의 값이 들어갈 수 있습니다.

그래서 name이 같은 경우는 배열로 값이 들어가게 되는 것이죠

 

<%
	String favorites[] = request.getParameterValues("favorite");
	//getParameterValues 문자열을 반환
				
	for (int i = 0 ; i < favorites.length; i++){
		out.println(favorites[i]+"<BR>");
    }
 %>

getParameterValues("name명")

이용해 배열로 받고 출력할 때는 인덱스로 접근해서 출력하면 됩니다.

 

반응형
반응형
<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="8kb" autoFlush="false" %>
<%-- 8kb 가 default 값 , autoFlush가 false면 다 꽉차면 에러가 난다 default 값은 True
out 객체는 일단 버퍼에 저장후에 출력된다.
--%>
<html>
<head><title>버퍼 정보</title></head>
<body>

버퍼 크기: <%= out.getBufferSize() %> <br>
남은 크기: <%= out.getRemaining() %> <br>
auto flush: <%= out.isAutoFlush() %> <br>

</body>
</html>

JSP페이지는 결과를 곧바로 웹 브라우저에 전송하지 않고, 출력 버퍼에 임시로 출력 결과를 저장했다가

한번에 웹브라우저에 전송합니다.

 

그에 따른 여러 장점이 있습니다. 그 중 하나가 성능이 향상되는데,

그 이유는 한번에 큰 단위로 데이터를 전송하는 것이 가능하기 때문에

네트워크를 비롯한 모든 데이터 교환에서는 작은 단위를 여러 차례 보내는 것보다

큰단위로 한번에 묶어서 보내는 것이 더 높은 성능을 내기 때문입니다.

 

지시문으로 Buffer를 설정할 수 있는데요

<%@ page buffer="8kb" autoFlush="false" %>

 

page지시어의 속성 buffer로 크기를 설정할 수 있고 defualt는 8kb입니다.

autoFlush로 그 만큼 차게 되면 자동으로 출력하면서 내보내줄 수 있습니다.

 

하지만 위에는 JSP 페이지의 결과를 한 번에 출력할 수 있다고 이야기 했는데 왜 이런짓을 하나요?

만약 웹툰을 본다고 하면 웹툰 전체페이지가 다 전송될 때까지 기다렸다가 볼 수 있으면 그 시간동안 기다려야해요

근데 실질적으로 한번에가 아니라 순차적으로 보여지면서 계속 업로드되면서 우리는 앞에 있는 만화장면을 보잖아요

또한 영상도 한번에 다 전송시킬때까지 기다리는게 아니라 보면서 전송되는 형식이잖아요

이게 버퍼를 채우면 그걸 웹브라우저에 보이게 하는 겁니다.

 

out.getBufferSize()

버퍼의 크기가 얼마인지

 

out.getRemaining()

버퍼의 얼마나 찼는지 알 수 있습니다.

 

out.isAutoFlush()

자동적으로 비워주는지 알 수 있습니다.

<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="1kb" autoFlush="false" %>
<html>
<head><title>autoFlush 속성값 false 예제</title></head>
<body>

<%  for (int i = 0 ; i < 1000 ; i++) {   %>
1234
<%  }  %>

</body>
</html>

​만약 buffer가 꽉찼는데 자동적으로 안 비워주게 되면 버퍼 오버플로우라는 오류가 나옵니다.

 

<%@ page contentType = "text/html; charset=UTF-8" %>
<%@ page buffer="1kb" autoFlush="True" %>
<html>
<head><title>autoFlush 속성값 true 예제</title></head>
<body>

<%  for (int i = 0 ; i < 1000 ; i++) {   %>
1234
<%  }  %>

</body>
</html>

 

반응형
반응형
<%@ page contentType = "text/html; charset=UTF-8" %>
<html>
<head><title>out 객체</title></head>
<body>

<% 
String gradeStringA=" 10보다 크다";
String gradeStringB=" 5보다 크다";
int grade=7;

   if(grade>10) { %>
        <%= gradeStringA %>
<%}else if (grade>5)  { %>
        <%= gradeStringB %>
<% } %>


<%
     if(grade>10) {  
        out.println(gradeStringA);
     } else if (grade>5)  {
        out.println(gradeStringB);
     }
%>

</body>
</html>

 <%= gradeStringB %>

 out.println(gradeStringB);

 

<%= %> 표현식을 이용해 출력도 가능하고

out.println을 통해 출력도 가능합니다.

반응형
반응형
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import = "java.util.*" %> 
    <%-- <%@ %> : 디렉티브[지시문] JSP 속성 지정 , page : 지시어 language ,contentType : 속성 --%>
	<%-- page : 환경설정 , language : java용어로 해석 , contentType 클라이언트에게 줄 파일의 종류 선언 --%>
	<%-- java.util 다 가져오기 [java.util. 생략가능] --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
안녕하세요. <br>
<!-- html 주석 : 이것만 소스보기에서 나옴-->
<%-- JSP주석 --%>
<% 
	// 스크립트릿 주석내에 주석 /* */
	String bookTitle = "JSP 기초";
	String author = "김동양";
	Date da = new Date();
	out.println("<h5>" + bookTitle + "</h5>");
	// 내장객체 = 기본객체 이미 만들어져 있는 객체 : out
%> <%-- <% : 스크립트릿 자바문 선언 --%>
<%! String dddd = "난 선언부"; %>
<%-- <%! : 선언문 변수 선언은 : 필드(전역) : dddd, 스크립트릿에서 변수 선언은 : 지역변수 : bookTitle --%>
<h5> <%= bookTitle %></h5>
<%-- <%= : 표현식 [변수나 메소드 호출] --%>
저자는 (<%= author %>)입니다.
현재 날짜와 시간은 : <%= da %>
</body>
</html>

JSP 스크립트에 대해서 알아보도록 합시다.

 

📝1. 지시사(Directive) 태그

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import = "java.util.*" %> 

 

<%@ .... %> 이걸 지시사 태그라고 합니다. 환경설정같은 역할을 해줍니다. 

 

일반적인 구조는 <%@ 지시어 속성 = .... %> 이런식입니다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import = "java.util.*" %> 

 

이번에는 page지시사의 속성들을 알아보도록 하겠습니다.

language 속성 : 스크립트릿 언어를 지정하는 속성입니다. 자바라는 언어를 쓰겠다는 말입니다.

contentType 속성 : 어떤 형식의 문서를 만들지 입니다. 여기선 html

charset 속성 : JSP파일이 어떤 형식으로 인코딩 할 지입니다.

pageEncoding 속성 : 서버가 어떤 형식으로 인코딩해서 웹브라우저로 전송할지

import 속성 : 라이브러리import할 때 사용합니다.

 

📝2. 표현식(Expreesion)태그

 

<%= bookTitle %>

 

<%= ... %> 이걸 표현식 태그라고 합니다. 출력하는 역할을 합니다.

 

일반적으로 <%= 출력할 것(변수 or 메소드) %> 구조입니다.

<%= bookTitle %>

 

📝3. 선언자(Declration)태그

 

<%! String dddd = "난 선언부"; %>

 

<%! ... %> 이걸 선언자 태그라고 합니다. 변수를 선언하는 역할을 합니다.

일반적인 구조는 <%! 선언할 내용 %> 입니다.

<%! String dddd = "난 선언부"; %>

 

📝4. 스크립트릿(Scriptlet)태그

<% 
	// 스크립트릿 주석내에 주석 /* */
	String bookTitle = "JSP 기초";
	String author = "김동양";
	Date da = new Date();
	out.println("<h5>" + bookTitle + "</h5>");
	// 내장객체 = 기본객체 이미 만들어져 있는 객체 : out
%>

일반적으로 <% 자바코드 %> 구조입니다.

 

여기에서도 bookTitle선언했는데 굳이 선언자를 쓸 필요가 있나요 이렇게 생각 하실 수 있는데

선언문에서 선언하면 전역변수가 되는 것이고 스크립트릿에서 선언하면 지역변수가 되는 차이점이 있습니다.

 

📝5. 주석태그

 

html 주석 : <!-- 주석내용 -->

JSP 주석 : <%-- 주석내용 -->

스크립트릿, 선언자태그 주석 : // 주석 내용 , /* 주석 내용 */ 

 

반응형