서블릿

미니멀리즘·2022년 11월 21일

JSP(프레젠테이션 부)는 HTML에서 JAVA코드를 포함하여 보여주는 것이고
Servlets(비지니스 로직)은 클래스에서 HTML코드를 생성하여 보여주는 것이다..

서블릿이란?

클라이언트의 요청을 처리하고, 그 결과를 반환하는
Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다.

https://opentutorials.org/course/62/5125
do get 파라미터 값이 바로 들어감/ 정보에대한 링크방식으로 사용함
do post 파라미터 값이 숨겨저서 들어감/ 아이디 비밀번호같은 데이터 전송에 사용함, 길이에 제한이 없음, 이진법(binary) 정보를 보낼수 있음

새로 추가한 코드들

WedContent/student-form.html

뷰에서 컨트롤러로 값을 넘겨줌

<html>

<body>

	Do get
	<form action = "StudentServlet" method="GET">
	First name : <input type = "text" name = "firstName"/>
	</br>
	Last name : <input type = "text" name = "lastName"/>
	</br>
	<input type = "Submit" value = "submit">
	</form>
	
	Do post
	<form action = "StudentServlet" method="POST">
	First name : <input type = "text" name = "firstName"/>
	</br>
	Last name : <input type = "text" name = "lastName"/>
	</br>
	<input type = "Submit" value = "submit">
	</form>
	
</body>

</html>

src/com.exServlet.demo/StudentServlet.java

package com.exServlet.demo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class StudentServlet
 */
@WebServlet("/StudentServlet")
public class StudentServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public StudentServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
	
		//1. response content type 정하기
		response.setContentType("text/html");
		//2. printWriter 가져오기
		PrintWriter	out = response.getWriter();	
		//3. HTML 콘텐츠 설정하기 
		out.println("<html><body>");

		out.println("The Student is confirmed : "
				 + "</br>"
				+ "firstName is "
				+request.getParameter("firstName") 
				+ "</br>"
				+ "lastName is  " 
				+request.getParameter("lastName"));
		
		out.println("</body></html>");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Wedcontent/WEB-INF/lib/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>ServletEx</display-name>
  
  <context-param>
  	<param-name>max-shopping-cart-size</param-name>
  	<param-value>99</param-value>
  </context-param>
  <context-param>
  	<param-name>project-team-name</param-name>
  	<param-value>The Coding Gurus</param-value>
  </context-param>
 
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
</web-app>

html -> 서블릿으로 파라미터를 내보냄
xml -> 서블릿에서 데이터를 가져 올수 있음(String)형식으로 가져옴

배포서술자(web.xml)는 웹 어플리케이션의 환경설정 정보를 담은 파일입니다. WAS(Web Application Server)가 처음 구동될 때 이 파일을 읽어 설정 내용을 톰캣에 적용하게 됩니다. 서블릿 설정, 필터 설정, 웰컴 파일 목록, 오류 페이지 처리와 같은 설정을 할수 있습니다.

xml 기본인 환경구성에 사용함
-사용하려는 서블릿(및 필터)과 이를 매핑하려는 URL
-listeners - 일부 이벤트가 발생할 때 알림을 받는 클래스(컨텍스트 시작, 세션 생성 등)
-구성 매개변수(context-params)
-오류 페이지, 시작 파일
-보안 제약

(3) Web.xml 파싱

배포 서술자(deployment descriptor)라고도 불리는 Web.xml은 서버를 초기화 할때
서블릿의 위치가 어디있는지 설정을 도와주는 문서다.
즉 어떤 서블릿이 프로젝트 폴더 내에 있다면 어느 위치에 존재하고 어떤 URL로 접속해야하는지 알려준다.
컨테이너는 고객 요청 정보를 파악한 이후에 Web.xml 문서에 따라 그에 맞는 서블릿 주소를 찾는다.
그리고 서블릿에 접근을 하게 된다.

src/com.exServlet.demo/TestParamServlet.java

package com.exServlet.demo;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class TestParamServlet
 */
@WebServlet("/TestParamServlet")
public class TestParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestParamServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		
		///1. response content type 정하기
		response.setContentType("text/html");
		
		//2. printWriter 가져오기
		PrintWriter	out = response.getWriter();	
		
		//3. read configuration params
		ServletContext context = getServletContext();
		
		String maxCarSize = context.getInitParameter("max-shopping-cart-size");
		String teamName = context.getInitParameter("project-team-name");
				//getInitParameter
		// 
		//4. HTML content generating
		out.println("<html><body>");
		
		out.println("Max cart: " + maxCarSize);
		out.println("</br></br>");
		out.println("Team name: " + teamName);
		
		out.println("</html></body>");

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

src/com.exServlet.demo/MvcDemoServlet.java

컬트롤러에서 뷰단으로 값을 보냄

package com.exServlet.demo;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class MvcDemoServlet
 */
@WebServlet("/MvcDemoServlet")
public class MvcDemoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MvcDemoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0. Add data
		String[] students = {"Paul", "Peter", "John", "Mark", "Matthew"};
		request.setAttribute("student_list", students);
		
		//1. get request dispatcher
		RequestDispatcher dispatcher = request.getRequestDispatcher("/view_students.jsp");
		//서블릿에서 jsp로 넘어갈떄 /를 붙여야함
		
		//2. forward the request to jsp
		dispatcher.forward(request, response);
		//forward 다른페이지로 넘어가 출력함
	}
		

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

WedContent/view_students.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<body>

<c:forEach var= "list" items = "${student_list}">
	${list}<br/>
</c:forEach>

</body>
</html>
profile
웹 개발자

0개의 댓글