본문 바로가기

IT일반과목/JSP

20180831 집공부10

9번째!! JSP 본격적으로 살펴보기 1

 

JSP 태그의 개념이해, 동작원리, 내부객체에 대해 알아보겠다.

 

--------------------------------------------------------

JSP 태그의 개념이해

-> ServletJAVA언어를 이용하여 문서를 작성하고, 출력객체를 이용하여 HTMl코드를 삽입하였다. JSPServlet과 반대로 HTML 코드에 JAVA언어를 삽입하여 동적 문서를 만들 수 있다., HTML코드안에 JAVA코드를 삽입하기 위해서는 태그를 이용해야 하며, 이러한 태그를 공부해야 한다.

 

--------------------------------------------------------

JSP태그의 종류

 

지시자 : <%@ %> : 페이지 속성

주석 : <%-- --%>, HTMl주석은 <!-- -->이거이다.

선언 : <%! %> : 변수, 메소드 선언

표현식 : <%= %> : 결과값 출력

스크립트릿 : <% %> : JAVA 코드

액션태그 : <jsp:action> </jsp:action> : 자바빈 연결

--------------------------------------------------------

서블릿은 Controller

JSPVIEW

 

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에서 다른 jsppass.jsp로 보낸다하면 sendRedirect()를 쓰면된다.

아래 예시에선 request_send.jsp에서 다른 jsppass.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