Ex URL) http:// localhost:8080/BoardWeb/index.html
프로토콜 : 자원에 접근하기 위해 서버와 통신하는데 사용되는 통신규약 (http)
호스트명 : 자원을 제공하는 서버의 이름 (localhost)
포트번호 : 통신에 사용되는 서버의 포트번호 (8080)
경로명 : 접근하려는 자원이 저장된 서버상의 위치 (BoardWeb)
파일명 : 접근하려는 자원의 이름 (index.html)
쿼리 (query) : URL에서 ? 이후 부분, key = value로 구성
참조 (anchor) : URL에서 # 이후 부분
웹 브라우저를 클라이언트로부터 HTTP요청을 받아들이고 HTML 문서와 같은 웹 페이지를 반환
정적 컨텐츠 제공
동적 컨텐츠를 위한 요청 전달
인터넷 상에서 HTTP프로토콜을 통해 사용자 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어
MDN HTTP 설명 https://developer.mozilla.org/ko/docs/Web/HTTP
JAVA 기반 서블릿 컨테이너또는 웹 컨테이너만 있는 웹 애플리케이션 서버
https://tomcat.apache.org/
기능을 분리하여 서버의 부하 방지
물리적으로 분리하여 보안 강화
여러대의 WAS 분산시켜 서비스를 제공
동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
HttpServlet을 상속받아서 사용해야함
기존의 정적 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공
JAVA의 스레드를 이용하여 동작
MVC패턴에서 컨트롤러로 이용됨
하나의 서블릿에 두 개 이상의 mapping-url을 사용할 수 있음
container 가 관리함
container의 역할 : 객체 생성을 알아서 해줌 (싱글톤), MVC-패턴의 controller로 사용됨
래퍼런스 ?
https://javaee.github.io/javaee-spec/javadocs/javax/servlet/http/HttpServlet.html
String getParameter()PrintWriter getWriter()setContentType()protected void doGet(HttpServletRequest, HttpServletResponse)protected void doPost(HttpServletRequest, HttpServletResponse)tomcat Server사용, Dynamic Web Project로 생성
어노테이션의 url-Mapping을 간략하게 사용할 수 있음
@WebServlet("/check")
같은 url 이라면 어노테이션, xml 중 하나만으로 표현해야함
webapp의 web.xml 파일에서의 url-Mapping
<!-- 1. 대상 서블릿 지정 -->
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>step01.FirstServlet</servlet-class>
</servlet>
<!-- 2. 서블릿 매핑 url 지정 (단일, 다중) -->
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
getParmeter(key) : 해당 key의 value를 받음
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1> <!-- action에 서버 경로 지정 -->
<form action="check" method="POST">
<input type="text" name="id">
<input type="submit" value="로그인">
</form>
</body>
</html>
@WebServlet("/valid")
public class Validation extends HttpServlet {
private static final long serialVersionUID = 1L;
// 같은 데이터 값을 연결하려면 같은 방식으로 연결해야됨 POST
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("Welcome, " + id);
}
}
@WebServlet("/invalid")
public class Invalidation extends HttpServlet {
private static final long serialVersionUID = 1L;
// redirect는 실패에 대한 재요청을 해야하기 때문에 doGet을 써야함
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Not User");
}
}
@WebServlet("/check")
public class IdCheck extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// login.html - id : dev 로그인 성공 페이지로 이동 / 실패 페이지로 이동
String id = request.getParameter("id");
System.out.println(id);
request.setCharacterEncoding("UTF-8");
// forward(상태 데이터 값 유지 : 성공) vs redirect(상태 유지 불필요 : 실패)
if ("dev".equals(id)) {
// 성공 페이지로 이동 valid
request.getRequestDispatcher("valid").forward(request, response);
} else {
// 실패 페이지로 이동 invalid
response.sendRedirect("invalid");
}
}
}
문제점 : 화면에 한글이 출력되지 않음
response.setContentType("text/html; charset=UTF-8");
문제점 : 체크박스로 된 값을 가져와야 함
request.getParameter()
url-Mapping에서 대소문자 때문에 예외가 발생할 수 있음
관련된 개념이나 사용법은 크게 어렵지 않으나 조금 폴더 구조에 대해 더 이해가 필요함
위 폴더구조 때문에 action에 입력할 서버 경로를 제대로 지정하지 못함
첫 Web은 기존에 알던 지식과 비슷한 부분이 많아서 크게 어렵지 않았음
대신 사용자의 부주의나 사용환경에 따라 예외가 더 많아지므로 더 신경써야할 부분이 많아짐
window 와 mac은 환경설정, 셋팅에서 더 많이 달라지는 것 같음, jdk버전을 달리 쓰고 있어서 폴더구조가 많이 헷갈림