230217 JSP

kangjuju·2023년 2월 17일
0

Acorn2

목록 보기
7/8

CGI

JavaServer Pages 의 약자이며

HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.

JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고

그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.

이전에 만들었던 쇼핑 Servlet을 보면, 모든 java코드가 노출되어있다.
JSP는 이를 숨긴다. JSP관련 내장 객체 9개를 알아보자

  1. 클라이언트가 어떤 동작을 함으로써 hello.jsp 를 요청하였다.

  2. JSP 컨테이너가 JSP 파일을 읽는다.

  3. JSP 컨테이너가 Generete (변환) 작업을 통해 Servlet ( .java ) 파일을 생성한다.

  4. .java 파일은 다시 .class 파일로 컴파일된다.

  5. Execute (실행) 을통해 HTML 파일을 생성하여 JSP 컨테이너 에게 전달한다.

  6. JSP 는 HTTP 프로토콜을 통해 HTML 페이지를 클라이언트 에게 전달한다.


내장객체1 : .out

out 객체는 JSP 페이지가 생성한 결과를 웹 브라우저에 전송해 주는 출력 스트림이며, JSP 페이지가 웹 브라우저에게 보내는 모든 정보는 out 객체를 통해서 전송된다.


Scriptlet

<% %> JAVA 코드 삽입

<body>
<h1>JSP 출발</h1>
<%
String irum = "홍길동";
//out : 출력용 내장객체
out.print(irum+"의 홈페이지입니다");
for(int i =1; i<7; i++){
	out.print("<h" + i + ">");
	out.print("제목글자 만들기");
	out.print("</h" + i + ">");
}
%>
<hr>
</body>

<%= %> JAVA 코드한줄 출력

주의

  • 기본 Scriptlet<%%>사용시엔 세미콜론은 사용해야하고,
    출력용 Scriptlet<%= %>사용시엔 세미콜론은 쓰지않고 출력에 해당되는 구문만 작성해야한다.
  • 절차적으로 선언후 사용해야 하므로 두 구문의 순서가 바뀌면 error가 일어난다. 선언되지않은 변수를 사용하려 했기 때문
<% String junhwa = "111-1111"; %>
<%= irum + "님의 전화번호는"+ junhwa %>
  • 하지만 <%! %> 클래스 멤버 선언을 사용하면 가능해진다.

출력용<%= %> + 멤버선언용 <%! %>

<%!
public int addData(int m, int n){
	return m+n;
}
%>
<%= addData(20,20) %>

<%@ %>지시자. 페이지 속성 지정

<%@
page language="java" 
contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8" 
import="java.util.Date" 
import="java.sql.*"
session="true" 
buffer="16kb"
autoFlush="true"
isThreadSafe="true"
info="jsp문서정보 기술"
%>
<body>
페이지 지시어는 문서 상단에 기술<br>
<%
LocalDate now = LocalDate.now(ZoneId.of("Asia/Seoul"));
int year = now.getYear();
out.println("올해는 " + year+"년");
%>
<br>
<%=this.getServletInfo() %>

에러 처리

페이지 오류가 발생했을때 지시자Scriptlet에서 에러페이지로 이동하도록 할 수 있다.
<%@ %> 지시자에서 errorPage="error.jsp"를 추가한다.

이제 에러가 발생하면 해당 jsp페이지로 이동하게 된다. 지시자에서 지정한 errorPage 지시자는 프로젝트 전체에 적용되지 않고 해당 jsp파일에만 적용된다.(지역적)

web.xml에서 에러 유형별 처리를 할 수도 있는데, 이는 프로젝트 전체에 적용된다.(전역적)

	<error-page>
		<error-code>404</error-code>
		<location>/err404.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/error.jsp</location>
	</error-page>
	<error-page>
		<exception-type>java.langArithmeticException</exception-type>
		<location>/errari.jsp</location>
	</error-page>

우선순위 : <error-page> < <exception-type> < 지시자 errorPage

include

jsp페이지가 많아질수록 중복되는 머리글과 바닥글이나, 내용들이 생기기 마련이다.

이럴때 효율적으로 처리하는 방법이 2가지가 있다.
여러 문서에 공통으로 사용되는 내용을 별도 파일로 작성 후 불러다 쓰는 방법.

중복될 내용을 jsp로 별도 작성 후 메인 jsp 에서 호출한다.

방법 1 : 지시자

먼저

<%@include file="jsp3top.jsp" %>
<hr>
<h1>include연습</h1>
여러 문서에 공통으로 사용되는 내용을 별도 파일로 작성 후 불러다 쓰기
<pre>
.

.
</pre>
<%@include file="jsp3bottom.jsp" %>

방법 2 : jsp action tag

<jsp:include page="jsp3action.jsp"></jsp:include>

action은 별도로 만들었던 소스의 실행결과를 지정한곳에 출력하는것.
include는 별도파일의 소스 전체를 가져와 지정한곳에서 실행한다는 차이점이 있다.

main측에서 include 값을 보낼 수도 있다.

<!-- jsp3action2 -->
<%
String msg = request.getParameter("msg"); //이곳에 받음
%>
<%="넘겨진 메세지는" + msg %>


<!-- main -->
<jsp:include page="jsp3action2.jsp">
	<jsp:param value="korea" name="msg"/>
</jsp:include>

jsp 소스 확인하기

위 jsp에서 작성했던 코드가 Servlet 화 된걸 확인할 수 있다.
servlet의 많은 자바코드를 jsp에서 포장한 것.

0개의 댓글