쓰레기통/[Web MVC 1] 모델1 - 모델2 진행과정

5. 원시 Servlet (자바진영의 동적웹 탄생)

고인돌개발자 2021. 4. 22. 16:23

학습목표 : 초창기(원시) Servlet 을 통한 동적 웹을 살펴본다.

 

1. Servlet 정의?
(위키백과 참조-
ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF


    자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램
    혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 

 

자바 서블릿 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 서블릿은 여기로 연결됩니다. 다른 뜻에 대해서는 서블렛 문서를 참조하십시오. 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서

ko.wikipedia.org

2. ServletJoin.java
   (이클립스에서 servlet 으로 실행, 입력된 회원정보를 저장하고 화면에 보여줌, 이때 앞에 과정에서 만든 VO, Repository 사용 )

package com.study.model1.servlet;

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;

import com.study.comm.repository.Repository_member;
import com.study.comm.vo.Members;

/**
 * Servlet implementation class ServletJoin
 */
@WebServlet("/model1/servlet/new_member")
public class ServletJoin extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	/* Repository_member 객체를 얻어온다 */
	private Repository_member repository_member = new Repository_member();
    
    public ServletJoin() {
        super();    
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("doGet Start position");		
		
		/* get Request value, jsp 의 request 받는것과 동일하다. */
		String  userName  = request.getParameter("input_name"); 
		int     userAge   = Integer.parseInt(request.getParameter("input_age")); 
		String userMobile = request.getParameter("input_mobile");
		
		System.out.println("request value = "+ userName +"/" + Integer.toString(userAge) + "/" + userMobile);
		
		/* Members 변수는 생성자를 통해 한방에 넣는다. */
		Members members = new Members(userName, userAge, userMobile);
		
		/* 값을 List 에 저장하여 아래에 뿌려줄때 사용 */
		repository_member.setSave(members); 
		
		/* 아래가 바로 초창기 Servlet 의 위엄... */
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter w = response.getWriter();
		
		w.write("<html>\n" +
		"<head>\n" +
		" <meta charset=\"UTF-8\">\n" +
		"</head>\n" +
		"<body>\n" +
		"NewMember\n" +
		"<ul>\n" +
		" <li>Name   ="+members.getStrName()  +"</li>\n" +
		" <li>Age    ="+members.getIntAge()   +"</li>\n" +
		" <li>Mobile ="+members.getStrMobile()+"</li>\n" +
		"</ul>\n" +
		"<a href=\"/index.html\">Go Home</a>\n" +
		"</body>\n" +
		"</html>");
		
	}

	/**
	 * 모든 처리를 doGet 에서 처리하도록 하기 위해 아래 doPost 에서 받은 request, response 값을 doPost 로 던져준다.
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

3. ServletList.java
   (이클립스에서 servlet 으로 실행, 입력된 회원정보를 가져온다.이때 앞에 과정에서 만든 VO, Repository 사용 )

package com.study.model1.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

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

import com.study.comm.repository.Repository_member;
import com.study.comm.vo.Members;

/**
 * Servlet implementation class ServletList
 */
@WebServlet("/model1/servlet/member_list")
public class ServletList extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	/* Repository_member 객체를 얻어온다 , Members 에 있는 값을 가져와야 함. */
	private Repository_member repository_member = new Repository_member();
       
    public ServletList() {
        super();    
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		response.getWriter().append("Served at: ").append(request.getContextPath());
		
		/*
		 *  Member 의 값을 받을 List 생성,, 여러개를 받기 위해 List 객체를 사용
		 *  아래 같은 구문이 솔직히 나에겐 어려움.. 
		 *  이해하자면, Members 객체를 인자로 하는 List 객체는  repository_member 가 갖고 있는 List 를 생성한다.
		 *  */
		List<Members> list = repository_member.getList();
		
		System.out.println("list.size => "+ list.size());
		
		
		/* 아래가 바로 초창기 Servlet 의 위엄... */
		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter w = response.getWriter();
		
		w.write("<html>");
		w.write("<head>");
		w.write(" <meta charset=\"UTF-8\">");
		w.write(" <title>Title</title>");
		w.write("</head>");
		w.write("<body>");
		
		w.write("<table>");
		w.write(" <tr>");		
		w.write(" <th>Name</th>");
		w.write(" <th>Age</th>");
		w.write(" <th>Mobile</th>");
		w.write(" </tr>");		
		
		/* 예전에는 int i=0; i<list.size(); i++ , 이렇게도 사용했지만, 아랫처럼 사용도 가능, 신박함 
		 * lst 에 있는 값을 객체로 반환함. 
		 * */
		for (Members members : list) {
			w.write(" <tr>");
			w.write(" <td>" + members.getStrName() + "</td>");
			w.write(" <td>" + members.getIntAge()+ "</td>");
			w.write(" <td>" + members.getStrMobile() + "</td>");
			w.write(" </tr>");
			}
			
		w.write("</table>");
		w.write("</body>");
	    w.write("</html>");
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		doGet(request, response);
	}

}

 

4. 여기까지 이클립스 프로젝트 구조..

 

<여기까지 이클립스 구조>

5. Tomcat 을 구동하여, 회원가입, 회원List 실행.

 

여기까지 성공하면, 다음 단계로...Go Go ~~