JSP&Servlet) Servlet과 JSP

  1. Servlet 작동 순서
웹브라우저 <-> 웹서버 <-> 웹어플리케이션 서버 <-> Servlet 컨테이너(1. 스레드생성 2. Servlet객체 생성)
- 클라이언트에서 servlet 요청이 들어 오면 서버에서는 servlet 컨테이너를 만들고, 요청이 있을때마다 스레드가 생성됩니다.
  • Servlet lifecycle
  1. Servlet 객체 생성 (최초 한번)
  2. Init() 호출 (최소 한번)
  3. service(), doGet(), doPost() 호출 (요청시 매번)
  4. destroy() 호출 (마지막 한번 ex. 자원해제 : servlet 수정, 서버 재가동 등등)
- servlet의 사용도가 높은 이유는 빠른 응답 속도 때문입니다.
- servlet은 최초 요청 시 객체가 만들어져 메모리에 로딩되고, 이후 요청 시에는 기존의 객체를 재활용하게 되서 동작 속도가 빠릅니다.
  • servlet 선처리, 후처리
  1. servlet의 lifecycle 중 init()과 destroy() 메소드와 관련하여 선처리(init() 전)와 후처리(destroy() 후) 작업이 가능합니다.
  2. 선처리 : @PostConstruct
  3. 후처리 : @PreDestroy
  • HTML form 태그
  1. Html의 form태그는 서버쪽으로 정보를 전달할 때 사용하는 태그 입니다.
input : 태그의 종류를 지정 합니다
속성(type, name, value)
 - type : 태그 종류 지정(ex. text, password, submit, checkbox, radio, reset)
 - name : input 태그 이름
 - value : name에 해당하는 값(ex. name = value)

type = text : 일반적인 데이터를 입력하기 위해 사용합니다.
<input type="text" name="name" size="10">

type = password : 로그인, 회원가입 페이지 등에서 비밀번호 입력하기 위해 사용합니다.
<input type="password" name="name" size="10">

type = submid : form내의 데이터를 전송할 때 사용합니다.
<input type="submit" value="전송">

type = reset : form내의 데이터를 초기화 할 때 사용합니다.
<input type="reset" value="초기화">

type = checkbox : 데이터값을 여러 개 전송해야 할 때 사용합니다.
<input type="checkbox" name="hobby" value="read">

type = radio : checkbox와 달리 여러 개의 데이터값 중 한 개의 값만을 전송할 때 사용합니다.
<input type="radio" name="major" value="kor">

type = select : 리스트형태의 데이터를 사용합니다.
<select name="protocol">
   <option value="http">http</option>
</select>

form태그 : input 태그들의 값을 서버로 전송하기 위한 정보를 담고 있습니다.
<form action="FormEx" method="post">
action : 요청하는 컴포넌트 이름 (ex. join, jsp, info, html, HWorld)
method : 요청을 처리하는 방식(ex. get, post)
  1. Get : http://IP주소:port번호/컨텍스트/path/MemberJoin?id="abcdefg"&name="홍길동"
  2. Post : http://IP주소:port번호/컨텍스트/path/MemberJoin
  • Servlet Parameter
Form태그의 submit 버튼을 클릭하여 데이터를 서버로 전송하면 해당파일(servlet)에서는 HttpServletRequest객체를 이용하여 parameter값을 얻을 수 있다.
  1. getParameter(name)
  2. getParameterValues(name)
  3. getParameterNames()
  • 한글처리
  1. Get방식이나 Post방식에 따라 한글처리 방식을 달리 해야한다.
  2. Get : server.xml 수정 ( <Connector URLEncoding="EUC-KR" ..> )
  3. Post : request.setCharacterEncoding() 메소드 이용
  • Servlet 초기화 파라미터 : ServletConfig
  1. 특정 Servlet이 생성될 때 초기에 필요한 데이터들이 있습니다. 예를 들어 특정 결로 및 아이디 정보 등입니다.
  2. 이러한 데이터들을 초기화 파라미터라고 하며, web.xml에 기술하고 Servlet파일에서는 ServletConfig 클래스를 이용해서 접근합니다.
Servlet 클래스 제작 -> web.xml 파일에 초기화 파라미터 기술 -> ServletConfig 메소드 이용해서 데이터 불러오기

  • web.wml에 Initialization Parameter 기술
<web.xml>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>Servlet</servlet-name>
        <servlet-class>Servlet</servlet-class>
        <init-param>
            <param-name>id</param-name>
            <param-value>abcde</param-value>
        </init-param>
        
        <init-param>
            <param-name>pw</param-name>
            <param-value>12345</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>Servlet</servlet-name>
        <url-pattern>/serv</url-pattern>
    </servlet-mapping>
</web-app>

<Servlet.class>
public class Servlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, 
javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, 
IOException {

    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, 
javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException,
IOException {

        String id = getInitParameter("id");
        String pw = getInitParameter("pw");

        response.setContentType("text/html; charset=EUC-KR");
        PrintWriter writer = response.getWriter();
        writer.println("<html><head></head><body>");
        writer.println("아이디 : "+id+"<br/>");
        writer.println("비밀번호 : "+pw+"<br/>");
        writer.println("</body></html>");

        writer.close();
    }
}

  • Servlet에 Initialization Parameter 기술
@WebServlet(urlPatterns = {"/hw"}, initParams = {@WebInitParam(name = "id", value = "abcdef"), @WebInitParam(name="pw", value="12345")})
public class Servlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, 
javax.servlet.http.HttpServletResponse response) 
throws javax.servlet.ServletException, IOException {

    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, 
javax.servlet.http.HttpServletResponse response) 
throws javax.servlet.ServletException, IOException {

        String id = getInitParameter("id");
        String pw = getInitParameter("pw");

        response.setContentType("text/html; charset=EUC-KR");
        PrintWriter writer = response.getWriter();
        writer.println("<html><head></head><body>");
        writer.println("아이디 : "+id+"<br/>");
        writer.println("비밀번호 : "+pw+"<br/>");
        writer.println("</body></html>");

        writer.close();
    }
}

  • 데이터 공유 : ServletContext
  1. 여러 servlet에서 특정 데이터를 공유해야 할 경우 context parameter를 이용해서 web.xml에 데이터를 기술하고, Servlet에서 공유하면서 사용할 수 있습니다. 
<web.xml>
        <context-param>
            <param-name>id</param-name>
            <param-value>abcde</param-value>
        </context-param>

        <context-param>
            <param-name>pw</param-name>
            <param-value>12345</param-value>
        </context-param>
<Servlet.class>
String id = getServletContext().getInitParameter("id");
String pw = getServletContext().getInitParameter("pw");

  • 웹애플리케이션 감시 : ServletContextListener
  1. 웹애플리케이션의 lifecycle을 감시하는 리스너가 있습니다. 바로 ServletContextListener입니다. 리스너의 해당 메소드가 웹 애플리케이션 시작과 종료시 호출 됩니다. (contextInitialized(), contextDestroyed())
<ServletListener.class>
public class ServletListener implements ServletContextListener{

    public void contextInitialized(ServletContextEvent e){
        System.out.println("contextInitialized");
    }
    public void contextDestroyed(ServletContextEvent e){
        System.out.println("contextDestroyed");
    }
}

<web.xml>
    <listener>
        <listener-class>ServletListener</listener-class>
    </listener>

- web.xml에 기술하지 않고 class에 '@WebListener'를 통해서 명시할 수 있다.

  • JSP 태그의 개념 이해
  1. Servlet은 java언어를 이용하여 문서를 작성하고, 출력 객체를 이용하여 html코드를 삽입하였습니다.
  2. JSP는 Servlet과 반대로 HTML코드에 태그를 이용해서 java언어를 삽입해 동적 문서를 만들 수 있습니다.
지시자 : <%@   %> : 페이지 속성
주석 : <%-- --%>
선언 : <%!   %> : 변수, 메소드 선언
표현식 : <%=   %> : 결과값 출력
스크립트릿 : <%   %> : JAVA 코드
액션태그    : <jsp:action> </jsp:action> : 자바빈 연결

  • JSP 동작 원리
  1. 웹브라우저요청 -> JSP>Servlet -> Servlet>class -> 웹브라우저 응답
  • JSP 내부 객체
  1. 객체를 생성하지도 않고 바로 사용할 수 있는 객체가 내부객체입니다.
  2. JSP에서 제공되는 내부객체는 JSP컨테이너에 의해 Servlet으로 변화할 때 자동으로 객체가 생성됩니다.
  3. 내부 객체 종류
입출력 객체 : request, response, out
서블릿 객체 : page, config
세션 객체 : session
예외 객체 : exception

  • 스크립트릿, 선언, 표현식
  1. JSP문서 안에 java언어를 넣기 위한 방식들 입니다. 실제 개발에서 많이 쓰입니다.
  2. 스크립트릿(scriptlet) : <% java %> : JSP페이지에 java 언어를 사용하기 위한 요소입니다.
  3. 선언(declaration) : <%! java %> : JSP페이지 내에서 사용되는 변수 또는 메소드를 선언할 때 사용합니다.
  4. 표현식(expression) : <%= java %> : JSP페이지 내에 사용되는 변수의 값 또는 메소드 호출 결과값을 출력하기 위해 사용 됩니다. 결과값은 String 타입이며, ';'을 사용 할수 없습니다.
  • 지시자
  1. JSP페이지의 전체적인 속성을 지정할 때 사용합니다.
  2. page, include, taglib 가 있으며, <%@ 속성 %> 형태로 사용됩니다.
page : 해당 페이지의 전체적인 속성 지정
include : 별도의 페이지를 현재 페이지에 삽입
taglib : 태그라이브러리의 태그 사용 
  1. page 지시자 : 페이지의 속성을 지정할 때 사용합니다. 주로 사용되는 언어 지정 및 import문을 많이 사용합니다.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.Arrays" %>
<%
  int[] A = {10, 20, 30};
  out.println(Arrays.toString(A));
%>

  1. include 지시자 : 현재 페이지 내에 다른 페이지를 삽입할 때 사용합니다. file속성을 이용 합니다. 
<h1> include.jsp 페이지입니다. </h1><br/>
<%@ include file = "include01.jsp"%>
<h1> 다시 include.jsp 페이지입니다. </h1><br/>

  1. taglib 지시자 : 사용자가 만든 tag들을 태그 라이브러리라고 합니다. 그리고 이러한 태그 라이브러리를 사용하기 위해 taglib지시자를 사용 합니다. url 및 prefix 속성이 있으며, uri는 태그 라이브러리의 위치 값을 가지며, prefix는 태그를 가리키는 이름 값을 가집니다. 
  • 주석 : HTML 및 JSP 주석이 별도로 존재합니다.
  1. HTML주석 : <!-- comments --> 로 기술합니다.
  2. JSP 주석 : <%-- comments -->로 기술하며, java언어의 주석도 사용 가능합니다.
source : https://www.inflearn.com(신입SW인력을 위한 실전 JSP&Servlet)

댓글 없음:

Powered by Blogger.