서블릿(servlet): 자바 소스코드에 html이 들어가는 형태
<->
JSP(Java Serve Pages): HTML에 java 코드 들어가는 것
서블릿의 불편함때문에 JSP가 나왔다.
그런데 JSP도 요즘 불편해서 잘 안씀 -> Spring framwork -> Springboot
서블릿 생성 실습: java resource에서 new 해서 servlet 을 만든다.
package ch05;
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 HelloWorld
* @WebServlet가 어떤 요청에 의해 서블릿 호출될 것인지, url 형태까지 모두 설정
*/
@WebServlet(description = "my first servlet", urlPatterns = { "/Hello" })
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
* doGet()은 GET 요청을 처리하는 메소드다. 요청이 오면 무언가 실행되게 수정하자.
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.append("<!doctype html><html><head><title>Hello World Servlet</title></head><body>")
.append("<h2>Hello World !!</h2><hr>")
.append("현재 날짜와 시간은: "+java.time.LocalDateTime.now())
.append("</body></html>");
// TODO Auto-generated method stub 호출하는쪽에서 예외처리하는 default 내용인데 여기선 쓰지안고 위에 작성내용 사용
// response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
* doPost는 실행시키도록 하는 것
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
run as로 서버랑 연결해서 실행 시, 다음과 같은 주소와 웹페이지를 볼 수 있다.
서블릿과 연계해서 계산기를 만들자.
우선 html 작성한 파일이다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 만들기</title>
</head>
<body>
<h2>계산기</h2>
<hr>
<form method="post" action="/jwbook/calc">
<input type = "text" name = "n1" size ="10"><select name="op">
<option>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select><input type="text" name="n2" size="10">
<input type="submit" value="실행">
</form>
</body>
</html>
이를 실행하면 아래와 같이 나온다. (옵션만 구현한 상태이다.)
계산기
이를 연결하는 서블렛(계산기 작동)을 작성한다
package ch05;
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 CalcServlet
* description이 생략되어 주소형태만 나옴.
*/
@WebServlet("/Calc")
public class CalcServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public CalcServlet() {
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());
int n1 = Integer.parseInt(request.getParameter("n1")); // int 값만 집어넣는 제한이다.
int n2 = Integer.parseInt(request.getParameter("n2"));
String op = request.getParameter("op");
long result = 0;
// 값이 int범위이다. 소수점을 하기위해서는 int와 long을 모두 double로 바꿔야한다.
switch(request.getParameter("op")) {
case "+": result = n1 + n2; break;
case "-": result = n1 - n2; break;
case "*": result = n1 * n2; break;
case "/": result = n1 / n2; break;
}
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.append("<html><body><h2>계산기 서블릿</h2><hr>")
.append("계산 결과: "+ result + "</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);
}
}
실행은 html을 서버로 실행시켜서 서블릿에 자연스럽게 연결한다. (웹브라우저 아님!)
54 나누기 27 실행을 해보면
그러나 26을 나누면 여전히 2만 나온다.
결과와 인풋이 무조건 int와 long으로 제한되어있기 때문이다. (코드 참조)
728x90
반응형
'Programming > Java' 카테고리의 다른 글
AOP (Aspect-Oriented Programming) 관점지향 프로그래밍 (0) | 2023.10.24 |
---|---|
useBean을 이용한 JSP 계산기 파일 단순화 (0) | 2023.10.19 |
Javascript를 넣은 회원가입창 만들기 (1) | 2023.10.18 |
[Java web] Hello JSP (2) | 2023.10.17 |
Interface (인터페이스) (0) | 2023.10.17 |