웹 기술
- 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개를 실행시킬 엔진이 따로 있다.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
이클립스에 디렉토리는 톰캣서버에 배포되기 위해 만들어진 디렉토리이다
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
자바 특수 애플리케이션 :
Booklet
Applet
Servlet : 서버쪽에서 사용되는 특수 애플리케이션
Middlet
톰캣시작 -> (웹컨텍스트별로) ServletContext 타입의 객체생성 (서블릿 엔진이 객체생성 시켜줌) ->
웹컨텍스트란? = 웹모듈 = 웹어플리케이션
서블릿컨텍트타입의 객체가 제일 오랫동안 남아있다. (톰캣이 사용할 수 있는 동안 사용할 수 있는 정보를 넣어준다)
요청이 소멸될 때 없어져도 되는 정보는 request에 정보를 셋팅해준다.
타겟런타임 - 아파치 톰캣 9.0 선택하는이? 톰캣에서 제공되는 클래스들을 사용할 수 있음
(현: 아파치 톰캣 9.0)
3.0 버전부터 오른쪽(17번째줄) 로 배치기술서 저렇게 바뀌었다
그래서 web.xml > 오른쪽으로 바뀌었다 (3.부타)
LifeCycle
/life
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
http://localhost:8888/backstudy/life - get방식 요청
주소를 직접 입력하는 방식은 GET 방식이다
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
현재 실행하면 >
서버 프로그램이 죽어버릴때 500번 오류가 뜹니다. null타 입센션이 발생되면 프로그램이 죽어버린다.
이클립스의 디렉토리가 실제 경로로 출력된것이 아니다. (이클립스의 디렉토리는 배포를 하기 위한 경로이다)
(실제 배포된 경로:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------a.txt. 파일의 실제 경로를 가지고 파일 내용을 읽고, 쓰기
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파일로 관리
파라메터 값이 오랫동안 유지되어야 할 값이면 서블렛 컨텍스타 타입의 파라메터로 사용한다.
서블릿 컨텍스트 타입의 파라메터 (공유객체)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
<!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이 나옴 > 널포인트익셉션에 빠질 수도 있음
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------