티스토리 뷰
JSP(Java Server Page(HTML))
HTML을 중심으로 자바와 같이 연동하여 사용하는 웹 언어이다.
HTML코드 안에 JAVA코드를 작성할 수 있는 언어이다.
JSP = 자바+서버+Page(html, css, js)
화면 쪽 연산 > JS
DB 쪽 복잡한 연산 > JAVA
JSP = 웹 언어, HTML 문서에서 JAVA를 쓰게 해줌, .jsp 파일에서 쓸 수 있음.
But 하나의 파일에 두 개 이상의 언어 지양 > 분업하는 데 불편, 실제 실무에서 잘 안씀.
웹 서버에서는 정적 데이터만 응답가능. 동적 데이터를 처리하는 웹 컨테이너 -> 서블릿 컨테이너라고 부르기 동적 데이터 = 연산이 필요함. > 연산이 필요한 언어를 배워야 함. > 복잡한 연산 > JAVA를 통해서 하겠다. 서블릿(.java) = 자바로 만들어진 프로그램 동적인 데이터를 연산할 수 있는 자바 프로그램이 서블릿, 동적데이터 연산하겠다. 사용자가 요청이 얼마나 들어올지 모르고, 각각의 요청이 얼마나 들어올지 모른다. > 서블릿 컨테이너에서 서블릿이 여러개! 자바 웹서버는 멀티 쓰레드임. 요청 하나 당 하나의 쓰레드가 생김. 서블릿도 여러 개임. 요청하나 들어올 때마다 새로운 쓰레드 필요하니까. 요청이 들어와 봐야 아니까 서블릿은 대기 상태 대기 중이였다가 요청이 들어오는 순간 그 서블릿이 쓰레드를 통해서 메모리에 할당되는 것임. 쓰레드는 프로세스와 관련됨. 쓰레드가 서블릿 프로그램을 메모리에 할당을 해줘야 프로세스가 됨. 그래서 프로세스 당 하나의 서블릿을 잡고 메모리에 올려줌. 기존에 만들어 논 서블릿은 대기중임. => 분기처리. 서블릿 컨테이너는 WAS(web application server, 와스)가 깨워줌. 웹 서버에 동적 데이터가 감지되면 WAS가 서블릿 컨테이너를 깨워줌. ctrl+n 해서 .java파일 만들면, 그 파일이 서블릿이다. f11눌러서 실행되면 서블릿이 연산되는 것임. 자바파일에서 html을 쓸 수 있다 > 서블릿 http 추상클래스 상속받으면 서블릿이 된다. 자바 안에서 html을 쓸 수 있다. 응답할 때는 html언어로 응답해줘야 함. 통신할 때 html파일로 만들어주는 애가 서블릿 응답을 하기 위해서는 브라우저에 항상 html언어로 응답해줘야 하기 때문. java를 실행했을 때 콘솔이 아닌, .html파일로 출력 가능 서블릿의 단점을 극복하고자 나온 게 jsp > html 에서 java쓴다. jsp 파일이 컴파일 > 서블릿 파일 컴파일 > 결과페이지 html로 응답 jsp가 서블릿으로 변환되면서 html문서가 연산과 함께 진행이 됨. Q.서블릿으로도 개발되는데 왜 jsp 배우나요? 서블릿으로도 정적 연산 가능 > 웹 개발 가능, 하지만 서블릿으로 쓰게 되면 자바안에서 html 작성할 때 "" 오타에 대한 부분이 많이 불편해서, jsp인 html안에서 자바를 작성하는 게 개발에 있어서 훨씬 효율적이라 jsp를 사용한다. java언어가 있으면 무조건 서블릿이다. jsp도 서블릿이다. jsp도 컴파일이 된다.(연산하려면 필요함). jsp도 연산된다.(자바언어가 쓰이니까) <웹 컨테이너 안에 2가지 방식> 1.서블릿만 쓰는 것 2.jsp로 입히고 나서(.jsp) 내부적으로 서블릿(.jspservlet)으로 변환하는 것(정적 데이터) > html문서로 바뀜 > 웹서버로 전송 서블릿의 생명 주기(쓰레드의 연산 주기) : init, do, destroy |
서버
사용자의 요청에 맞는 서비스를 제공해주는 것
- 요청(request) : 클라이언트 ---> 서버
- 응답(response) : 서버 ---> 클라이언트
service + er : 서비스를 해주는 것
서버의 주인 : 컴퓨터, 컴퓨터의 주인(host) : IP
컴퓨터에 필요한 정보가 어떤 폴더에 있을 것임. >> 경로
브라우저 주소 창에 서버의 경로를 쓰는 것임.
다른 컴퓨터에 있는 파일을 브라우저를 통해 갖고 오는 것 : 요청과 응답
웹(Web)
페이지 요청과 응답이 일어나는 장소.
인터넷에 연결된 컴퓨터들을 통해 사람들이 정보를 공유할 수 있는 정보공간.
웹 개발자 : 웹이라는 장소에서 개발하는 사람
웹 서버(http) - 아파치
사용자의 요청이 정적 데이터인지 동적 데이터인지 판단한다.
정적 데이터일 경우 이미 준비된 HTML문서를 그대로 응답해주며,
동적 데이터라면 웹 컨테이너에 요청을 보낸다.
프로토콜 http : 통신규약(요청이 있으면 응답해야 한다는 이론)(논리적)
웹 서버 http : 어플리케이션으로 돌아감. = 프로그램이다.
http 어플리케이션을 설치함으로써 웹 서버가 가동이 됨.(물리적)
일반 로컬에는 전부 설치가 되어 있음. 클라우드 배포 시, 클라우드에는 설치가 안 되어 있음. 나중엔 설치를 같이 해야 함.
웹 서버를 돌릴 수 있는 프로그램이 http이다.
웹 컨테이너(서블릿 컨테이너)
동적 데이터일 경우 JSP, 서블릿으로 연산 및 제어 그리고 DB까지 접근한다.
DB에 접근하는 연산을 복잡한 연산이라고 하며, JAVA로 처리한다.
동적 데이터가 정제된 데이터(정적 데이터)로 완성되면 이를 웹 서버로 응답해준다.
WAS(Web Application Server) - 톰캣
동적 데이터를 처리할 서블릿을 메모리에 할당하며, web.xml을 참조한 뒤 알맞는 서블릿에 대한
Thread를 생성한다. 서블릿 요청(HSR)과 서블릿 응답(HSR) 객체 생성 후 서블릿에 전달하면,
연산 종료 후 메모리에서 해제시킨다.
응답객체 : 연산이후 결과 값을 담음.
응답객체 필드는 초기화 되어 있고, setter로 결과값을 설정해서 전송함.
1.알맞는 화면에 알맞는 값을 꽂을 수 있음.
2.화면에서 어떤 곳으로 이동할 지도 할 수 있음.
HSR, HSR 객체가 모든 연산이 끝나면(동적 데이터가 정적 데이터로 바뀜)
메모리에서 해제되기 전에, 두개의 객체가 웹서버로 전달되야 함.
(웹서버가 마지막에 응답하는 곳이니까,)
정적데이터가 웹 서버에 전달되면서 HttpRequest(HR), HttpResponse(HR)로 바뀜(서블릿이 빠짐)
서블릿 객체를 생성하면 메소드가 생김.
일반 자바파일, 서블릿 파일의 차이점 : 일반 자바파일 extends HttpServlet(추상클래스) >> 서블릿 파일이 됨.
구현된 메소드, 구현안된 메소드가 있을 것임. 강제성만 없애놓은 상태.
요청 객체와 응답 객체를 전달받을 수 있는 메소드를 재정의할 것임.
서블릿에는 메소드가 여러 개 있음.doGet, doPost, ...
(form 태그에서 method에 get, post를 쓰면 자바쪽에 메소드 이름을 키값으로 쓴다)
요청 객체에는 사용자가 입력한 데이터, 요청과 관련된 값들이 객체에 들어감.
객체이름: HttpServletRequest >>객체가 전달이 됐다면 input태그의 name을 key값, 입력된 것을 value로 가져오고, 필드에 선언됨.
input태그 name을 키값 / value는 사용자가 입력한 값
<input name="id" >
자바에서 입력값을 갖고 와야 DB에 insert나 복잡한 연산 가능.
키값을 전달했을 때 value값을 전달해줄 메소드가 HttpServletRequest객체(r) 안에 있다!
r.getParameter("id") >> 사용자가 입력한 id값.
응답객체1) 연산이 끝나면 결과값이 나옴. >> 응답 객체에 담음. 기본적으로 초기화 되어 있는 데 setter메소드로 초기화를 우리가 원하는 결과값으로 변경 > 전송. 알맞는 화면에 알맞는 값을 꽂을 수 있음.
응답객체2) 어떤 곳으로 이동까지 가능함. ex.여기서 연산 끝났으니까 로그인 페이지로 이동
서블릿(Servlet)
Java 코드 안에 HTML 코드를 작성할 수 있는 Java 프로그램이다.
Thread에 의해 서블릿에 있는 service() 메소드가 호출된다.
전송 방식 요청에 맞게 doGet() 또는 doPost() 등의 메소드를 호출한다.
<form method="get"> >> 무조건 doGet() 실행됨.
화면 쪽에서 요청한 전송방식에 맞춰서 서블릿의 메소드도 재정의를 해야 함.
화면에서 get 쓰고 doPost() 정의하면 절대 실행안됨.
JSP - eclipse 설정
Preferences
사용하는 폰트 변경
인코딩 변경 : UTF-8 > Workspace, CSS Files, HTML Files, JSP Files 모두 > Apply
server > Server and Runtime > 사용하는 Tomcat 버전으로 바꿔주기 > Apply
server > Runtime Environments > add > 사용하는 Tomcat 버전 추가하기 > Browse 경로(C드라이브 아파치 선택) > Finish
Apply and Close
Servers > No servers are avaliable. 클릭 > 사용하는 Tomcat 버전 확인(설정한 환경 확인) > Next > (미리 만들어놓은 프로젝트 없음) Finish > Tomcat v9.0 Server at localhost(추가 완료!)
서버 추가했으면, 더블클릭 > Port Number 확인 > Tomcat admin port 8005 & HTTP/1.1 8085, 포트번호 확인
> Server Options에서 1,3 체크 Serve modules without publishing, Modules auto reload by default
> ctrl + s 해서 저장하기 > 재생버튼 클릭 > 엑세스 허용 > 잘 돌아가는 지 확인 (콘솔창에 "~시작되었습니다")
(java의 경우 Package Explorer, 하나의 패키지가 하나의 어플리케이션이다.)
Project Explorer(프로젝트 단위로 탐색을 하겠다, 하나의 프로젝트가 하나의 어플리케이션이다.) > Servers 폴더
MSA(micro service architecture)기법 : n개의 프로젝트가 하나의 어플리케이션으로 되게끔 만드는 것.
서비스 하나가 박살나도 남은 서비스는 따로 서버가 도니까 멀쩡함.
환경이 구축되어 있는 회사에 가야 배울 수 있는 기술이다.
OAuth : 다른 서비스랑 연동시키는 것.
프로젝트는 Dynamic Web Project를 만들면 된다..! > next > Generate web.xml deployment descriptor 체크! > finish
web.xml : 표지판 역할
사용자가 요청을 했을 때 올바른 url이 아닐 경우, web.xml에 설정된 경로로 날아가게 해주는 설정 파일이다.
(설정파일이다! 무슨? 경로에 대한 설정파일이다)
프로젝트마다 설정이 다르기 때문에 공용 web.xml이 있어도 프로젝트마다 web.xml을 만들어 준다.
(프로젝트에서 개인적인 설정을 만들래, 그래서 공용 web.xml도 쓰고, 개인 web.xml파일도 쓸거야,)
* 자바 프로젝트 만들 때 web.xml 체크하고 프로젝트 만들기!!
서버를 연동하면 공용으로 쓸 수 있는 web.xml이 자동으로 생김.톰캣에 원래 있는 애임.
모든 프로젝트에 반영이 되는 설정파일임.
개발을 하다보면 프로젝트마다 설정을 해야할 때가 있음. 공용에다가 쓰면 다른 프로젝트도 반영이 되어서 문제가 생김.
프로젝트를 만들 때마다 체크해서 개인적으로 쓸 수 있는, 여기에만 쓸 수 있는 설정들을 만들거임.
그 프로젝트에만 반영된 설정들을 작성하는 파일 web.xml을 만들어줌.
초반에 web.xml파일을 만들지 못했다면,
프로젝트 우클릭 > java ee tools > Generate Deployement Descriptor Stub (web.xml 만들어주는 것)
WebContent에는 웹표준파일들을 선언하는 곳.
웹표준 : 브라우저에서 페이지로 응답을 할 때, 사용하는 언어들의 표준
표준기관 W3C에서 표준을 정해놓은 것임. html, css, js, ...
+
서블릿 : 자바로 만든 프로그램
Java파일은 Java Resources > src에 만듦.
∥
Dynamic web project = java + 웹표준
** Servlet 만들기(.java)
ctrl + n >
일반 자바와, 서블릿은 구조가 다름. 일반 자바 파일로 만들었으면 HttpServlet 추상 클래스를 상속받아야 함.
Servlet 검색해서, Servlet으로 만드는 게 편함.
package명 : 도메인을 쓰고, 이 어플리케이션의 이름을 씀. ex) com.naver.app
폴더 3개가 만들어짐. 마침표를 찍는 순간 그 안에다가 만든다는 의미. 하위연산자.
ex)a.b.c >> a폴더 안에 b폴더 안에 c
class명 작성 > Next > Initialization parameters(안씀), URL mappings(주소 검색)-Edit으로 수정가능 > Next
> Modifiers - public > Which method stubs would you like to create? 위에 두개는 체크, 밑에 메소드는 선택(doGet or doPost)(stubs 코드토막) > finish
URL 주소 mapping 검색, 조회(CRUD_READ)
>> 브라우저 주소란에서 안의 내용과 같이 요청을 하면 서블릿이 실행시키겠다.
URL이 뭔지에 따라서 동적인지 정적인지 데이터 판단을 함. 사전에 판단을 함.(서블릿단에서 경로로 준비를 해놓기 때문)
URL: 정적이든, 동적이든, 연산을 하겠다는 수단. 데이터 구분을 url로 함.(개발자가 이해하기 쉽게 번역)
정적 데이터든, 동적 데이터든 web.xml은 무조건 들림. 웹 서버에서 하는 것임.
요청을 하면 무조건 웹서버로 감. 웹서버에서 어떻게 처리하느냐,
웹 서버는 사용자가 요청한 경로로 가는 것 뿐임.
웹 서버에서 경로가 없을 수도 있으므로 web.xml을 들렀다 가는 것임.
web.xml에 별다른 설정이 없으면, 실제 경로가 존재한다는 의미.
web.xml에 설정이 있으면, 설정된 경로로 이동하라는 의미. 가보니까 .java 또는 .jsp 로 갈 수 있음.
Interfaces 추가X (처음에 init할 때 뭘 더 추가할 때 사용)
web.xml 설정방법
1.xml파일에 직접 작성 -> 경로를 써서 자바파일로 이동
2.@어노테이션 쓰는 방법 (SPRING에서 배움)
ContextPath : root 경로까지만
root경로는 톰캣서버에서 확인가능
톰캣 서버 > Modules > Path(root경로) (edit으로 root경로 수정가능)
서블릿.java -> f11(서버 실행) -> finish -> restart server
getWriter() : html body 태그 안에 넣을 문장을 전달받는 메소드, PrintWriter타입
PrintWriter는 io패키지 안에 있음. io는 파일입출력할 때 사용.
입출력할 때는 버퍼가 열림. 쓸 거 다 썼으면 버퍼를 닫아줘야 함.
out.close();
한글이 깨지니까 인코딩타입을 설정해줘야 함.
응답하는 문서는 설정이 반영된 채로 응답이 됨.
response.setContentType("test/html; charset="UTF-8");
★이 세상에 해결할 수 없는 오류는 없다.★
★모든 오류는 해결할 수 있다.★
/ 슬래쉬를 넣으면 (상대경로지만) 절대경로로 인식, 젤 처음부터 들어감.
/ 슬래쉬를 안 넣으면 상대경로로 인식, 현재 경로에서 바뀜.
jsp에서
메인페이지는 index로 하기(약속)
첫 페이지 이름은 index.html로 하는 게 약속임. 왜? welcome-file명이 index임.
하나의 파일에 두 개 이상의 언어가 있으면 안된다.
오류 404 그 경로에 그 파일 없다는 오류
해결 방법
1.web.xml 확인
2.@어노테이션 확인
단순 페이지 이동이여도 직접 경로를 생성해서 내부적으로 이동하게 해야 함.
web.xml에서 코드가 안보이면, Source탭을 누르기!
'2022 > jsp' 카테고리의 다른 글
Cookie(쿠키) (0) | 2022.10.07 |
---|---|
day04[EL, JSTL, MVC2] (0) | 2022.10.07 |
day03[Get, Post, Ajax, MyBatis] (0) | 2022.10.07 |
paging 계산 (0) | 2022.10.07 |
day02[스크립트 태그, db-jsp] (0) | 2022.09.27 |