KITRI에서 배운 Servlet을 토대로 작성해봤습니다.
서블릿은 자바의 웹프로그래밍을 하기 위한 기술로 서블릿 컨테이너의 탑재되어
사용자의 요청과 응답을 동적으로 처리하기 위한 프로그래밍입니다.
클라이언트(html)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="http://localhost:8080/webTesting/com/java/servlet/Example03" name="msg" method="post">
<label>메시지</label>
<input type="text" name="msg">
<br><br>
<input type="submit"value="전송">
<input type="reset" value="취소">
</form>
</body>
</html>
클라이언트 측에서 post로 서버에 메시지데이터를 넘겨준다.
web.xml (웹서버설정)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>webTestting</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Example03</servlet-name>
<servlet-class>com.java.servlet.Example03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Example03</servlet-name>
<url-pattern>/com/java/servlet/Example03</url-pattern>
</servlet-mapping>
</web-app>
톰캣 설정 파일인 web.xml 에서 servlet과 servlet-mapping을 명시해준다.
은 사용자가 요청할 URL을 입력하면 된다.
Servlet (서버 처리)
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Example03 extends HttpServlet{
private static final long serialVersionUID = 1L;
public Example03() { // 생략가능이 가능하다.
super();
}
@Override
public void init() throws ServletException { // 생략이 가능
System.out.println("init() 생략가능, 처음 서버메모리에 올라갈때 한번 실행");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String msg = req.getParameter("msg");
System.out.println(msg);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String msg = req.getParameter("msg");
System.out.println(msg);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service() 생략가능, 스레드 처리되서 반복 실행");
// doGet(req,resp);
doPost(req, resp);
}
@Override
public void destroy() {
System.out.println("destory() 생략가능, 서버종료 및 업데이트 시");
}
}
실제 개발자가 구현할 때는 doGet(), doPost() 메소드만 구현하면 된다.
사용자가
http://localhost:8080/webTesting/com/java/servlet/Example03
로요청을 하여 서버로 데이터를 넘기고 web.xml로 mapping된 servlet을 찾아 알맞는 servlet을
호출한다 호출된 서블릿이 doGet,doPost 에 알맞는 메소드를 호출하고 구현된 로직을 실행한다.
Request 객체
- 한글 Encoding 기능
- 파라미터 읽기 기능
- 서버와 관련된 정보 읽기 기능
- 웹브라우저 관련 정보 읽기 기능
- 헤더 읽기 기능
- 쿠키 읽기 기능
- 속성 처리 기능
위와 같은 기능들은 전부가 아니고 더 있지만 우리가 배운것에는 이 정도만 기술한다.
doGet() 메소드의 구현된 Request 객체의 다양한 함수들을 살펴보자
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 인코딩(UTF-8) 설정, 한글가능
request.setCharacterEncoding("utf-8");
// su 파라미터 가져오기
int su = Integer.parseInt(request.getParameter("su"));
System.out.println(su);
// 서버 관련 정보 읽기
String serverName = request.getServerName();
int serverPort = request.getServerPort();
System.out.println("서버이름 : " + serverName);
System.out.println("서버포트 : " + serverPort);
// URL, URI, ContextPath, ServletPath는 진짜 중요중요 정말 많이 쓴다.
// 파라미터 가져오는건 하도 많이 쓰니 까먹지 않겠지만 다음 기능들은 잘 익혀두자.
// Uniform Resource Location(URL), http://localhost:8080/webTesting/com/java/servlet/Example06
StringBuffer url = request.getRequestURL();
// Uniform Resource Identifier(URI), /webTesting/com/java/servlet/Example06
// 해당 컨텍스트패스부터 시작해서 서블릿까지의 경로
String uri = request.getRequestURI();
// URI , URL 의 차이를 확실히 알고가자.
String contextPath = request.getContextPath(); // /webTesting
String servletPath = request.getServletPath();// /com/java/servlet/Example06
System.out.println("url : "+url);
System.out.println("uri : "+uri);
System.out.println("contextPath : "+contextPath);
System.out.println("servletPath : "+servletPath);
System.out.println("요청방식 : "+request.getMethod());
// 클라이언트 및 웹브라우저 관련 정보 읽기(자주 쓰지는 않는다)
System.out.println("요청프로토콜: " + request.getProtocol());
System.out.println("클라이언트 주소: " + request.getRemoteAddr()); // 로컬서버에서 동작하면 클라 주소가 나오지 않는다.
System.out.println("클라이언트 포트: " + request.getRemotePort());
// 헤더 읽기, HashMap의 대해 알고접근하자.(Enumeration과 비슷)
// 나중에 header의 정보를 바꿔 response하는 법을 배울것이다. 이종화바보
Enumeration<String> header = request.getHeaderNames();
while(header.hasMoreElements()) {
String key = header.nextElement();
String value = request.getHeader(key);
System.out.println("key : " + key + ", value : "+ value);
}
//쿠키 읽기(request) - 쿠키 저장(Response)
//속성 처리(session과 같은)
// html -> servlet, servlet -> servlet 데이터가 이동할 때 모두 Request 객체를 타고 이동한다.
}
다음 시간에 Response객체에 대해 알아보도록 하자.
'WEB > Servlet,JSP' 카테고리의 다른 글
JSP의 표현언어 EL이란? (0) | 2020.06.11 |
---|---|
컨텍스트 리스너(Context Listener)란?? (0) | 2020.06.10 |
쿠키(Cookie)와 세션(Session) (0) | 2020.06.09 |
sendRedirect, include, forward의 차이점 (0) | 2020.06.09 |
Servlet, JSP의 객체 범위 (0) | 2020.06.09 |