개발기록/Java

서블릿 예제1

100'S 2022. 1. 19. 23:04

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_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>secondServletProject</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>test1</servlet-name>
  	<servlet-class>com.kh.sverlet.controller.TestServlet1</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>test1</servlet-name>
  	<url-pattern>/test1.do</url-pattern>
  </servlet-mapping>
  
  <filter>
  	<filter-name>encoding</filter-name>
  	<filter-class>com.kh.servlet.common.EncodingFilter</filter-class>
  </filter>
  
  <filter-mapping>
  	<filter-name>encoding</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
</web-app>

 

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet Practice part 2</title>
</head>
<body>
	<h1>Servlet Practice part 2</h1>
	
	<h3>index</h3>
	
	<!--  
		서블릿의 url 주소를 000.do / 000.search 등으로 
		.표기를 하는 이유는 앞부분의 서블릿 기능이 속한 서비스 그룹을 
		구분짓기 위해서다.
		ex) .do / .naver / .go / .biz / .retail 등으로
		서블릿이 제공하는 서비스 그룹을 .으로 나타내어 후에 개발시 한 패키지에 
		들어가도록 한다.
	 -->

	<ol>
		<li>
			<a href="test1.do">기본 서블릿 객체</a>
		</li>
		<li>
			<a href="life">서블릿의 생명주기(life-cycle)</a>
		</li>
		<li>
			<a href="views/survey.html">설문조사</a>
		</li>
	</ol>
</body>
</html>

 

 

 

Test.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>설문조사</title>
</head>
<body>
	<h1>당신의 취향을 선택하세요</h1>
	
	<form action="/second/testSurvey.biz">
		<ul style="list-style : none; line-height : 50px">
		
			<li>이름 : <input type="text" name="name" size="5" /></li>	
			
			<li>나이 : <input type="number" name="age" /></li>
			
			<li>좋아하는 색상 : <br>
				<input type="radio" name="color" id="" value="blue" />파란색 <br />
				<input type="radio" name="color" id="" value="red" />빨강색 <br />
				<input type="radio" name="color" id="" value="black" />검은색<br />
				<input type="radio" name="color" id="" value="green" />녹색<br />
				<input type="radio" name="color" id="" value="gray" />회색<br />
			</li>
			<li>
				좋아하는 동물 : 
					<select name="animal">
						<option value="엘리펀트">코끼리</option>
						<option value="기린">기린</option>
						<option value="고양고양">고양이</option>
						<option value="개">강아지</option>
						<option value="벨루가">벨루가</option>
					</select>
			</li>
			
			<li>
				휴대폰 앞자리(중복 선택 가능) : <br />
				<input type="checkbox" name="tel1" id="" value="010" /> 010 <br />
				<input type="checkbox" name="tel1" id="" value="010" /> 016 <br />
				<input type="checkbox" name="tel1" id="" value="010" /> 018 <br />
				<input type="checkbox" name="tel1" id="" value="010" /> 011 <br />
				<input type="checkbox" name="tel1" id="" value="010" /> 031 <br />
			</li>
			
			<li>
				<input type="submit" value="제출하기" />
				&nbsp;&nbsp;&nbsp;
				<input type="reset" value="취소하기" />
			</li>
		</ul>
	</form>

</body>
</html>

 

 

TestServlet.java

package com.servlet.controller;

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;

/**
 * @WebServlet() 어노테이셔을 통해 url 주소를 맵핑할 수도 있고,
 * XML 방식으로 등록할 수도 있다.
 * 단, 둘 다 쓰면 충돌이 발생하기 때문에 사용하면 안된다.
 * 
 * 따라서 개발자는 둘 다 사용할 수 있어야한다.
 * 먼저, 어노테이션 방식은 개발하는 하나의 클래스 안에서 
 * 선언까지 한번에 모두 처리하기 때문에 개발속도가 빨라지며, 
 * 개발자가 소스 코드 구현의 흐름을 잃지 않는다.
 * but, 프로그램 전체에 대한 설정을 확인하기는 어렵다.
 * 
 * 반대로 XML방식은 개발자가 아닌 다른 사용자(운영자, 관리자, 경영진)가 
 * 어떤 설정이 구성되어 있는지 확인하기 쉽다.
 * but, 개발자가 클래스를 등록할 때마다 하나하나 XML에도 설정을
 * 작성해야 하기 때문에 소스 코드 구현의 흐름이 끊기기 쉽다.
 * 
 */

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

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		// 2. 웹 페이지 연결하기
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head>");
		out.println("<title>연습용 서블릿</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>연습용이다!!</h1>");
		out.println("</body>");
		out.println("</html>");
		
		out.flush();
		out.close();
	}

	/**
	 * @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);
	}

}

 

LifeSyscleServlet.java

package com.servlet.controller;

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


	@WebServlet("/life")
	public class LifeCycleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	    
	
	
    public LifeCycleServlet() {
        super();
        
    }

	@Override
	public void destroy() {
		// 서블릿 소멸 시 동작하는 메소드
		System.out.println("서블릿 객체 소멸 시 동작하는 destroy()이다.");
		super.destroy();
	}


	@Override
	public void init() throws ServletException {
		// 서블릿 최초 생성 시 동작하는 메소드
		System.out.println("서블릿 init() 확인!! ");
		super.init();
	}


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet() 메소드 호출 ~~~~~");
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost() 메소드 호출 ~~~~~");
	}

}

 

TestSurveyServlet.java

package com.servlet.controller;

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 testSurveyServlet
 */
@WebServlet("/testSurvey.biz")
public class testSurveyServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public testSurveyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 인코딩 - filter가 대신 처리함
		
		// 2. 사용자가 전달한 정보 받기
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		String color = request.getParameter("color");
		String animal = request.getParameter("animal");
		
		// 체크박스나 여러 값을 가지는 name속성은 
		// 배열 형태로 값을 전달한다.
		
		String[]telArr = request.getParameterValues("tel1");
		
		System.out.println("name : " + name);
		System.out.println("age : " + age);
		System.out.println("color : " + color);
		System.out.println("animal : " + animal);
		
		for(String str : telArr) {
			System.out.println(str);
		}
		
		// 3. response 객체에 처리한 결과를 응답으로 보내기
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head>");
		out.println("<title>설문 조사 결과</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>설문 조사 결과</h1>");
		out.println("<h2 style='color : magenta'>" + name + " 이게 너의 취향이다.</h2>");
		out.println("<span style='color : " + color + "'>'" + "나이는 " + age + "살, <br>"
					+ "좋아하는 색은 " + color + "색이고, <br>" 
					+ "좋아하는 동물은 " + animal + "이네? <br>");
		out.println("휴대폰 번호는 ");
		for(String str : telArr) {
			out.println(str + ", ");
		}
		out.println("이구만. </span>");
		out.println("</body>");
		out.println("</html>");
		
		out.flush();
		out.close();
		
	}

	/**
	 * @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);
	}

}

 

 

 

'개발기록 > Java' 카테고리의 다른 글

JSP 예제  (0) 2022.01.19
서블릿 예제2  (0) 2022.01.19
Ajax 예제  (0) 2022.01.19
서블릿 리스너 ( Servlet Listner)  (0) 2022.01.13
Filter와 Wrapper  (0) 2022.01.13