<14:30 5교시>
javac.exe 로 컴파일하고 java.exe로 실행했음.
윈도우 명령 프롬프트가 이걸 실행할 수 있는 이유는 환경 변수 창에서 변수를 연결하고 편집해서 가능해진 것.
환경 변수 창에서 사용자에 대한 변수와 시스템에 대한 변수가 있는데, 명령프롬프트가 이걸 읽어서 찾아서 응용프로그램을 바로 실행해줌.
프로젝트 우클릭 export > java의 Runnable JAR file > next >Launch Configuration (Configuration 종류가 너무 많으면 Run Configuration 에서 다 지우고, 만들려는 빌드 파일만 다시 run 해서 뜨게 만들어놓고 진행) >저장을 진행할 경로와 파일 이름 저장
만들고 나서 명령 프롬프트에서
java -jar BookstoRead.jar로 실행 가능
exe 파일 만들기(참고로만 보면 됨)
JSmooth 프로그램을 활용해서 만든다고 함(믿을 수 있는건지는 글쎄 모르겠는데 )
JSmooth download | SourceForge.net
아래거는 맥 환경에서 하는 방법인듯
--- M1 환경에서 네이티브 바이너리 생성
GraalVM 설치:
GraalVM을 다운로드하고 설치합니다.
Homebrew를 사용한 설치:
bash
코드 복사
brew install --cask graalvm/tap/graalvm-ce-java17
Native Image 빌드 도구 설치:
bash
코드 복사
gu install native-image
네이티브 실행 파일 생성:
bash
코드 복사
native-image -jar MyApplication.jar MyApplication
생성된 실행 파일 실행:
bash
코드 복사
./MyApplication
JSmooth 실행하기
앱 여는 화면 영상 찍었는데 도저히 안 올라가는거 같다. 일단 다른 기회에 재시도 해보자.
<15:30 6교시>
java 에서 switch workspace해서 web_work로 바꿔서 launch해서 웹 프로그래밍 시작
다운로드 하고 압축해제해서 web_work 폴더 만든 곳에 놓기
이클립스는 원래 웹 개발을 위한 환경을 준비하고 있다.
서버를 등록하고 웹 개발을 시작할 수 있다.
디폴트로 사용하는 포트가 오라클과 겹친 상태이기 때문에 포트번호를 8888로 바꾼다.
server.xml > 소스코드 > 64행 port를 8888로 바꾸기
서버를 시작하고 종료하는 방법
add 한 다음 서버를 시작하고 주소창에 localhost:8888/Hello/index.html을 입력하면 방금 작업한 html 페이지가 보임.
Hello는 프로젝트 이름인데 이게 webapp/ 폴더로 인식된다. 내 컨텐츠는 웹 앱 폴더 안에 넣기만 하면 톰캣 서버가 알아서 읽어서 웹에 응답해줌.
인바운드 규칙 설정하기
고급 보안이 포함된 Window 방화벽> 인바운드 새 규칙 > TCP/IP 포트 8888
포트를 연 컴퓨터가 있다면 해당 컴퓨터의 아이피 주소로 들어가서 html 파일을 볼 수 있다.
http://아이피주소:포트번호/Hello/index.html
<16:30 7교시>
이클립스에서 자바스크립트 마크업을 쉽게 작성할 수 있게 해주는 기능을 추가로 설치하기 위해 아래링크의 내용을 진행한다.
Emmet — the essential toolkit for web-developers
여기서 다운로드 > 이클립스를 누르면 아래의 링크가 나온다.
GitHub - emmetio/emmet-eclipse: Emmet for Eclipse
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.html</title>
</head>
<body>
<h1>인덱스 페이지</h1>
<p>내 이름은 : <strong>수정</strong></p>
<img src="images/1.png"> <!-- 현재 위치를 기준으로 한 상대경로 이용해서 이미지 로딩 -->
<img src="/Hello/images/1.png"> <!-- 톰캣서버내에서의 절대경로 이용해서 이미지 로딩 -->
<img src="http://localhost:8888/Hello/images/1.png"><!-- 웹상에서의 절대경로를 이용해서 이미지 로딩 -->
</body>
</html>
아래만 만들면 404 에러가 발생함
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.html</title>
</head>
<body>
<h1>인덱스 페이지</h1>
<p>내 이름은 : <strong>수정</strong></p>
<img src="images/1.png"> <!-- 현재 위치를 기준으로 한 상대경로 이용해서 이미지 로딩 -->
<img src="/Hello/images/1.png"> <!-- 톰캣서버내에서의 절대경로 이용해서 이미지 로딩 -->
<img src="http://localhost:8888/Hello/images/1.png"><!-- 웹상에서의 절대경로를 이용해서 이미지 로딩 -->
<ul>
<li><a href="sub/play.html">놀러가기</a></li>
</ul>
</body>
</html>
이것까지 만들어야 404 에러 없이 제대로 만들어짐.
지금 하고 있는 것은 상대 경로 연습
톰캣서버내에서의 절대 경로를 이용해서 로딩하는 것을 제일 많이 사용한다고 함.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index.html</title>
</head>
<body>
<h1>인덱스 페이지</h1>
<p>내 이름은 : <strong>수정</strong></p>
<img src="images/1.png"> <!-- 현재 위치를 기준으로 한 상대경로 이용해서 이미지 로딩 -->
<img src="/Hello/images/1.png"> <!-- 톰캣서버내에서의 절대경로 이용해서 이미지 로딩, 제일 많이 사용함-->
<img src="http://localhost:8888/Hello/images/1.png"><!-- 웹상에서의 절대경로를 이용해서 이미지 로딩 -->
<ul>
<li><a href="sub/play.html">놀러가기 with 상대경로</a></li>
<li><a href="/Hello/sub/play.html">놀러가기 with 톰캣서버내 절대경로</a></li>
<li><a href="http://localhost:8888/Hello/sub/play.html">놀러가기 with 웹상에서의 절대경로</a></li>
</ul>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>playplayplay</title>
</head>
<body>
playplayplay
<img src="../images/1.png">
<!-- 여기에 <img src="images/1.png">라고 쓰면 이미지를 찾을 수 없다 상대 경로라서 -->
<img src="/Hello/images/1.png"> <!-- 절대경로라서 똑같이 씀 -->
<img src="http://localhost:8888/Hello/images/1.png"><!-- 절대경로라서 똑같이 씀 -->
<ul>
<li><a href="../index.html">상대경로로 인덱스로 돌아가기</a></li>
<li><a href="/Hello/index.html">절대경로로 인덱스 들어가기</a></li>
<li><a href="http://localhost:8888/Hello/index.html">절대경로로 인덱스 들어가기</a></li>
<!-- 대문페이지는 따로 명시하지 않으면 자동으로 index.html 페이지가 응답된다 -->
<li><a href="http://localhost:8888/Hello/">인덱스</a></li>
<li><a href="/Hello/">인덱스</a></li>
</ul>
</body>
</html>
<17:30 8교시>
웹 프로그래밍 : 어떤 요청을 했을 때 어떤 응답을 할지만 프로그래밍하면 된다.
서버의 구조를 몰라도 이미 만들어진 구조를 활용하면 된다. (이럴거면 왜 배우고 있는건지 현타 또 오네)
package test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
//3. 어떤 요청이 왔을 때 이 클래스로 생성된 객체로 응답을 할지 정해야 한다.
@WebServlet("/ping")
public class PingServlet extends HttpServlet{
//이 클래스로 생성된 객체가 tomcat 서버에서 /ping 요청이 오면 직접 응답하도록 코딩해야 함...
//이미 만들어진 서버의 부품으로 들어갈 클래스라 마음대로 만들면 안된다 -> 상속받거나 구현해서 만들어야 함
//1. HttpServlet 추상 클래스를 상속 받음
//2.부모의 service()메소드를 오버라이딩 한다
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//이 안의 내용이 /ping에 대한 요청이 있을 때 실행된다. arg0은 요청에 관련된 정보를, arg1은 응답에 필요한 객체의 도구를 작성
//톰캣서버가 객체의 참조값을 전달해주고, 이 객체를 활용한 응답을 작성하기
//클라이언트에게 문자열을 출력할 수 있는 객체를 얻어낸다.
PrintWriter pw=response.getWriter();
//핑요청을 한다면 그게 클라이언트의 웹브라우저에 출력된다.
pw.println("pong");
pw.close();
}
}
근데 지금 응답으로 주어진 pong은 웹브라우저가 보기엔 html이 아니다.
근데 이 형태로 응답을 html로 작성하는 것은 고통이다.
코딩도 할 수 있고 html도 응답할 수 있는 해결책을 앞으로 배울 것인데. 일단은 무식하니까 아래 화면 같이 작성하는 수 밖에라고 하심...
package test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
//3. 어떤 요청이 왔을때 이 클래스로 생성된 객체로 응답을 할지 정해야 한다.
@WebServlet("/ping")
public class PingServlet extends HttpServlet{//1. HttpServlet 클래스를 상속 받는다.
//2. service() 메소드를 오버라이딩 한다.
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//클라이언트에게 문자열을 출력할수 있는 객체를 얻어낸다.
PrintWriter pw=response.getWriter();
//이객체를 이용해서 출력하는 문자열은 요청을 한 클라이언트에게 출력된다.
pw.println("<!doctype html>");
pw.println("<html>");
pw.println("<head>");
pw.println("<meta charset='utf-8'>");
pw.println("<title>나의 페이지</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<h1>pong!</h1>");
pw.println("</body>");
pw.println("</html>");
pw.close();
}
}
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 1/6 오전 기록 031-1 (0) | 2025.01.06 |
---|---|
자바 풀 스택 1/3 오전 기록 030-1 (1) | 2025.01.03 |
자바 풀 스택 1/2 오전 기록 029-1 (0) | 2025.01.02 |
자바 풀 스택 12/31 오후 기록 028-2 (0) | 2024.12.31 |
자바 풀 스택 12/31 오전 기록 028-1 (1) | 2024.12.31 |