9번째!! – JSP 본격적으로 살펴보기 –1
JSP 태그의 개념이해, 동작원리, 내부객체에 대해 알아보겠다.
--------------------------------------------------------
JSP 태그의 개념이해
-> Servlet은 JAVA언어를 이용하여 문서를 작성하고, 출력객체를 이용하여 HTMl코드를 삽입하였다. JSP는 Servlet과 반대로 HTML 코드에 JAVA언어를 삽입하여 동적 문서를 만들 수 있다., HTML코드안에 JAVA코드를 삽입하기 위해서는 태그를 이용해야 하며, 이러한 태그를 공부해야 한다.
--------------------------------------------------------
JSP태그의 종류
지시자 : <%@ %> : 페이지 속성
주석 : <%-- --%>, HTMl주석은 <!-- -->이거이다.
선언 : <%! %> : 변수, 메소드 선언
표현식 : <%= %> : 결과값 출력
스크립트릿 : <% %> : JAVA 코드
액션태그 : <jsp:action> </jsp:action> : 자바빈 연결
--------------------------------------------------------
서블릿은 Controller
JSP는 VIEW
HTML 주석 : 브라우저에서도 보여지고 소스보기하면 주석처리된부분이 다보인다.
JSP 주석 : 웹서버에서실행되므로 나중에 브라우저에서 소스보기 하면 없다. 서버에서 주석처리가 되었고 응답은 html로되었기 때문이다.
서블릿은 자바코드라는것! 그리고 html출력하고싶으면 print.write써서 사용
JSP는 기본바탕이 html문서이고 자바코드 넣기위해 스크립트릿을 써서 사용한다.
--------------------------------------------------------
JSP 동작원리
-> 클라이언트가 웹브라우저로 helloWorld.jsp를 요청하게 되면 JSP 컨테이너가 JSP파일을 Servlet파일(.java)로 변환한다. 그리고 Servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 클라이언트한테 html파일 형태로 응답 된다.
--------------------------------------------------------
여기에서 본다면 helloWorld가 있고 이 소스는
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>HelloWorld~~~~~~~</h1>
</body>
</html>
--------------------------------------------------------
이거인데 이걸 실행해보면 HelloWorld가 나오고
그 후 우측버튼 소스보기를 눌러본다면
이렇게 위에 지시어가 빠지고 출력이 되는걸 볼 수 있다.
이건 실제 웹브라우저에서 실행된게 아니라 웹서버에서 실행된 것이므로 실제론 볼수 없게된다.
JSP를 클라이언트가 request한다. 그럼 이요청에 대해서 servlet이 있는지없는지 판단을 한다.
만약 없다면 servlet.java,.class를 만들어 객체를 만든다. 그 후 메모리에 올린다. 그후 실행이 된다.
--------------------------------------------------------
JSP 내부 객체
-> 개발자가 객체를 생성하지 않고 바로 사용할 수 있는 객체가 내부객체이다.
JSP에서 제공되는 내부객체는 JSP컨테이너에 의해 Servlet으로 변화될 때 자동으로 객체가 생성된다.
--------------------------------------------------------
내부 객체 종류
입출력 객체 : request, response, out
서블릿 객체 : page, config
세션 객체 : session
예외 객체 : exception
->이런 것 들은 쓰기만 하면 된다.
--------------------------------------------------------
10번째!!!! – JSP본격적으로 살펴보기 2
스크립트릿, 선언, 표현식, 지시자, 주석에 대해 보겠다.
스크립(scripe)는 스크립트릿, 선언, 표현식을 합친 말이다.
--------------------------------------------------------
스크립트릿(scriptlet) : <% java 코드 기술 %>
- JSP 페이지에서 JAVA 언어를 사용하기 위한 요소 중 가장 많이 사용되는 요소입니다.
<%@ 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 i=0;
while(true){
i++;
out.println("2*"+i+"="+(2*i)+"<br/>");
%>
======<br/>
<%
if(i>=9) break;
}
%>
</body>
</html>
이런식으로 <% %>안에 자바 코드를 써서 출력 시킬 수 있다.
--------------------------------------------------------
선언(declaration) : <%! java 코드 기술 %>
-> 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 i=10;
String str="ABCDE";
%>
<%!
public int sum(int a,int b){
return a+b;
}
%>
<%
out.println("i="+i+"<br/>");
out.println("str="+str+"<br/>");
out.println("sum="+sum(1,5)+"<br/>");
%>
</body>
</html>
--------------------------------------------------------
여기서 보자면 변수 및 athem를 선언할 때 사용할려고 <%!이거를 썼고 그후에 마지막에는 선언이아닌 java언어를 사용하는거라 그냥 <%를 썼다.!!
--------------------------------------------------------
표현식(expression) : <%= java 코드 기술 %>
-> JSP 페이지 내에서 사용되는 변수의 값 또는 메소드 호출 결과값을 출력하기 위해 사용됩니다. 결과값은 String 타입이며, ‘;’을 사용할 수 없습니다.
<%@ 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 i=10;
String str="abc";
private int sum(int a, int b){
return a+b;
}
%>
<%=i %><br/>
<%=str %><br/>
<%=sum(1,5) %>
</body>
</html>
--------------------------------------------------------
선언은 <%!이걸로 선언하고 표현식에서 쓸때는 ;을 안쓰기 위해 일반적 자바 코드만 썼다.
--------------------------------------------------------
지시자
-> JSP 페이지의 전체적인 속성을 지정할 때 사용한다.
-> page, include, taglib 가 있으며, <%@ 속성 %> 형태로 사용 됩니다.
page : 해당 페이지의 전체적인 속성 지정
include : 별도의 페이지를 현재 페이지에 삽입
taglib : 태그라이브러리의 태그 사용
--------------------------------------------------------
page 지시자
-> 페이지의 속성을 지정할 때 주로 사용합니다. 주로 사용되는 언어 지정 및 import 문을 많이 사용 합니다.
<%@page import="java.util.Arrays" %>
<%@ 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 []arr={10,20,30};
out.println(Arrays.toString(arr));
%>
</body>
</html>
배열리스트를 쓰겠다고 import를 지시어에다가 한 것이다. 선언하고 쓸 것이기 때문에 <%이거 하나로 했다.
--------------------------------------------------------
include 지시자
-> 현재 페이지내에 다른 페이지를 삽입할 때 사용된다. file 속성을 이용한다.
<%@ 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>
<h2> include.jsp 페이지 입니다.</h2><br/>
<%@ include file="pagge.jsp" %>
<h3>다시 include.jsp페이지입니다.</h3>
</body>
</html>
--------------------------------------------------------
주석
HTML 주석
ex)
<!- comments -->로 기술, 테스트 용도 및 프로그램 설명 용도로 사용 합니다.
JSP 주석
ex)
<%-- comments -->로 기술하며, HTML 주석과 마찬가지로 테스트 용도 및 프로그램 설명 용도로 사용합니다.
--------------------------------------------------------
11번째!! – JSP 본격적으로 살펴보기
request 객체의 이해
-> 웹브라우저를 통해 서버에 어떤 정보를 요청하는 것을 request라고 한다.
-> 그리고 이러한 요청 정보는 request 객체가 관리한다.
Request객체 관련 메소드
getContextPath() : 웹어플리케이션의 컨텍스트 패스를 얻습니다.
getMethod() : get방식과 post방식을 구분할 수 있습니다.
getSession() : 세션 객체를 얻습니다.
getProtocol() : 해당 프로토콜을 얻습니다.
getRequestURL() : 요청 URL를 얻습니다.
getRequestURI() : 요청 URI를 얻습니다.
getQueryString() : 쿼리스트링을 얻습니다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
out.println("서버 : " + request.getServerName() + "<br />");
out.println("포트 번호 : " + request.getServerPort() + "<br />");
out.println("요청 방식 : " + request.getMethod() + "<br />");
out.println("프로토콜 : " + request.getProtocol() + "<br />");
out.println("URL : " + request.getRequestURL() + "<br />");
out.println("URI : " + request.getRequestURI() + "<br />");
%>
</body>
</html>
--------------------------------------------------------
Parameter 메소드
-> 요청관련 메소드 보다 실제 많이 쓰이는 메소드는 parameter와 관련된 메소드들 이다.
-> JSP 페이지를 제작하는 목적이 데이터 값을 전송하기 위해서이므로, parameter 관련 메소드들은 중요하다.
getParameter(String name) : name에 해당하는 파라미터 값을 구함.
getParameterNames() : 모든 파라미터 이름을 구함.
getParameterValues(String name) : name에 해당하는 파라미터값들을 구함.
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="requestparam.jsp" method="post">
이름 : <input type="text" name="name" size="10"><br/>
아이디 : <input type="text" name="id" size="10"><br/>
비밀번호 : <input type="password" name="pw" size="10"><br/>
취미 : <input type="checkbox" name="hobby" value="read">독서
<input type="checkbox" name="hobby" value="cook">요리
<input type="checkbox" name="hobby" value="run">조깅
<input type="checkbox" name="hobby" value="swim">수영
<input type="checkbox" name="hobby" value="sleep">취침<br/>
전공 : <input type="radio" name="major" value="kor">국어
<input type="radio" name="major" value="eng" checked="checked">영어
<input type="radio" name="major" value="mat" >수학
<input type="radio" name="major" value="des" >디자인<br/>
<select name="protocol">
<option value="http">http</option>
<option value="ftp" selected="selected">ftp</option>
<option value="smtp">smtp</option>
<option value="pop">pop</option>
</select><br/>
<input type="submit" value="전송">
<input type="reset" value="초기화">
</form>
</body>
</html>
--------------------------------------------------------
<%@page import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
String name, id, pw, major, protocol;
String[] hobbys;
%>
<%
request.setCharacterEncoding("EUC-KR");
name = request.getParameter("name");
id = request.getParameter("id");
pw = request.getParameter("pw");
major = request.getParameter("major");
protocol = request.getParameter("protocol");
hobbys = request.getParameterValues("hobby");
%>
이름 : <%= name %><br />
아이디 : <%= id %><br />
비밀번호 : <%= pw %><br />
취미 : <%= Arrays.toString(hobbys) %><br />
전공 : <%= major %><br />
프로토콜 : <%= protocol %><br />
</body>
</html>
--------------------------------------------------------
처음에 form.html이부분에서
실행을 시키면 이렇게 되고 이부분에서 전송을 누르면
이렇게 뜬다.
이때 볼 것은 form action을 줘서 requestparam.jsp로 넘어가게 하였고 값을 입력하고 submit를 할 경우 전송이 되도록 하였다.
그럼 그후 requestparam.jsp로 가면 변수 지정을 할 때 <%!을 줘서 주었고
그 후 <%를 넣어서 자바 코드를 삽입 하였다.
자바 코드에선 name,id,pw 등을 다 request를 써서 받아오게끔 하였고 그후 그것들을 출력하였다.
--------------------------------------------------------
response 객체의 이해
-> 웹브라우저의 요청에 응답하는 것을 response라고 하며, 이러한 응답(response)의 정보를 가지고 있는 객체를 response객체 라고 한다.
웹브라우저(클라이언트)에서 서버로 보낼땐 request이고 이것의 예로는
name = request.getParameter("name");
id = request.getParameter("id");
pw = request.getParameter("pw");
major = request.getParameter("major");
protocol = request.getParameter("protocol");
이런 종류의 예가 있겠다.
그 후 서버에서 웹브라우저(클라이언트)로 보내는 것은 Response이고 이것의 예로는
response.get___이거나
response.set___이거일 것이다.
--------------------------------------------------------
Request 객체 관련 메소드
getCharacterEncoding() : 응답할때 문자의 인코딩 형태를 구합니다.
addCookie(Cookie) : 쿠키를 지정 합니다.
sendRedirect(URL) : 지정한 URL로 이동합니다.
requestex.html -> request_send.jsp에서 다른 jsp인 pass.jsp로 보낸다하면 sendRedirect()를 쓰면된다.
아래 예시에선 request_send.jsp에서 다른 jsp인 pass.jsp , ng.jsp로 보낼 것이다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
int age;
%>
<%
String str = request.getParameter("age");
age = Integer.parseInt(str);
if( age >= 20){
response.sendRedirect("pass.jsp?age=" + age);
} else {
response.sendRedirect("ng.jsp?age=" + age);
}
%>
<%= age %>
</body>
</html>
--------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
int age;
%>
<%
String str = request.getParameter("age");
age = Integer.parseInt(str);
%>
성인 입니다. 주류구매가 가능 합니다.
<a href="requestex.html">처음으로 이동</a>
</body>
</html>
--------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
int age;
%>
<%
String str = request.getParameter("age");
age = Integer.parseInt(str);
%>
미성년자 입니다. 주류구매가 불가능 합니다.
<a href="requestex.html">처음으로 이동</a>
</body>
</html>
--------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="request_send.jsp">
당신의 나이는 : <input type="text" name="age" size="5">
<input type="submit" value="전송">
</form>
</body>
</html>
--------------------------------------------------------
12번째!! 액션태그
-> forward, include, param 태그 살펴보기
forward
-> 현재의 페이지에서 다른 특정페이지로 전환할 때 사용한다.
ex)
<h1> main.jsp 페이지입니다. </h1>
<jsp:forward page=“sub.jsp” />
<h5> sub.jsp 페이지입니다. </h5>
ex)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>main.jsp 페이지 입니다.</h1>
<jsp:forward page="sub.jsp" />
</body>
</html>
ex)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h5>sub.jsp 페이지 입니다.</h5>
</body>
</html>
현재 main.jsp을 실행했는데 결과는 sub.jsp라고 뜨는걸 볼 수 있다
이 이유는 main.jsp 페이지입니다. 라는문구를 출력후 바로 sub.jsp로 넘어갔기 때문이다.
URL은 변하지 않고 페이지만 바뀌어질 뿐이다.
--------------------------------------------------------
include
-> 현재 페이지에 다른 페이지를 삽입할 때 사용 합니다.
<h1> include01.jsp 페이지입니다. </h1>
<jsp:include page=“include02.jsp” flush=“true” />
<h1> 다시 include01.jsp 페이지입니다. </h1>
ex)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1> include01.jsp 페이지 입니다. </h1>
<jsp:include page="include02.jsp" flush="true" />
<h1> 다시 include01.jsp 페이지 입니다. </h1>
</body>
</html>
ex)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1> include02.jsp 페이지 입니다. </h1>
</body>
</html>
include01.jsp 화면을 출력 후 지금은 include 태그를 쓰는거니 include02.jsp로 갔다가 다시 되돌아온다.
--------------------------------------------------------
param
-> forward 및 include 태그에 데이터 전달을 목적으로 사용되는 태그이다. 이름과 값으로 이루어져 있다.
<jsp:forward page=“forward_param.jsp”>
<jsp:param name=“id” value=“abcdef” />
<jsp:param name=“pw” value=“1234” />
</jsp:forward>
ex)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="forward_param.jsp">
<jsp:param name="id" value="abcdef" />
<jsp:param name="pw" value="1234" />
</jsp:forward>
</body>
</html>
ex)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
String id, pw;
%>
<%
id = request.getParameter("id");
pw = request.getParameter("pw");
%>
<h1>forward_param.jsp 입니다.</h1>
아이디 : <%= id %><br />
비밀번호 : <%= pw %>
</body>
</html>
이거일 경우엔 forward_param.jsp입니다 라고 출력후 값들을 다 따로따로 갖고오는 것이다.
--------------------------------------------------------
'IT일반과목 > JSP' 카테고리의 다른 글
20180902 집공부12 (프로젝트) (0) | 2018.09.02 |
---|---|
20180831 집공부11 (0) | 2018.08.31 |
20180829 집공부9 (0) | 2018.08.29 |
20180827 집공부7 문제풀기 (0) | 2018.08.27 |
20180826 집공부6 <액션,객체,리다이렉트> (0) | 2018.08.26 |