본문 바로가기
JAVA 수업/웹(WEB) 수업 기록

0710 수업 내용

by 예림220 2023. 7. 10.

웹 기술

 - WB(웹브라우저)에서 실행 / HTML / CSS / JS (ClientSideScript) 

웹 브라우저에서 HTML 요청 > 웹서버에 있는 HTML 페이지를 찾음 (그 파일 내용(a.HTML)이 응답) = 누가 요청해도 똑같은 파일내용이 응답됨 

 

웹브라우저에서 요청한 내용은 웹서버에서 응답해줌. 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

- WS에서 실행: 서블릿 / JSP, PHP, ASP ) ServerSideScript 

<기반언어

서블릿/JSP 기반 언어: 자바언어 > 실행하기 위해서는 '엔진(컨테이너)'이 필요함 = 서블릿/ JSP실행엔진용 웹서버 = 톰캣, 레진, (웹로직/웹스피어/제우스  = 자바기반의 WAS) 

(WAS? Web Application Server: 어플래케이션 역할과 웹 역할을 하는 서버)

( 톰캣서버는? WAS 아님 / 웹서버연동: 보통 톰캣 + 아파치, 톰캣 IIS 연동해서 사용)

PHP 기반언어: C++ , 기반언어(?) > 주로 아파치 웹서버에서 실행함 (PHP를 실행할 수 있는 모듈이 아파치 내에 내장되어 있음) 

ASP 기반언어: 기반언어(?) >

3개를 실행시킬 엔진이 따로 있다.  

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

왼쪽: 이클립스 경로 오른쪽: 톰캣경로

 

컴파일된 클래스들이 배포될 톰캣 서버 파일에 복사붙여넣기 되어있음

이클립스에 디렉토리는 톰캣서버에 배포되기 위해 만들어진 디렉토리이다

 

표준화된 구조(초록색 부분)로 되어있기 때문에 웹로직, 웹스피어 등에 배포할 수 있다.
톰캣서버에 back 파일 배포시키는 과정

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

자바 특수 애플리케이션 :

Booklet 

Applet

Servlet : 서버쪽에서 사용되는 특수 애플리케이션 

Middlet 

 

톰캣시작 -> (웹컨텍스트별로) ServletContext 타입의 객체생성 (서블릿 엔진이 객체생성 시켜줌) -> 

웹컨텍스트란? = 웹모듈 = 웹어플리케이션 

 

 

 

 

서블릿컨텍트타입의 객체가 제일 오랫동안 남아있다. (톰캣이 사용할 수 있는 동안 사용할 수 있는 정보를 넣어준다) 

요청이 소멸될 때 없어져도 되는 정보는 request에 정보를 셋팅해준다. 

 

 

타겟런타임 - 아파치 톰캣 9.0 선택하는이? 톰캣에서 제공되는 클래스들을 사용할 수 있음 

(현: 아파치 톰캣 9.0) 

 

자바쪽에서 제공하는 추상클래스
아래 체크: 배치기술서를 만들겠다(체크) : 배포할 때 필요한 명세서를 만들겠다.

 

3.0 버전부터 오른쪽(17번째줄) 로 배치기술서 저렇게 바뀌었다

그래서 web.xml > 오른쪽으로 바뀌었다 (3.부타) 

 

LifeCycle 

/life

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

localhost:8888/backstudy/life

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

http://localhost:8888/backstudy/life - get방식 요청 

localhost:8888/backstudy/life

 

주소를 직접 입력하는 방식은 GET 방식이다 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

현재 실행하면 > 

널포인트익셉션

 

서버 프로그램이 죽어버릴때 500번 오류가 뜹니다. null타 입센션이 발생되면  프로그램이 죽어버린다.

 

코드 옮기기

이클립스의 디렉토리가 실제 경로로 출력된것이 아니다. (이클립스의 디렉토리는 배포를 하기 위한 경로이다) 

(실제 배포된 경로:

)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------a.txt. 파일의 실제 경로를 가지고 파일 내용을 읽고, 쓰기 

 

요청시마다 호출되는 메서드
객체가 없을 때 호출되는 메서드는 - init 메서드

 

init  : 서블릿 객체가 없을 때 호출 됨

doGet :  서블릿 객체가 있을 때 & 요청시마다 호출 됨 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

지역변수를 멤버변수로 변경해줌

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

package control;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Lifecycle extends HttpServlet {
private static final long serialVersionUID = 1L;
private String aFileRealPath;

public Lifecycle() {
super();
}

public void init(ServletConfig config) throws ServletException {
super.init(config);
ServletContext sc = this.getServletContext();
aFileRealPath = sc.getRealPath("a.txt");
System.out.println("a.txt파일의 실제경로:" + aFileRealPath);
System.out.println("init()호출됨");
}

public void destroy() {
}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("doGet()호출됨");
FileInputStream fis = null;
try {
fis = new FileInputStream(aFileRealPath);
Scanner sc = new Scanner(fis);
while (sc.hasNextLine()) {
System.out.println(sc.nextLine());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {

}
}
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

파일변경시 알아서 바뀜 (아래처럼)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

xml파일로 관리 

이렇게 매번 a.txt 리로드 할 필요 없고
xml에서 한거를 가져옴

 

디벨로퍼심예림이 서블렛컨텍스트 파라메터에 들어간다
이름이 중복되지 않으면 여러 파라메터를 가질 수 있다.

파라메터 값이 오랫동안 유지되어야 할 값이면 서블렛 컨텍스타 타입의 파라메터로 사용한다. 

서블릿 컨텍스트 타입의 파라메터 (공유객체) 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<form method="get" action="/backstudy/life">

<input type="text" name="t">

<button>전송</button>

</form>

 

</body>

</html>

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

http://localhost:8888/backstudy/html/lifecycle.html

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

t= 내용이없으면 내용없는빈문자열이 콘솔에 출력되지만

t= 자체를 없애면 null이 나옴 > 널포인트익셉션에 빠질 수도 있음 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

아무것도 체크하지 않고 전송하면 null 포인트 익셉션에 빠짐

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'JAVA 수업 > 웹(WEB) 수업 기록' 카테고리의 다른 글

0713 공부내용  (2) 2023.07.13
0711 수업내용  (0) 2023.07.11
0707 수업내용  (0) 2023.07.10
0706 수업내용  (0) 2023.07.07
0705 수업내  (2) 2023.07.05