오늘이라도
[Web] 3. Servlet 생성하는 방법, HelloServlet, 누적합 계산 ①, ② 본문
https://github.com/upcake/Class_Examples
교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다.
gif 파일은 클릭해서 보는 것이 정확합니다.
- Servlet 생성하는 방법 -
- MVC : Model, View, Controller
- servlet-api.jar(C:\tomcat\lib) ▶ JRE → lib → ext : 복사 & 붙여 넣기
① JAVA Resources → 우클릭 → New → Servlet : Servlet 마법사 실행
② URL Mapping → /xx.do ▶ <form action="xx.do" ~~>
※ Domain은 대소문자를 구분하지 않지만 URL은 대소문자를 구분한다.
- Domain : www.naver.com = WWW.NAVER.COM
- URL : https://www.naver.com/~~~~~
③ [V] service 체크 → Finish
- 불필요한 코드 삭제, 단, service() 삭제하지 말 것
- Servlet Mapping(수동 설정) : WebContent → WEB-INF → web.xml
<!-- Servlet Class 정의 -->
<servlet>
<display-name>HelloServlet</display-name>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<!-- Servlet Mapping 설정 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hs.do</url-pattern>
</servlet-mapping>
- HelloServlet -
- 통신 과정 : HelloServlet.html → web.xml → hs.do → HelloServlet.java → HelloServlet.class
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Servlet</title>
</head>
<body>
<form action="hs.do" method="post">
<input type="submit" value="Hello Servlet" />
</form>
</body>
</html>
▲HelloServlet.html
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("/hs.do") //Servlet Mapping 자동 설정
public class HelloServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8"); // MIME TYPE
PrintWriter out = response.getWriter(); //응답(출력) 준비 완료
out.println("<html>");
out.println("<head>");
out.println("<title>Response Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h2>Welcome to Hello Servlet!</h2>");
out.println("<h2>안녕하세요</h2>");
out.println("</body>");
out.println("</html>");
}
}
▲HelloServlet.java
- 누적합 계산 ① : 비즈니스 로직을 Servlet에서 처리 -
- 통신 과정 : SuCalc01.html → sc01.do → Servlet01.java
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>두 수 사이의 누적합 계산</title>
</head>
<body>
<form action="sc01.do" method="get">
첫 번째 수 : <input type="number" name="num1" required="required" /><br />
두 번째 수 : <input type="number" name="num2" required="required" /><br />
<input type="submit" value="계산" />
<input type="reset" value="초기화" />
</form>
</body>
</html>
▲SuCalc01.html
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("/sc01.do")
public class Servlet01 extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//① 클라이언트의 요청을 받는다 : 폼의 매개 변수를 가져온다 ▶ HttpServletRequest
request.setCharacterEncoding("utf-8");
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
//② 비지니스 로직(num1 ~ num2 누적합 계산) ▶ Model(Class, DTO, DAO)
int sum = 0;
for(int i = num1; i <= num2; i++) {
sum += i;
}
//③ 프리젠테이션 로직 : 결과를 html 코드로 응답 (HttpServletResponse) ▶ View
response.setContentType("text/html; charset=utf-8"); //MIME Type
PrintWriter out = response.getWriter();
out.println("<body>");
out.println("첫 번째 수 : " + num1 + "<br />");
out.println("두 번째 수 : " + num2 + "<br />");
out.println("두 수 사이의 누적합 : " + sum);
out.println("</body>");
}
}
▲Servlet01.java
- 누적합 계산 ② : 비즈니스 로직을 다른 클래스에서 처리 -
- 통신 과정
① 클라이언트의 요청을 받는다.
Model [SuCalc02.html(request) → web.xml → sc02.do(Servlet02.java)
② 비즈니스 로직을 수행한다.
→ SumMachine.getSum() → sum] → Controller [return(Servlet02.java)]
③프레젠테이션 로직을 수행한다.
→ View [result.jsp(response)]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>두 수 사이의 누적합 계산2</title>
</head>
<body>
<form action="sc02.do" method="post">
첫 번째 수 : <input type="number" name="num1" required="required" /><br />
두 번째 수 : <input type="number" name="num2" required="required" /><br />
<input type="submit" value="계산" />
<input type="reset" value="초기화" />
</form>
</body>
</html>
▲SuCalc02.html
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;
import com.hanul.study.SumMachine;
@WebServlet("/sc02.do")
public class Servlet02 extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//① 클라이언트의 요청을 받는다(HttpServletRequest) : 매개 변수 값을 가져온다.
request.setCharacterEncoding("utf-8");
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
//② 비즈니스 로직 : 별도의 클래스로 작성(Model) ▶ Package : com.hanul.study
SumMachine sm = new SumMachine();
int sum = sm.getSum(num1, num2);
//③ 프레젠테이션 로직 : 결과를 응답(HttpServletResponse) ▶ result.jsp(View)
request.setAttribute("num1", num1); //바인딩(연결) 객체
//setAttribute(이름, 내용), 내용을 이름에 연결해주는 메서드
request.setAttribute("num2", num2);
request.setAttribute("sum", sum);
RequestDispatcher rd = request.getRequestDispatcher("result.jsp"); //페이지 호출
rd.forward(request, response); // 페이지 전환
}
}
▲Servlet02.java
package com.hanul.study;
public class SumMachine {
public int getSum(int num1, int num2) {
int sum = 0;
for(int i = num1; i <= num2; i++) {
sum += i;
}
return sum;
}
}
▲SumMachine.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int num1 = (Integer) request.getAttribute("num1");
int num2 = (Integer) request.getAttribute("num2");
int sum = (Integer) request.getAttribute("sum");
// Object 타입이 리턴되기 때문에 int 타입으로 캐스팅해주어야 한다.
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>누적합 결과</title>
</head>
<body>
첫 번째 수 : <%=num1 %><br />
두 번째 수 : <%=num2 %><br />
누적합 결과 : <%=sum %>
</body>
</html>
▲result.jsp
'취업성공패키지 SW 개발자 교육 > Web' 카테고리의 다른 글
[Web] 6. NCS 평가 프로젝트 : 작성 조건, 도서 정보 입력, 조회, 삭제 구현 (0) | 2020.05.13 |
---|---|
[Web] 5. 회원 목록 삭제 추가, 정적 페이지 전환, 동적 페이지 전환 : forward(), sendRedirect() (0) | 2020.05.12 |
[Web] 4. SQL 테이블과 연동하여 HTML, Servlet, DTO, DAO 만들기 (1) | 2020.05.11 |
[Web] 2. 회원가입 화면 만들기 : index 작성, Servlet, web.xml, JSP (4) | 2020.05.07 |
[Web] 1. Java EE 개발 환경 구축 (1) | 2020.05.06 |