[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 예외 처리 페이지

페이지가 없거나 오류 발생시 브라우저에 출력할 페이지

페이지 마다 에러 페이지 매핑하기

  1. 예외 처리 페이지 사전에 생성.

  2. 예외 처리 페이지의 디렉티브 태그 속성 isErrorPage 를 true로.

  3. 일반 페이지의 디렉티브 태그 속성 errorPage 를 예외처리 페이지 파일 명으로.

전체에 대해 에러 코드에 따라 에러 페이지 매핑하기

web.xml의 error-page 태그에 코드명과 예외처리 페이지 파일명 지정.

에러코드 404일시 err_404.jsp로 처리.

404 : 요청한 JSP 페이지가 없을 때
500 : 컨테이너에서 JSP 페이지 처리 중 오류 발생


Welcome 페이지

컨텍스트 이름만 입력시 요청되어 브라우저에 출력되는 페이지 설정.

web.xml에 welcome-file-list 태그로 추가.
위에부터 찾아서 요청됨.

좋은 웹페이지 즐겨찾기