2025.4.3 38일차
server 1일차

웹 서버에서 HTTPS를 처리하고 WAS는 내부 네트워크에서 HTTP로 통신하는 구조가 일반적이나, 필요에 따라 WAS 자체에서도 HTTPS를 설정할 수 있음
→ 클라이언트 요청에 따라 고정적인(정적) 페이지를 제공(응답)하는 웹 서버.

Apache Tomcat은 아파치 재단에서 개발한 웹 애플리케이션 서버로, 웹 서버(Apache HTTP Server)와 웹 애플리케이션 서버(Tomcat)
의 기능을 결합한 형태이다.
→ 톰캣이 처리할 수 없는 정적 페이지 처리를 위하여 아파치의 일부 기능을 가져와 함께 제공하는 서버
다운로드 방법
http://tomcat.apache.org/
위 링크 접속하여 왼쪽 메뉴 탭 Download -> Tomcat 10 -> 10.1.xx -> Core -> OS에 맞는 tomcat zip파일 다운로드

웹 서비스를 위한 자바 클래스 (자바를 이용하여 웹을 만들기 위해 필요한 기술)
서블릿(Servlet)은 웹에서 동적인 데이터를 처리하기 위해 사용하는 자바 프로그램이다.
쉽게 말해, 클라이언트(브라우저)에서 보낸 요청을 받아서 처리하고, 결과를 다시 클라이언트에게 응답하는 역할을 한다.
웹 프로그래밍에서 클라이언트의 요청(Request)을 처리하고 그 결과를 다시 클라이언트에게 응답(Response)하는 Servlet클래스의 구현
규칙을 지킨 자바 프로그래밍 기술.
웹사이트에서 단순한 HTML만 제공하면 정적인 페이지밖에 만들 수 없음.
하지만 로그인, 게시판, 데이터 처리 같은 기능을 만들려면 서버에서 프로그램이 동작해야한다.
이 때, 자바 기반의 서버 프로그램인 서블릿을 사용하면 동적인 웹 페이지를 만들 수 있다.
→ 클라이언트 요청에 대한 서버 응답 시 미리 만들어둔 화면(정적)이 아닌 요청을 받을 때 마다 알맞은 화면을 만들어(동적) 응답함.
서블릿 클래스는 javax.servlet.http.HttpServlet 클래스를 상속받아 구현됨.
이를 통해 HTTP 요청을 처리할 수 있다.

지금은 java x 아니고 자카르타!!!

HttpServletRequest : 요청 URL, 파라미터, 헤더 등의 정보를 포함한 요청 객체HttpServletResponse : 응답 내용, 상태 코드, 헤더 등의 정보를 설정하는 응답 객체@WebServlet 어노테이션을 이용하여 요청을 처리할 서블릿을 결정web.xml 파일을 사용했으나, 현재는 @WebServlet 을 이용하여 URL과 서블릿을 매핑하는 것이 일반적임.init() : 서블릿이 처음 생성될 때 한 번만 호출되며, 초기화 작업을 수행service() : 요청이 들어올 때마다 실행되며, 요청 방식(GET, POST 등)에 따라 doGet() , doPost() 등을 호출doGet() 또는 doPost() 메서드에서 동적인 웹 페이지를 생성하고 HttpServletResponse 객체를 통해 응답을 보냄 HttpServletRequest , HttpServletResponse 객체가 소멸됨.Servlet Container(서블릿 컨테이너)는 서블릿(Servlet)을 실행하고 관리하는 환경을 제공한다.
웹 애플리케이션 서버(WAS, Web Application Server)의 핵심 구성 요소 중 하나로, 클라이언트의 요청을 받아 적절한 서블릿을 실행하고,
결과를 클라이언트에게 반환하는 역할을 한다.
Apache Tomcat (가장 널리 사용됨)
Jetty (경량 컨테이너)
JBoss/WildFly (대규모 기업용 WAS 포함)
WebLogic/WebSphere (기업용 상용 WAS 포함)
GET / POST : 클라이언트가 서버로 요청을 보내는 방법
1. GET방식 : (데이터를) 가져오다, 얻어오다

복잡한 Serlvet을 좀 더 간단히 사용할 수 있음.
Servlet과 반대로 HTML소스코드 속에 자바 소스코드(<% %> 또는 <%= %>)가 들어가는 형태.
컴파일을 통해 클래스 파일로 변환되어 웹 서버(WAS)에서 실행됨.

1) 웹 서버가 사용자로부터 서블릿에 대한 요청을 받으면 서블릿 컨테이너에 그 요청을 넘김
2) 요청을 받은 컨테이너는 HTTPRequest와 HTTPResponse객체를 만들어
이를 서블릿 doPost()나 doGet()메소드 중 하나를 호출
3) 클라이언트가 요청에 대한 응답 웹 페이지를 보여줄 때
기존 Servlet에서 출력 객체를 이용하여 HTML 문서 작성하던 부분(프레젠테이션 로직)을 JSP로 분리함.
-> 데이터의 입력, 수정 등의 대한 제어를 JSP로 넘겨 가독성을 높임.
4) JSP에게 넘겨진 프레젠테이션 로직을 수행한 후 컨테이너에게 Response전달
5) 전달받은 JSP 프레젠테이션 로직 수행 결과와 Servlet이 결합되어 .class 파일이 만들어짐
현재의 JSP페이지를 컨테이너에서 처리하는데 필요한 각종 속성을 기술하는 부분으로
보통 소스의 맨 앞에 위치
<%@ page 속성1="속성값1" 속성2="속성값2" ... %>
1.contentType: MIME 형식 지정 및 캐릭터셋 설정(text.html; charset=ISO-8891-1)
<%@ page contentType="text/html" %>
2.import : 자바 클래스 사용, JSP내에서 사용할
외부 자바 패키지나 클래스의 import 지정 = java import
<%page import="java.sql.*, java.util.*" %>
3.errorPage : 오류 페이지 관리, 현재 페이지에서 오류 발생 시 호출될 페이지 지정,
에러 발생시 포워딩(페이지 주소는 그대로고 화면은 이동) 됨
<%@ page errorPage="error.jsp" %>
isErrorPage : 오류 페이지 관리, errorPage속성에 설정된 오류 처리 파일로 다른 용도 사용 못하고 오직 오류만을 처리하는 페이지로 지정(true)true로 두면 exception객체를 쓸 수 있게 된다.
<%@ page isErrorPage="true" %>
5.language : 사용할 스크립트 언어 유형 지정( java)
<%@ page language = "java" %>
session : 세션의 사용유무 (true), 웹 브라우저와 웹 서버가 지속적으로 상대를 인식하기 위해 필요한 정보를 임시로 저장해두는 방법
<%@ page session="true" %>
buffer : 버퍼의 크기 (8KB), jsp페이지 내용을 출력하려면 JspWriter객체인 out변수 사용,
이때 out객체로 사용할 버퍼의 크기 지정 가능
버퍼는 데이터를 좀 더 효율적이고 안전하게 전송하기 위한 프로그래밍 기법으로 전송할 데이터를 미리 확보한 후 조금씩 전송하는 방법
<%@ page buffer="8KB" %>
autoFlush : 버퍼의 내용 자동 비움 (true)
<%@ page autoFlush="true" %>
isThreadSafe : 단일스레드 모델을 사용함으로써 true 동시성 제어 여부 지정 서블릿의 장점은 각 사용자 접속에 대한 요청을 프로세스가 아닌 스레드로 처리 스레드를 이용하면 좀 더 효율적으로 시스템을 운영할 수 있으나 각 스레드가 자원을 공유하게 때문에 이들 데이터에 대한 안정성을 보장할 수 없게 됨
이 옵션은 스레드 상태에서 데이터의 안정성을 보장하는 옵션
<% page isThreadSafe="true" %>
info : JSP 페이지에 대한 설명부분, 일종의 주석
<% page info="JSP Example" %>
pageEncoding : JSP파일(페이지)에 기록된 소스코드 자체의 인코딩 방식
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
( pageEncoding 은 ContentType의 charset 과 동일한 기능을 함)
jsp 파일이 자바파일로 바뀔 때 자바문서에 삽입되어 컴파일 되는 파일 추가
<%@include file="today.jsp" %>
JSP 기능을 좀더 확장할 수 있는 인자
정의된 사용자 정의 태그 가져와 사용할 수 있는 방법 제공
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%! 자바코드 %>
<% 자바코드 %>
<%= 자바코드 %>
이러한 변수를 JSP페에지의 "내장객체변수(implicit variable)"라 함
왜냐하면 웹컨테이너(=WAS, 톰캣서버)가 JSP페이지를 Servlet클래스로 변환해줄 때 자동적으로
변수 선언을 해주기 때문에 변수 선언 없이 그냥 사용 가능
웹클라이언트에서 보내온 데이터 값을 받아서 처리해주는 변수 데이터 저장소 역할을 할 수 있음
웹클라이언트의 요청에 대해 응답결과 처리를 위한 변수
Servlet클래스 안에서 response.getWriter()메소드를 호출해서 얻은 PrintWriter객체와 동일한 기능을 함
session 내장 객체 속에 세션을 시작하고 끝나는 기능과 그 기간동안 웹 컴포넌트(웹서비스를 하고 있는 어디서나)들이 데이터를 주고 받을 수 있는 기능이 들어있음
JSP페이지가 속하는 웹애플리케이션에 관련된 기능을 함
JSP페이지가 속하는 웹애플리케이션의 초기상태와 관련된 기능을 함

아파치모델 10.1 이상은 웹모듈이 6.0 이여야함
5.0이면 안됨


프로젝트명을 /로 바꾸기!!! 최상위클래스로 바꾸기!!!
상대경로 절대경로 편하다.

해서 서버 만들기

web.xml(배포 서술자)
server가 켜지자 마자 프로그램 파일 중 제일 처음 읽는 문서
웰컴파일 리스트 : 메인페이지로 사용할 파일명 목록!!

없다면 404 오류가 뜸 !!! page not found..

서블렛서버 우클릭 run as server: servlet server하면 됨!

빨간불이 들어온 네모 : 서버 연결되어있음
서버 끄고싶으면 다시 빨간 네모 누르기HTTP 상태코드
우리가 흔하게 본 경우 404:

https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status
이클립스라는 에디터에서 Servlet 프로젝트 만지는중인데
vscode라는 에디터에서도 Servlet 프로젝트 만질수있다.
05서버 폴더 열고
webapp에서 index.html열기


이게 내가 vscode로 작성해놓은 index.html
eclipse로 돌아와서

web.xml작성하고 controller로 가기







잘 제출된것을 확인 가능

서버에서 이클립스로 잘 받아옴

개발자도구로 보면


위에는 겟방식

안보임



양식데이터 = form data



자기소개가 있을때,

자기 소개가 없을때는 "자기 소개"라는 h4태그가 안뜸!
하지만 jsp코드는 단점이 있음.
한줄씩 읽어오기 때문에,

{ }를떨어트려서 작성해야함


주문자이름 / 커피 종류 / 아이스인지 핫인지/ 옵션 추가/ 주문버튼
option에 value값이 없을땐 <>안에 내용이 value값으로 넘어감
=> coffee = 아메리카노, coffee=카페라테 이런식으로
그럼이제 컨트롤러 만들기!!!

do get 에서는 super무조건 지우기!!!!
- getParameter("name") : 같은 name속성을 가진 여러개 값중 첫번째 값만 반환
- getParameterValues("name"): 같은 name속성을 가진 모든 값을 배열 형태(String[])로 반환

보여지는 화면 : result2.jsp

홈페이지 열릴때 사이트 이름을 @@@님의 주문결과 라고 적어줬음 좋겠어서 내 코드에서
<title><%=request.getParameter("orderer")%>님의 주문결과 </title>orderer = 주문자이름을 넣어줘서 그렇게 했고 : 탭부분의 제목을 보면 알수있음.

주문한 커피가 ice면 차가운이라는 단어를, hot을 고르면 따듯한이라는 단어를 추가해주기위해서
if문을 사용해주었다.
- 형광펜을 칠한
<%= request.getParameterValues("opt")%>는 우리가 옵션으로 선택한 선택지를 담아놓는 배열의 주소값을 보여주는것


배열이 null 인 경우 = 옵션을 아무것도 선택안했을경우를 대비해서 if문으로
만약에 배열이 null이 아닐때만 저 포문을 돌게 했다,,
근데 왜 이클립스에서도 짜고, jsp에서도 짜는거지?
서로 같은 주소만 참고하고 서로 완전히 다른 객체이기 때문에
그리고 esclipse 내에서 보려고 한 코드임
이 빨간 동그라미 코드만 있어도 됨!!!!

우클릭> 프로퍼티즈-> 메뉴바 중간에 -> 프로젝트 페이셋?
-> 다이나믹 웹모듈 6.0버전체크, 자바1.0버전이 해제 되어있고,자바스크립트도 해제되있고 런타임이 해제 되어있을수 있음
그거 선택 (아파치톰캣)
다른컴퓨터에 -> 서버 추가하고