Servlet 주요 build tool
Maven : Spring lagacy project
Gradle : Spring boot
Ant : (사용x, 한물 갓슈)
❓Build란 무엇인가요?
우리가 작성한 sourse code를 실행할 수 있는 독립적인 형태로 변환하는 과정 + 그 결과물
① project 생성
② 라이브러리 설정
③ code 작성
④ compile과정
⑤ test 과정
⑥ packaging(하나의 파일로 압축)
⑦ 배포
💥 이 과정을 조금 더 효율적으로 처리해보자! => Maven
Maven은 특정 ID에 종속되지 않는 별도의 툴
Maven을 쓰는 주된 이유
: 라이브러리를 편하게 관리할 수 있어요!
우리가 사용하는 Servlet API는 4.0버전
(https://tomcat.apache.org/tomcat-9.0-doc/servletapi/index.html)
maven tomcat 라이브러리
https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api/9.0.71
maven mysql 라이브러리
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.28
pom.xml에 라이브러리를 설치하면 사용자 파일 내 이런 형태로 빌드툴이 저장된다.
이제 기존에 했던 웹프로젝트를 메이븐 형태로 만들어보자
서블릿 컨테이너는 Clinet의 Request를 받아주고 Response할 수 있게 통신해요
요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성
-> HTTP 서비스 메소드(doGet, doPost)를 실행하고
-> doGet, doPost가 종료되면
-> 다음번에 Thread 탁 나오고
-> 서비스 호출
-> (반복)
스레드가 실제로 어떻게 동작하는지 알아두자❗
① Context root
: 우리의 프로젝트를 클라이언트가 웹상에서 식별하기 위한 논리적인 이름(한글, 공백, 특수문자 안써요!)
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.71</version>
</dependency>
</dependencies>
@WebServlet("/sayHello")
public class HelloWorldServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorldServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// GET방식으로 호출되면 결국 돌고 돌아서 이 method가 Thread에 의해서 호출되는거에요
// 1. 클라이언트가 보내준 데이터를 받아요 => request
// 2. 로직처리해요(DB처리 보험해서)
// 3. 출력 처리해요 => response
// 1. 처리된 결과를 보내주기 전에 먼저 처리한 결과가 어떤 데이터 인지를 먼저 알려줘야해요
response.setContentType("text/html; charset=UTF-8");
// 2. 실제 결과 데이터를 전성하면 돼요!
// 네트웍을 통해서 전송해야 하기 떄문에 stream을 열어 데이터 전송
PrintWriter out = response.getWriter();//클라이언트한테 이 통로를 통해 전송
out.println("<html><head></head><body>삐릭삐릭</body></html>");
out.close(); //stream을 닫아요!
}
/**
* @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);
}
}
클라이언트가 서블릿에게 데이터를 전달하고 싶어요!
web에서 URL뒤에 특정 문자열
을 이용해서 Data를 전달하는 방법
: Query String (무적권 Get방식)
?key=value&
연습1) 클라이언트가 2개의 숫자를 보내면 그 합의 결과를 알려주는 ㅅㅂ릿 작성해보자
단, Query String을 사용하자
@WebServlet("/sum")
public class AddServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AddServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 이 서블릿을 호출하려면
// http://127.0.0.1:8080/first/sum?num1=10&num2=20&
// 1. 입력처리
// Query String으로 부터 데이터를 받으려면
// 일단 기억해야하는건 입력받은 데이터는 무조건 문자열이에요
String num1 = request.getParameter("num1"); // 10
String num2 = request.getParameter("num2"); // 20
// 2. 로직처리
int sum = Integer.parseInt(num1) + Integer.parseInt(num2);
// 3. 출력처리
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head></head><body>" + sum + "</body></html>");
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);
}
}
긁적긁적... 스치듯 읽고 갑니다 (스윽...)