[Web] JSP란?
JSP란?
서버의 역할
1. 비즈니스 로직 처리
2. 처리결과 클라이언트 화면에 출력
이 때 화면 출력을 별도로 디자인하려고 분리한 것이 JSP
즉 JSP란 서버단에서 화면 출력을 담당.
서블릿 출력 vs JSP 출력
서블릿으로도 response.getWriter()를 활용하여 브라우저에 출력이 가능하다.
서블릿
-
Java로 주로 구성된 .Java 파일
-
out.print(str)의 문자열에 HTML, CSS, JS 내용 넣는 방식.
-
html 태그를 포함시킨 문자열을 브라우저에 전달하면 브라우저가 실시간으로 출력.
JSP
-
HTML, CSS, JS와 JSP 요소들로 구성된 .JSP 파일
-
문자열을 그대로 변환하면 되는 서블릿 출력과 달리. JSP 요소가 추가되어 브라우저가 이해하지 못함.
-
브라우저에게 전송되기 전 컨테이너에 의해 서블릿의 기능들로 변환됨.
-
JSP파일 -> JAVA파일 -> Class파일까지 변환
-
Class 파일 실행 후 컨테이너가 HTML, CSS, JS 부분만 추출하여 브라우저로 전송.
즉 JSP는 컨테이너에 의해 서블릿으로 변환 및 실행 후 브라우저로 전송된다.
JSP 구성요소
1. 디렉티브 태그
페이지 디렉티브 태그
-
JSP 파일의 시작부분에 존재하는 태그. Java 파일로 변환되었을 때의 설정을 지정.
-
import할 라이브러리, 출력 형식, 세션 사용 여부 등
ex) <%@ page contentType="text/html;charset=utf-8" import = "java.util.*" langeuage = "java" %>
인클루드 디렉티브 태그
-
다른 JSP 페이지 요청을 위한 태그.
-
공통으로 사용되는 부분(상단 navibar, 메뉴 등)의 JSP 페이지를 미리 만들어 놓고 요청하는 방식으로 사용.
-
호출된 JSP는 기존 JSP와 합쳐져 java 코드로 변환됨. (즉 java 코드는 하나만 생성)
ex) <%@ include file = "temp_image.jsp" %>
태그 사용부분에 해당 JSP 페이지가 출력됨.
2. 스크립트 요소
JSP 페이지는 java로 변환되므로 동적기능 구현가능.
이때 동적인 처리 제공하는 기능이 스크립트 요소.
<% %> 기호 안에 자바 코드로 구현.
선언문
<%! 변수 or 메서드 선언 %>
멤버 변수나 멤버 메서드 선언에 사용
ex) <%! String name = "자바"; %>
스크립트릿
<% Java코드 작성%>
자바코드 작성에 사용
ex) <% String age = request.getParameter("age"); %>
표현식
<%= 값 or Java변수 or Java식 %>
선언문이나 스크립트릿의 변수나 메서드결과 또는 자바식 출력
세미콜론 쓰지 않는 것에 유의
ex) <%= name %>, <%= Integer.parseInt(age) + 10 %>
JSP 이용 로그인 처리실습
<%--디렉티브 태그 부분--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--스크립트릿으로 인코딩 방식 및 request에 바인딩된 데이터 가져옴 --%>
<%
request.setCharacterEncoding( "utf-8" );
String user_id = request.getParameter("user_id");
String user_pw = request.getParameter("user_pw");
%>
<!DOCTYPE html>
<html>
<head>
<title>결과출력창</title>
<meta charset="UTF-8">
</head>
<body>
<%
if(user_id == null || user_id.length()==0){
// 괄호 안닫음. if 조건이 참이라면 바로 아래 html 코드 실행.
%>
아이디를 입력하세요.<br>
<a href="/pro12/login.html">로그인하기</a>
<%
}else{
if(user_id.equals("admin")){
// 관리자라면 아래 실행.
%>
<h1>관리자로 로그인 했습니다.</h1>
<form>
<input type=button value="회원정보 삭제하기" />
<input type=button value="회원정보 수정하기" />
</form>
<%
}else{
//나머지라면 아래 실행.
%>
<h1> 환영합니다. <%=user_id %> 님!!!</h1>
<%
}
}
%>
</body>
</html>
위와 같이 스크립트릿의 자바코드 if문에서 괄호를 닫지 않으면서 수행하면.
스크립트릿 사이의 HTMl에 if문이 적용된다.
JSP 내장 객체
JSP가 컨테이너에 의해 서블릿화 할때 생성되는 서블릿 변수
이름이 고정되어 생성되며, 스크립트릿(<% %>)에서 해당 객체들 사용 가능.
request / response
HttpServletRequest와 HttpServletResponse 객체.
session
HttpSession 객체
application
ServletContext 객체
out
PrintWriter out = response.getWriter() 로 생성한 출력담당 객체
사용 예
<% session.setArribute("name", "이순신"); %>
: JSP에서 스크립트릿과 내장객체 활용 세션에 바인딩 수행.
JSP 예외 처리 페이지
페이지가 없거나 오류 발생시 브라우저에 출력할 페이지
페이지 마다 에러 페이지 매핑하기
-
예외 처리 페이지 사전에 생성.
-
예외 처리 페이지의 디렉티브 태그 속성 isErrorPage 를 true로.
-
일반 페이지의 디렉티브 태그 속성 errorPage 를 예외처리 페이지 파일 명으로.
전체에 대해 에러 코드에 따라 에러 페이지 매핑하기
web.xml의 error-page 태그에 코드명과 예외처리 페이지 파일명 지정.
에러코드 404일시 err_404.jsp로 처리.
404 : 요청한 JSP 페이지가 없을 때
500 : 컨테이너에서 JSP 페이지 처리 중 오류 발생
Welcome 페이지
컨텍스트 이름만 입력시 요청되어 브라우저에 출력되는 페이지 설정.
web.xml에 welcome-file-list 태그로 추가.
위에부터 찾아서 요청됨.
Author And Source
이 문제에 관하여([Web] JSP란?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kiwonkim/Web-JSP란저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)