미리 알아두자 !
HTTP : HyperText Transfer Protocol
인터넷으로 통신하기 위한 규약
WAS (Web Application Server) : Web Server + Web Container
Web Server : HTTP 프로토콜에 의거하여 HTML 서비스하는 서버
Web Container : Servlet/JSP(+Spring Framework) 실행 환경을 제공
* WAS 중 Apache Tomcat 사용 : 환경설정 → https://creamilk88.tistory.com/75?category=872949
- tomcat/conf/server.xml에서 port 수정 (8080 → 8888)
: 이유는 오라클 port가 8080이므로, 충돌을 피하기 위해 수정 - URIEncoding = "utf-8" 추가
: http get 전송방식으로 전달되는 데이터의 한글처리를 위해 - tomcat/conf/context.xml에서 reloadable="true" 처리
: 코드 수정 시, 서버 재시작없이 다시 리로드되도록 설정
Servlet 란?
: java web programming의 기반 기술
- java class로 표현됨
- Model2 Architecture (MVC Pattern)의 Controller 역할을 한다.
( Spring Framework의 웹기술인 SpringMVC의 FrontController인 DispatcherServlet도 서블릿이다! )
JSP 란?
: Java Server Page 웹 페이지의 생산성을 위한 기술
- HTML 구조 상에서 JSP Tag과 java code를 삽입한다.
- Web Container에 의해 서블릿으로 변경되어 실행된다.
- Model2 Architecture (MVC Pattern)의 View 역할을 한다. <% %>
* 참고 ) MVC → Model + View + Controller
- Model : java (DAO, Service, DTO or VO)
- View : JSP
- Controller : Servlet
간단 예제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>서블릿 기본</title>
</head>
<body>
<%
for(int i=0; i<10; i++){
%>
Hello Servlet / JSP ! <br>
<%
}
%>
</body>
</html>
≫ HTML처럼 생겼지만 실제 동작은 Web container에 의해 서블릿으로 변경되어,
java파일과 class파일로 실행이 된다
web.xml
: Deployment Discriptor 배포 기술서
- WEB-INF / 아래에 위치하는 파일로서 웹 어플리케이션의 설정 정보를 저장하는 곳이다.
web.xml 예시
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>webstudy4-servlet-basic</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>step1.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/h</url-pattern>
</servlet-mapping>
</web-app>
servlet class
Java Programming에서 ServelHelloServlet.java 작성하여 실행해보기
package step1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet{
private static final long serialVersionUID = -4596175650449887119L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//실행 잘 되는지 확인
System.out.println("Hello, Servlet doGet() 실행");
//charset=utf-8 : 한글 호환설정되도록 !
response.setContentType("text/html; charset=utf-8");
//response 실습
PrintWriter out = response.getWriter();
//html 입력문 쓰기
out.println("Hello, Servlet!<br><br>");
out.println("반가워요 서블릿!<br><br>");
out.println("get방식으로 요청하셨군요!<br><br>");
//사용자가 전송한 데이터를 반환받는다
String info = request.getParameter("info");
out.println("<hr>사용자가 전송한 정보: "+info);
//close() 단계에서 flush됨
out.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//실행 잘 되는지 확인
System.out.println("Hello, Servlet doPost() 실행");
response.setContentType("text/html; charset=utf-8");
//response 실습
PrintWriter out = response.getWriter();
//html 입력문 쓰기
out.println("Hello, Servlet!<br><br>");
out.println("<font color=red>반가워요 서블릿!</font><br><br>");
out.println("<font color=red>post방식으로 요청하셨군요!</font>");
//post 방식일 때는 별도의 한글처리가 필요하다
request.setCharacterEncoding("utf-8");
//사용자가 전송한 데이터를 반환받는다
String info = request.getParameter("info");
out.println("<hr>사용자가 전송한 정보: "+info);
//close() 단계에서 flush됨
out.close();
}
}
HTML 예시
<form
method : 서버에 전송하는 방식을 명시
action : 처리할 서버 프로그램 url (web.xml에 명시) >
</form>
get 방식 : 기사 검색 등에 이용
post 방식 : 로그인 등에 이용
*밑에 추가 설명 있음
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>http get, post 방식</title>
</head>
<body>
<form method="get" action="h"><!-- method 명시하지 않으면 기본이 get -->
<input type="text" name="info">
<input type="submit" value="get방식 요청">
</form>
<hr>
<form method="post" action="h">
<input type="text" name="info">
<input type="submit" value="post방식 요청">
</form>
</body>
</html>
[ html 화면 ]
[ get 방식 결과 ]
[ post 방식 결과 ]
HTTP Request Method (요청방식)
1. get 방식 : 주로 정보 조회 용도
- DB에서 SQL의 DML의 SELECT 부분 → 서버의 상태에 영향을 주지 않는다
- html form tag에 별도의 method 설정이 없을 때는 'get'이 default 값이다.
< a href = "" > </a> 웹페이지 링크는 get방식으로 요청된다.
- 브라우저의 url 상에서 입력한 정보가 노출된다.
- 중요한 사용자 정보나 데이터 양이 많은 정보는 부적합
- get 방식 한글처리는 server.xml에서 URIEncoding="utf-8"로 설정했으므로, 별도의 한글처리는 필요하지 않다.
2. post 방식 : 정보 전송 용도
- DB에서 SQL의 DML의 INSERT/DELETE/UPDATE 부분 → 서버의 상태에 영향을 준다
- 브라우저 url 상에 정보가 노출되지 않는다.
- 사용자 정보나 데이터 양이 많은 경우 적합하다.
- http body 부분에 정보가 저장되므로, 별도의 한글처리가 필요하다.
Service 계열의 Method
1. doGet() ← html get방식 요청에 반응하여 실행
2. doPost() ← html post방식 요청에 반응하여 실행
Service 계열의 Method의 매개변수
doGet( HttpServletRequest request, HttpServletResponser reponse ) {}
doPost( HttpServletRequest request, HttpServletResponser reponse ) {}
HttpServletRequest : 클라이언트의 요청 정보를 저장하는 객체
HttpServletResponser : 클라이언트에게 응답할 정보를 저장하는 객체
http error code
404 → 처리할 프로그램이 없을 때 발생하는 에러
405 → 요청방식 (get or post)에 대응하는 서버 상의 구현 메서드가 없을 때 발생하는 에러
HTTP Request , Response 메세지 구조
1. HTTP Request
1) Start Line : HTTP Method( Get / Post .. ), Request Target(처리할 서버프로그램 url), HTTP 버전
2) Headers : request 요청 상세 정보( user-agent : 현 브라우저 종류 , content-type, content-length등 기술)
3) body : Get 방식일 경우에는 공란이며, Post 방식일 경우에는 전송한 정보 데이터가 기술되어 있음
2. HTTP Response
1) Status Line : status code 응답 상태를 나타내는 코드 (200 정상 수행, 404 Not Found error, 405, 500 error 등)
2) Headers : response 상세 정보, content-type(html, xml, image, audio, video..),
content-length, cookie configuration 등
3) body : 응답할 메세지 정보 (html, xml, json, file 등)
'Java Web Programming > 3. Servlet' 카테고리의 다른 글
[Servlet] 서블릿 Life Cycle 생명주기 (0) | 2020.08.21 |
---|---|
[Servlet] 서블릿 Hierarchy 계층 구조 (Web Container, Web Server) (0) | 2020.08.21 |
CODE [Servlet] check box 연습 예제 (3) | 2020.08.21 |
[Servlet] form 연동 (2) | 2020.08.20 |
[Servlet] Web 기초 (0) | 2020.08.20 |