https://pabeba.tistory.com/145
저번 시간에 알아본 WAS에 대하여 알아보도록 하겠습니다. 직접 예시를 보면서 알아보도록 하겠습니다.
Servlet 이란?
java web programming 기반 기술입니다.
MVC*의 Controller 역할을 담당합니다.
java class 기반으로 개발합니다.
Servlet의 계층구조 입니다.
Servlet <- Generic Servlet <- HttpServlet <- OurServlet
이렇게 계층구조를 가지고 있습니다. 저희가 만든 Http Servlet은 사실 이러한 계층구조를 가지고 있는 것입니다.
이 계층구조 안에 init, service, doGet, doPost 등의 메소드가 들어가 있는 것입니다.
MVC ( Model2 Architecture 의 MVC 패턴 , Web MVC )
Model : 비즈니스와 데이터 액세스 로직을 담당
View : 응답을 전담, 클라이언트에게 동적인 화면을 제공
Controller : 제어자의 역할, 요청을 분석 , 모델과 연동 , 적절한 View 를 선택해 응답시킴
오늘 공부할 예제는 Annotation 기반 서블릿을 알아볼 예정입니다. 코드는 복잡해 보일지라도 사실은 간단한 것이니 천천히 차근차근 가봅시다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>step1 서블릿 연동</title>
</head>
<body>
<!--
action : 처리할 서버 프로그램 url
서블릿에서는 @WebServlet("/hello") 으로 설정
아래의 form 에서 별도의 요청 방식 request method 을
지정하지 않으면 default 로 get 방식으로 요청
-->
<form action="ho" method="get">
<input type="text" name="keyword" placeholder="검색어" required="required">
<button type="submit">검색</button>
</form>
<br><br>
<!--
링크는 기본적으로 get 요청 방식이다
url?name=value&name=value
위와 같은 형식의 전송 표현을 query string 이라고 한다
-->
<a href="ho?keyword=안녕하세요!">HelloServlet으로 요청</a>
</body>
</html>
설명이 많아서 그렇지 코드 자체는 짧기 때문에 주석을 지우고 보시면 더 편할 것입니다.
<form> 태그를 이용한 url 요청
1. form 태그 안에 action="ho" 이 있는데, 이것이 바로 요청하는 Servlet에 들어가는 url 입니다.
2. Http method 중 GET 메서드를 이용했습니다.
3. button을 통해 submit 할 예정입니다.
<a> 태그를 이용한 url 요청
1. <a> 태그 안에 href는 자체로 url이기 때문에 저렇게 작성해 놓으면 알아서 Servlet으로 요청이 들어가게 됩니다.
일단 저것을 실행해보면!
저장되어있는 폴더에서 html 파일을 읽어와서 실행됩니다.
이제 다음에는 Servlet 파일을 만들고 검색 버튼과 하이퍼링크를 눌러서 Servlet과 연결해보겠습니다.
package step1;
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 HelloServlet
* @WebServlet : 어노테이션 기반 서블릿 설정
* 어노테이션 -> 의미있는 주석으로 주로 설정정보를 명시할 때 사용
* @WebServlet(url-pattern) : url-pattern 이란 클라이언트가 해당 프로그램으로 요청하기 위해 사용하는
* 웹 프로그램의 주소
*/
@WebServlet("/ho")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet doGet()");
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.print("<html>");
out.print("<body>");
out.print("<h3>");
out.print("Hello 서블릿~");
//client가 전송한 keyword 정보를 얻어온다
String data=request.getParameter("keyword");
out.print("<br><br>검색 키워드 "+data+" 검색결과");
out.print("</h3>");
out.print("</body>");
out.print("</html>");
out.close();
}
}
Servlet을 이용하여 response를 html 파일로 보내는 방식입니다.
이제 url 검색어로 들어오는 keyword 파라미터를 가져와서 화면에 나타내는 코드를 작성한 것입니다.
이 코드에서 가장 핵심인 부분이 바로 @WebServlet("/ho") 입니다.
/ho 엔드포인트로 보내고 parameter 값이 'keyword'인 값을 가져오는 것입니다.
그럼 처음에 생성한 html 파일에서 검색을 누르거나 하이퍼링크를 누르면 어떻게 되는지 확인해 볼까요?
/ho로 안녕하세요! keyword 가 보내졌고 브라우저에도 안녕하세요!가 잘 나왔습니다.
근데 keyword의 값에서 %21이 나와있는데 저것은 !(느낌표) 가 디코딩이 되지 않아서 저렇게 보이는 것입니다.
이렇게 연결하면 되는데, http 연결 메서드나 엔드포인트를 변경하면서 원하는 Servlet과 연결해보면서 연습하는 것이 중요하다고 생각합니다.
Post method 같은 경우에는 body 값에 submit 한 값이 들어가서 url에서는 확인 할 수 없지만 똑같이 요청받은 파라미터 값으로 받아오면 됩니다.
소감
오늘은 이렇게 Http 요청으로 Servlet 연결을 해보았는데요. 이제 뭔가 클라이언트와 서버와의 소통이 이루어지고 있다는 것을 느낍니다. 다음 시간에는 조금 복잡하고 심오한 내용을 공부해 보겠습니다. 저도 너무 어려우니 만일 문제가 있다면 도움을 주세요.
'코딩 개발 > Java' 카테고리의 다른 글
JSP (feat. 기본 문법) (2) | 2023.05.21 |
---|---|
Servlet - ServletConfig, ServletContext (0) | 2023.05.20 |
Servlet 생명 주기 (Servlet Life Cycle) (0) | 2023.05.18 |
Java & ORACLE - TRANSACTION (0) | 2023.05.06 |
Java - DB연결을 위한 Cloud Service (feat. AWS EC2, ORACLE) (4) | 2023.04.30 |