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="제출하기" />
<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 |