JSP&Servlet) Servlet과 JSP
- Servlet 작동 순서
- 클라이언트에서 servlet 요청이 들어 오면 서버에서는 servlet 컨테이너를 만들고, 요청이 있을때마다 스레드가 생성됩니다.
- Servlet lifecycle
- Servlet 객체 생성 (최초 한번)
- Init() 호출 (최소 한번)
- service(), doGet(), doPost() 호출 (요청시 매번)
- destroy() 호출 (마지막 한번 ex. 자원해제 : servlet 수정, 서버 재가동 등등)
- servlet은 최초 요청 시 객체가 만들어져 메모리에 로딩되고, 이후 요청 시에는 기존의 객체를 재활용하게 되서 동작 속도가 빠릅니다.
- servlet 선처리, 후처리
- servlet의 lifecycle 중 init()과 destroy() 메소드와 관련하여 선처리(init() 전)와 후처리(destroy() 후) 작업이 가능합니다.
- 선처리 : @PostConstruct
- 후처리 : @PreDestroy
- HTML form 태그
- Html의 form태그는 서버쪽으로 정보를 전달할 때 사용하는 태그 입니다.
속성(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)
- Get : http://IP주소:port번호/컨텍스트/path/MemberJoin?id="abcdefg"&name="홍길동"
- Post : http://IP주소:port번호/컨텍스트/path/MemberJoin
- Servlet Parameter
- getParameter(name)
- getParameterValues(name)
- getParameterNames()
- 한글처리
- Get방식이나 Post방식에 따라 한글처리 방식을 달리 해야한다.
- Get : server.xml 수정 ( <Connector URLEncoding="EUC-KR" ..> )
- Post : request.setCharacterEncoding() 메소드 이용
- Servlet 초기화 파라미터 : ServletConfig
- 특정 Servlet이 생성될 때 초기에 필요한 데이터들이 있습니다. 예를 들어 특정 결로 및 아이디 정보 등입니다.
- 이러한 데이터들을 초기화 파라미터라고 하며, web.xml에 기술하고 Servlet파일에서는 ServletConfig 클래스를 이용해서 접근합니다.
- web.wml에 Initialization Parameter 기술
<?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
- 여러 servlet에서 특정 데이터를 공유해야 할 경우 context parameter를 이용해서 web.xml에 데이터를 기술하고, Servlet에서 공유하면서 사용할 수 있습니다.
<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
- 웹애플리케이션의 lifecycle을 감시하는 리스너가 있습니다. 바로 ServletContextListener입니다. 리스너의 해당 메소드가 웹 애플리케이션 시작과 종료시 호출 됩니다. (contextInitialized(), contextDestroyed())
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 태그의 개념 이해
- Servlet은 java언어를 이용하여 문서를 작성하고, 출력 객체를 이용하여 html코드를 삽입하였습니다.
- JSP는 Servlet과 반대로 HTML코드에 태그를 이용해서 java언어를 삽입해 동적 문서를 만들 수 있습니다.
지시자 : <%@ %> : 페이지 속성
주석 : <%-- --%>
선언 : <%! %> : 변수, 메소드 선언
표현식 : <%= %> : 결과값 출력
스크립트릿 : <% %> : JAVA 코드
액션태그 : <jsp:action> </jsp:action> : 자바빈 연결
- JSP 동작 원리
- 웹브라우저요청 -> JSP>Servlet -> Servlet>class -> 웹브라우저 응답
- JSP 내부 객체
- 객체를 생성하지도 않고 바로 사용할 수 있는 객체가 내부객체입니다.
- JSP에서 제공되는 내부객체는 JSP컨테이너에 의해 Servlet으로 변화할 때 자동으로 객체가 생성됩니다.
- 내부 객체 종류
입출력 객체 : request, response, out
서블릿 객체 : page, config
세션 객체 : session
예외 객체 : exception
- 스크립트릿, 선언, 표현식
- JSP문서 안에 java언어를 넣기 위한 방식들 입니다. 실제 개발에서 많이 쓰입니다.
- 스크립트릿(scriptlet) : <% java %> : JSP페이지에 java 언어를 사용하기 위한 요소입니다.
- 선언(declaration) : <%! java %> : JSP페이지 내에서 사용되는 변수 또는 메소드를 선언할 때 사용합니다.
- 표현식(expression) : <%= java %> : JSP페이지 내에 사용되는 변수의 값 또는 메소드 호출 결과값을 출력하기 위해 사용 됩니다. 결과값은 String 타입이며, ';'을 사용 할수 없습니다.
- 지시자
- JSP페이지의 전체적인 속성을 지정할 때 사용합니다.
- page, include, taglib 가 있으며, <%@ 속성 %> 형태로 사용됩니다.
page : 해당 페이지의 전체적인 속성 지정
include : 별도의 페이지를 현재 페이지에 삽입
taglib : 태그라이브러리의 태그 사용
- 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)); %>
- include 지시자 : 현재 페이지 내에 다른 페이지를 삽입할 때 사용합니다. file속성을 이용 합니다.
<h1> include.jsp 페이지입니다. </h1><br/> <%@ include file = "include01.jsp"%> <h1> 다시 include.jsp 페이지입니다. </h1><br/>
- taglib 지시자 : 사용자가 만든 tag들을 태그 라이브러리라고 합니다. 그리고 이러한 태그 라이브러리를 사용하기 위해 taglib지시자를 사용 합니다. url 및 prefix 속성이 있으며, uri는 태그 라이브러리의 위치 값을 가지며, prefix는 태그를 가리키는 이름 값을 가집니다.
- 주석 : HTML 및 JSP 주석이 별도로 존재합니다.
- HTML주석 : <!-- comments --> 로 기술합니다.
- JSP 주석 : <%-- comments -->로 기술하며, java언어의 주석도 사용 가능합니다.
댓글 없음: