이제 진짜 웹 서버와 연결해 볼 차례
Web Application Server
웹 서버(Web Server)는 HTTP 요청을 받아 정적 컨텐츠(static contents)를 제공하는 서버이며 동적인 컨텐츠(dynamic contents)제공을 위한 요청을 전달하는 일을 수행해요.
웹 서버가 보낸 JSP, PHP 등의 파일을 실행하고 수행결과를 다시 웹 서버로 보내주는 역할을 해요.
[apache-tomcat-9.0.67]이 다운받아진 경로를 찾아가요. [lib] - [servlet-api.jar] 파일을 복사하여 서블릿을 연결할 [Dynamic Web Project]에서 [src] - [webapp] - [WEB-INF] - [lib]에 복사한 jar 파일을 붙여넣어줘요.
해당 [Dynamic Web Project]를 우클릭 후 [Properties]에 들어가요. 작업창 좌측 메뉴에서[Java Build Path] - [Libraries]로 들어가줘요.
[Classpath] 클릭 후 우측 메뉴에서 [Add Jars...] 를 클릭하여 아까 복사, 붙여넣기한 [servlet-api.jar] 파일의 경로를 찾아 클릭한 후 [OK] 버튼을 클릭 - [Apply] 하여 [Classpath] 해당 jar 파일이 잘 들어가져있는지 확인해줘요. 그리고 [Apply and Close]로 완료해줘요.
서블릿을 연결한 [Dynamic Web Project]에서 [Java Resources] - [Libararies] - [Web App Libraries] 에 서블릿 jar 파일이 잘 들어가져있다면 무사히 서블릿을 연동해준거에요!
<!--
url패턴의 /hello 요청이 들어오면 servelt의 myServelt으로 요청이 가고,
com.koreait.web.servlet.MyServlet 클래스 호출
-->
// 어떤 서블릿?
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.koreait.web.servlet.MyServlet</servlet-class>
</servlet>
// 요청의 형태 : /hello 라는 url이 들어오면 myServlet을 실행시켜라
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
@WebServlet 어노테이션 방식으로 xml에 직접 하드 코딩하지 않아도 서블릿을 사용할 수 있어요.
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("/cnt")
public class MyServlet4 extends HttpServlet{
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
arg1.setCharacterEncoding("UTF-8");
arg1.setContentType("text/html; charset=UTF-8");
// client가 입력한 값을 paramCnt에 담는다.
String paramCnt = arg0.getParameter("cnt");
int cnt = 100;
if( paramCnt != null && !paramCnt.equals("")) {
// String 타입으로 들어온 값이 null 이거나 빈값이 아니라면 int 타입의 cnt 변수에 할당한다.
cnt = Integer.parseInt(paramCnt);
}
PrintWriter out = arg1.getWriter();
// 1부터 client가 param으로 입력한 값까지 for문을 실행한다.
for(int i = 1; i <= cnt; i++) {
out.println(i + " : 안녕 servlet<br>");
}
}
}
param의 형태
/cnt?cnt=3 -> "3"
/cnt?cnt= -> ""
/cnt? -> null
/cnt -> null
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="velog_get.jsp" method="get">
<label>생일</label>
<input type="text" name="birth">
<input type="submit">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
get 방식입니다.
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="velog_post.jsp" method="post">
<label>생일</label>
<input type="text" name="birth">
<input type="submit">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
post 방식입니다.
</body>
</html>
클라이언트로부터 요청이 백엔드로 가기 전에 가로채기 위해서 서버로부터의 응답이 클라이언트로 보내지기 전에 조작하기 위해서 사용해요. 한글이 깨지는 것을 방지한다던지, 특정 인코딩 방식을 부여한다던지하는 필터링이 가능해져요.
출처
https://media.giphy.com/media/dwmNhd5H7YAz6/giphy.gif
https://media.giphy.com/media/3o6Mb9EC7mNqXl9x7y/giphy.gif