JSP&SERVLET

yuna·2022년 9월 18일
0

web

목록 보기
2/4
post-custom-banner

JSP&SERVLET

1. 동적 페이지, 정적 페이지

  1. 정적 페이지란 html, text와 같이 미리 저장된 정보를 보여주는 페이지로 변화가 없음
  2. 동적 페이지란 사용자에 따라서 정보를 가공하여 리턴함 ex) 날씨, 뉴스 등

2. JSP란?

  1. JSP란 동적 페이지를 생성하기 위한 프로그래밍 언어
  2. 특징
    1. 서버단에서 동적인 요소를 생성하여 순수 html과 결합해 종합적인 결과를 사용자에게 반환함
      → 사용자는 jsp 코드가 아닌 순수한 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>
            <%
               String strName = "홍길동";
            %>
            내 이름은 <%=strName%> 입니다.
            </body>
            </html>
            ```
            

3. Servlet 이해하기

  1. 서블릿은 자바 코드 안에 HTML 태그들이 포함 되어 있음
package ch03;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.WebServlet;

@WebServlet(urlPatterns = "/ch03/myServlet1")
public class MyServlet1 extends HttpServlet {

  @Override
  public void service(HttpServletRequest request, HttpServletResponse response)
  throws IOException, ServletException{
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>MyServlet1</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Fighting Korea!!!</h1>");
    out.println("</body>");
    out.println("</html>");
  }
}
  1. 즉 퍼블리싱을 수정하기 위해 디자이너가 JAVA 코드를 접근해야하고 수정사항이 생길시 새로 빌드해야함
    → 수정에 용이하지 않고 동적인 부분과 정적인 부분을 분리하기 어려움
  2. 서블릿의 특성과 JSP의 특성을 살려서 상호 보완적인 관계로 JSP는 화면 출력 부분을 맡고 서블릿은 처리부분을 맡음

4. Servlet이란?

  1. 동적인 웹 콘텐츠를 생성하는 기술로 제공
    → jsp와 동일하게 웹 페이지에서 호출을 하여 실행 결과를 순수 html로 제공함
  2. JSP 동작 구조
    1. 클라이언트(브라우저)가 도메인으로 요청
    2. 웹 서버에서 요청온 JSP 파일을 파싱
    3. JSP 파일로부터 서블릿이라는 새로운 자바파일 생성
    4. 서블릿 파일이 실행 가능한 상태인 클래스 파일로 컴파일
    5. 클라스 파일의 실행 결과가 웹서버로 넘겨져 HTML 형태로 응답 내용을 리턴
    6. 웹 서버로 받은 HTML을 브라우저(클라이언트)에서 실행
    • 이전에 요청된 적이 있으면 이미 클래스 파일로 변환되었기 때문에 5번 단계부터 실행됨

5. JSP의 스트립트

    <%@ page contentType="text/html;charset=EUC-KR"%>
    <html>
    <head><title>JSP스크립트 Example</title></head>
    <body>
      <h1>Script Example1</h1>
     <%!
     	     String declaration = "Declaration";
     %>
     <%!
     	public String decMethod(){

     	 return declaration;
     	}
     %>
     <%
     	String scriptlet = "Scriptlet";
        String comment = "Comment";

     	out.println("내장객체를 이용한 출력 : " + declaration + "<p/>");
     %>

     선언문의 출력1 : <%=declaration%><p/>
     선언문의 출력2 : <%=decMethod()%><p/>
     스크립트릿의 출력 : <%=scriptlet%><p/>
     <!--JSP주석부분-->
     <!-- JSP 주석1 :  <%=comment%> --><p/>
     <%-- JSP 주석2 : <%=comment%> --%>
     <%  /* 주석 
        (여러줄 주석)
         */  
     %> 
     <%// 주석(한줄 주석)%>
     </body>
     </html>
  1. 선언문(Declaration)
    - 뜻: jsp에서 사용될 변수나 메소드를 선언할 수 있는 영역
    - 문법: <%! ~ %>
    - 선언문에서 선언된 변수를 멤버 변수라고 부름(클래스 안에 선언된 변수)
    - 멤버 메소드, 멤버 변수로 선언됨 → 즉, 클래스 생성 시 제일 먼저 실행되어 생김
    - 일반적으로 잘 사용되지 않음
    - 멤버 변수를 사용하는 때는 클래스에서 선언된 여러 메소드에서 공통적으로 사용될 때임
    - 하지만 jsp에서 메소드를 선언하는 일은 거의 없음
    - jsp에서 선언된 메소드는 해당 jsp에서만 사용할 수 있으며 다른 jsp에서 사용할 메소드하면 java 파일을 만들어서 모든 jsp에서 참조하여 사용함
  2. 스크립트릿(Scriptlet)
    - 뜻: jsp 페이지가 서블릿으로 변환되고 요청될 때 _jspService 메소드 안에 선언이 되는 요소
    - 문법: <% ~ %>
    - 일반적으로 많이 사용되는 스크립트 요소
    - 선언문과 달리 선언된 변수는 변수로 선언이 되고 메소드 선언을 할 수 없음
    - 선언하게 된다면 메소드 안에 메소드를 선언한 것이므로 만들 수 없음
  3. 표현식
    - 문법: <%= %>
    - 표현식의 활용 — for문, 삼항 연산자

6. JSP의 지시자와 액션 태그

  1. 지시자의 종류
    1. page: JSP 컨테이너에게 해당 페이지를 어떻게 처리할 것인가에 대한 페이지 정보를 알려줌
        
속성기본값예제
info텍스트없음info=“Copyright 2013 by JspStudy.co.kr”
language스크립팅 언어“java”language=“java”
contentTypeMIME 타입, 문자집합contentType=“text/html;charset=ISO-8859-1”contentType=“text/html; charset=EUC-KR”
extends클래스 이름없음extends=“kr.co.jspstudy.board.JspPage”
import클래스/패키지 이름없음import=“java.util.Vector” import=“java.sql.,java.net.
sessionboolean 값“true”session=“true”
bufferbuffer값 or “none”“8kb”buffer=“12kb” buffer=“false”
autoFlushboolean 값“true”autoFlush=“false”
isThreadSafeboolean 값“true”isThreadSafe=“true”
trimDirective Whitespacesboolean 값“false”trimDirectiveWhitespaces=“false”
errorPage로컬 URL없음errorPage=“error/fail.jsp”
isErrorPageboolean 값“false”isErrorPage=“false”
pageEncoding페이지의 캐릭터 인코딩값“ISO-8859-1”pageEncoding=“EUC-KR”
  1. include: 여러 JSP 페이지에서 공통적으로 포함하는 내용이 있을 때 따로 저장하여 다른 JSP 파일에 삽입할 수 있도록 함
<%@include file=“로컬URL”%>
  1. taglib: JSP 기능을 확장할 때 사용하는 사용자 정의 태그의 집합
    → 양이 많아 추후 서술

7. JSP의 내부객체

  • JSP 페이지를 작성할 때 특별한 기능을 제공하는 JSP 컨테이너가 제공하는 특별한 객체
  • JSP에서 선언하지 않고 사용할 수 있는 객체
  • 스크립트 요소에서 내부 객체와 동일한 변수명으로 선언할 수 없다.
  • 사용되는 범주에 따라 4가지 형태로 분류
  • JSP 페이지 입출력 관련 내부 객체
  • JSP 페이지 외부 환경 정보 제공 내부 객체
  • JSP 페이지 서블릿 관련 내부 객체
  • JSP 페이지 예외 관련 기본객체
  • 내부객체 타입과 설명

8. 세션을 이용한 사용자 정보 제어 실습

    <html>
    <head>
    	<meta charset="UTF-8">
    	<title>session</title>
    </head>
    <body>
    	<form method="post" action="session1.jsp">
    		<input name="id" placeholder="아아디"> <br>
    		<input type="password" name="password" placeholder="비밀번호"> <br>
    		
    		<button type="submit">로그인</button>
    	</form>
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>session1</title>
    </head>
    <body>
    	<%
    		request.setCharacterEncoding("UTF-8");
    
    		String id = request.getParameter("id");
    		String pwd = request.getParameter("password");
    		
    		session.setAttribute("idKey", id);
    		session.setMaxInactiveInterval(10);
    	%>
    
    	<form method="post" action="session2.jsp">
    		<input name="name" placeholder="이름"> <br>
    		<input name="age" placeholder="나이"> <br>
    		
    		<button type="submit">전송</button>
    	</form>
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>session 2</title>
    </head>
    <body>
    	<%
    		String name = request.getParameter("name");
    		String age = request.getParameter("age");
    		String id = (String) session.getAttribute("idKey");
    		String sessionId = session.getId();
    		int intervalTime = session.getMaxInactiveInterval();
    		
    		if(id != null && !id.isEmpty()){
    	%>
    			이름: <%=name%> <br>
    			세션 id: <%=sessionId%> <br>
    			세션 유지 시간: <%=intervalTime%>초 <br>
    	<%	
    			session.invalidate();
    		}else{
    	%>
    			<h1>세션이 종료되었습니다.</h1>
    	<%	
    		}
    	%>
    </body>
    </html>
profile
나는야 개발자
post-custom-banner

0개의 댓글