JAVA 라는 언어속에 HTML 태그들을 끼워넣어서 동작시키려는 시도에
WEB 환경에서도 동작하는 .java 클래스 파일을 생성하게 되었는데 이것을 Servlet이라고 부른다.

Java Resources 폴더에서 우클릭 후 밑에서 3번 째 있는 Servlet을 클릭하면 새로운 Servlet 클래스를 생성가능 하다.
Web에서 모든 요청 방식은 GET 이거나 POST이다.
- GET은 주로 검색에 활용되고 CRUD중 Read인 selectOne selectAll으로 활용된다.
데이터 변화가 없을 때 주로 활용하고 모든 전송 정보를 URL에 오픈한다. - POST는 주로 CUD에 활용된다.
데이터에 변화가 있을 때 주로 활용되고 전송 정보를 보호한다.
Servlet 의 단점
- 잦은 오류(오타) 유발
- 프론트 개발자들이 반드시 JAVA를 배워야 함
Servlet 클래스를 만들어 보았다.
<Servlet 클래스>
package test01;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
/*
모든 Servlet 클래스 파일은 extends HttpServlet을 상속받는다.
가볍지 않음 == not POJO
*/
public class Test01 extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
모든 Servlet 은 기본 생성자로 생성됨
*/
public Test01() { // 멤버변수가 없기 때문에 아무것도 없다.
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8"); // 페이지 관련 설정
PrintWriter out=response.getWriter(); // 페이지 안에 들어갈 태그들을 설정
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>실습 탭</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<H1>Servlet 으로 작성한 웹 페이지</H1>");
out.println("</BODY>");
out.println("</HTML>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
배웠던 Servlet과 HTML을 활용해서 계산기를 만들어 보았다.
<HTML>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/day026/Calc01" method="GET"> <!-- 요청방식(method) default - get -->
정수 01<input type="number" name="num1"> <br>
연산자<select name="op">
<option>+</option>
<option>-</option>
<option>x</option>
</select> <br> <!-- 선택목록을 주려면 -->
정수 02<input type="number" name="num2"> <br>
<input type="submit" value="계산하기">
</form>
</body>
</html>
위와 같은 코드로 정수, 연산자, 정수 순으로 입력을 받은 뒤
요청방식을 GET으로 설정해서 계산하게 되면 Servlet에서 받은 뒤
또 하나의 페이지를 통해 결과값을 보여줄 수 있게 제작했다.
<Servlet>
package calc;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Servlet implementation class Calc01
*/
public class Calc01 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Calc01() {
super();
// TODO Auto-generated constructor stub
}
// Servlet 안에 기능을 넣지않고 클래스를 따로 판다.
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("GET 요청");
int num1,num2,res;
String op;
num1=Integer.parseInt(request.getParameter("num1")); // 자료형 문제로 불러올수 없다. parameter는 String이기 때문에
num2=Integer.parseInt(request.getParameter("num2"));
op=request.getParameter("op");
Calc calc=new Calc(num1,num2,op);
res=calc.getRes();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>계산결과는?</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<H1>계산결과 : "+res+"</H1>");
out.println("</BODY>");
out.println("</HTML>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
doGet()을 사용해 계산 결과값을 또다른 페이지에 출력 시켰다.
두번째로 POST를 사용해 ID와 PW를 입력 한 뒤 로그인 성공 실패를 보여주는
HTML과 Servlet을 작성해 보았다.
<HTML>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시작 페이지</title>
</head>
<body>
<form action="/day026/Test02" method="POST"> <!-- 데이터 전송을 할 것이다. -->
아이디 <input type="text" name="id" required> <br> <!-- 아이디(TEXT)랑 -->
비밀번호 <input type="password" name="password" required> <br> <!-- 비밀번호(화면에 가려지게 PASSWORD) 입력받을 것이다. -->
<input type="submit" value="로그인">
</form>
</body>
</html>
id와 password를 required를 통해 무조건 입력 받아야 submit을 할 수 있게 설정하였다.
그 후 Servlet으로 넘겨주어 성공 실패 화면을 출력 할 수 있게 하였다.
<Servlet>
package test02;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Servlet implementation class Test02
*/
public class Test02 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Test02() {
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());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("POST 요청");
// 변수 선언부
String id,passWord,res;
// 요청입력받는부
id=request.getParameter("id"); // parameter == html의 name에서 받아오는 역할
passWord=request.getParameter("password"); // controller파트 view와 소통을 해야지 변수가 통일된다.
// 기능 수행부
if(id.equals("teemo") && passWord.equals("1234")) {
System.out.println("로그인 성공");
res="로그인 성공";
}
else {
System.out.println("로그인 실패");
res="로그인 실패";
}
// 응답 부 == 화면 출력
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>로그인~~~</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<H1>"+res+"</H1>");
out.println("</BODY>");
out.println("</HTML>");
}
}
Servlet 의 단점
- 잦은 오류(오타) 유발
- 프론트 개발자들이 반드시 JAVA를 배워야 함
2024.08.06
'WEB' 카테고리의 다른 글
| [WEB] 04. MVC파트 나눠서 쇼핑몰 프로그램 설계하기 (0) | 2024.08.12 |
|---|---|
| [WEB] 03-1. Session scope 맞추기 (0) | 2024.08.12 |
| [WEB] 03. JSP 내장 객체 (0) | 2024.08.07 |
| [WEB] 02-2. JSP의 스크립트릿(JAVA 공간)을 JAVA파일로 나누기 (0) | 2024.08.06 |
| [WEB] 02-1. JSP (2) | 2024.08.06 |