1. JSP 개발 환경 설정(Tomcat 9 설정하기)
1) 서버 설치할 디렉토리 만들기
: C드라이브에 tomcat 폴더 만들기
2) Tomcat 서버 다운로드
: 구글에 톰켓 검색, tomcat.apache.org/
> Download > Tomcat 9 클릭 > core의 64bit Windows zip 다운
3) C드라이브에 만든 tomcat 폴더에 다운받은 파일 압축 풀고 복사
4) Eclipse 와 연동
① Server 뷰 띄우기
: Window > Show view > Servers
② Tomcat Server 정의
: No servers are available. Click this link to create a new server... 클릭
> Apache, Tomcat v9.0 Server 선택 후 Next 클릭
> Browse ... 클릭
> 아까 C 드라이브에 만든 tomcat 폴더의 다운받아서 압축풀은 폴더로 경로 선택
> Finish 클릭
5) 서버 기본 세팅
: Use Tomcat installation(takes control of Tomcat installation)과
Publish module contexts to separate XML files는 반드시 선택! > 단축키 Ctal + S를 이용, 설정 저장하기
<<여기에서 포트번호를 확인할 수 있으며 현재 포트번호는 8080임>>
6) 서버 Start 가동
[학원컴 기준!] 8080과 8081 모두 포트 번호 사용중이였다!
Port 충돌 발생시 포트 충돌되면 서버 Start 안되며 아래와 그림과 같은 팝업창이 뜬다.
** 현재 아래의 사진은 8080 포트에 대한 충돌 메시지!
** 명령 프롬프트 창에 SQL 로그인 후 SELECT dbms_xdb.gethttpport() FROM dual; 명령어 입력
8081 포트도 사용 중임을 알게 되었다
[결국!] 포트번호는 8082로 변경하였다
: 포트번호 변경하고 단축키 Ctrl + S 이용하면 저장 가능
** 다시 서버 가동 > 가동됨
** 서버 가동 확인
: 크롬에 localhost:8082 검색하면 아래 그림과 같은 화면이 나오면 정상적으로 서버가 가동된 것임
[추가] Start the server 버튼 클릭해도 서버 start 가능
7) 서버 Stop 하기
: 우클릭 > stop 클릭
** 서버 가동 중단 확인
: 크롬에 localhost:8082 검색하면 아래 그림과 같이 404 에러 화면이 나옴
[추가] Stop the server 버튼 클릭해도 서버 stop 가능
8) 정상적으로 Tomcat 서버가 설치되면 아래 그림과 같이 Servers[JavaWork master] 확인 가능
9) JSP 개발 환경 필요한 세팅
① JSP 인코딩 세팅
: Window > Preferences 클릭
> Web > JSP Files 클릭 > Encoding ISO 10646 / Unicode(UTF-8) 선택 후 Apply 클릭
② 템플릿 세팅
: Window > Preferences 클릭
> Web > JSP Files > Templates 클릭 > New JSP File(html 5) 선택하여 템플릿 변경 후 Apply 클릭
2. Dynamic Web Project 생성
: 우클릭 > New > Dynamic Web Project 클릭
> Project 이름 설정 후 Next 클릭 > Generate web.xml deployment descriptor 체크 후 Finish 클릭
> JSP001_Hello 프로젝트 생성 완...!!
3. JSP 파일 생성
: WebContent 선택 후 우클릭 > New > JSP File 선택 > File name 설정 후 Finish 클릭
[이때!] META-INF나 WEB-INF에는 파일 만들지 않도록 주의!!
4. 프로젝트를 server에 add 하기
: JSP는 웹컨테이너 방식으로 동작하며,
이클립스 개발환경에서는 Server에 add하여 웹컨테이너를 적재한다.
: Tomcat v9.0 Server at localhost [Stopped, Synchronized] 선택 후 우클릭 > Add and Remove ... 클릭
> 적재하고자 하는 프로젝트 선택 후 Add 클릭 > 웹턴테이너 적재를 확인 후 Finish 클릭
5. 특정 jsp 파일 실행
: 우클릭 > Run AS > Run on Server 클릭 > Tomcat v9.0 Server at localhost 선택 후 Finish 클릭
** 이클립스 내장 브라우저에서 확인 가능
** 크롬에서도 확인 가능
6. (주의) URL은 대소문자 구분함!!
7. JSP(Java Server Page) 특징
: 동적 웹어플리케이션 컴포넌트,
클라이언트의 요청에 동적으로 동작을 하며, html로 응답을 한다.
jsp 파일은 서블릿으로 변환되어 실행된다.
MVC 패턴에서는 view로 이용
[컴포넌트] 해당 컨테이너를 구성하는 각각의 기술적 요소들
[동적] 사용자 요청에 따라 그때그때 변화하여 응답
7. JSP 동작 과정
1) jsp 파일 요청(request)
2) jsp 컨테이너로 전송 : 웹컨테이너로 jsp파일을 넘긴다.
(톰캣 서버가 컨테이너 역할, 컨테이너 안에는 jsp와 servlet컨테이너가 있다)
3) jsp 파일 파싱 : 해당 jsp파일이 처음 요청된 것이면 파일을 파싱
이전에 요청되었던 페이지일 경우에는 7단계로 바로 넘어간다.
4) Java 파일로 변환 : 새로운 자바(*.java)파일을 생성한다. > 이것은 서블릿(Servlet) 클래스임
5) *.class 파일 생성 : 서블릿 파일(자바파일)이 컴파일되어 클래스 파일(*.class) 생성
6) 메모리에 로딩됨 : 클래스 파일은 메모리에 로딩됨
7) html 전송 : 로딩된 클래스 파일에 대한 실행 결과를 웹서버로 넘겨진다.
웹서버는 html 형태로 사용자에게 응답(response)
8) 브라우저에 html실행 되어짐
8. java, class 파일은 tomcat 서버 경로에 생긴다.
9. 이클립스가 서버를 가동시키는 것이다.
10. 서블릿(Servlet)
: Java 언어로 웹프로그램을 만들기 위한 기반 기술,
웹프로그래밍에서 클라이언트의 요청(reqeust)을 처리하고
그 결과를 다시 클라이언트에게 응답(response)하는 클래스
11. Servlet이 JSP보다 이전에 존재
: Servlet만으로는 웹서버 구현하기 불편하다.
그래서 작성할 때는 HTML처럼 비교적 직관적으로 작성할수 있는 JSP 등장했다.
JSP 프로그래밍과 Servlet 프로그래밍은 동전의 양면처럼
동일한 페이지 동작을 Servlet으로도 만들 수 있고 JSP로도 만들 수 있다.
12. Servlet은 MVC 모델에서 주로 Controller 역할을 한다.
13. 서블릿은 java 파일
: 웹 브라우저가 보여줄수 있는 리소스가 아니기 때문에
웹에서 접근 가능한 형태로 접근하기 위해는 서블릿과 URL을 연결 해주는 URL 매핑이 필수,
14. Servlet 특징
1) 동적 웹어플리케이션 컴포넌트
2) 확장자는 .java
3) 클라이언트의 요청에 동적으로 작동한다.
4) java thread를 이용해서 동작한다.
: 서블릿의 강점! 서버에 대한 부하 줄인다.
5) MVC 패턴에서 controller 이용된다.
15. Servlet 파일 생성과 URL mapping
: Java Resources > New > Servlet 클릭
> Java package, Class name 설정 후 Finish 클릭
> URL mapping 설정 후 Finish 클릭
16. URL 맵핑 방법
방법1. web.xml에서 서블릿 맵핑을 하는 방법
: <servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.lec.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hee</url-pattern>
</servlet-mapping>
방법2. 어노테이션 이용하는 방법
: @WebServlet("/He")
17. web.xml 역할
: 웹어플리케이션의 deployment descriptor(배포 설명자)로, 각 어플리케이션의 환경을 설정하는 역할,
서버가 처음 로딩될 때 읽어들이고, 해당 환경설정에 대해 tomcat에 적용하여 서버를 시작
18. 서블릿 or JSP
서블릿 : JAVA 코드 내에서 HTML을 다룰 수 있다.
JSP : HTML 코드 내에 JAVA 코드를 넣을수 있다.
19. 웹컨테이너
: 웹컨테이너(tomcat)에서는 서블릿 클래스의 instance를 만들어 그 서블릿 객체를 초기화 작업을 한다(init()메소드)
** main() 메소드가 없어도 동작하는 이유는 웹서버 엔진(톰캣)에서 main()이 작동하기 때문이다.
20. 서블릿 클래스 상속 구조
: Servlet 인터페이스 -- GenericServlet 추상클래스 -- HttpServlet 클래스 -- 서블릿 클래스
21. Servlet interface를 implements하여 생성한 자바 클래스
: 서블릿은 서블릿 엔진에 의해 동작을 하며 여러 사용자에 의해 호출 될 수 있다(multi thread),
서블릿의 인스턴스는 재활용 가능하다(한번만 생성되면 된다!)
22. 서블릿은 javax.servlet.http.HttpServlet 클래스를 상속 해야 한다,
doGet 또는 doPost 메서드 안에 클라이언트의 요청이 왔을 때 처리해야 할 일들을 기술해야 한다,
HTML 문서를 출력하는데 있어서, doGet이나 doPost 메서드의 두번째 인자(response)를 이용한다
23. HttpServletRequest : 사용자의 정보를 서블릿 엔진에 전달하는 객체
: 파라미터의 이름과 값, 사용자 컴퓨터 이름, 요청받는 서버의 이름, input type의 데이터
[메소드] getParameterValues(), getParameter(), getRemoteHost(), getServerName()
24. HttpServletResponse : 서버에서 만든 응답을 암호화해서 사용자에게 전달하는 객체
: 응답으로 사용되는 content의 길이, 응답으로 사용되는 content의 타입, 화면에 출력해야 할 모든 값
[메소드] setContentType(String type), setContentLength(int length), getWriter()
25. doGet메소드의 호출
: html <form> 태그에서 method=get일 때 호출,
URL 주소창에서 servlet url을 입력했을 때도 호출
26. doPost메소드의 호출
: html <form> 태그에서 method=post 일 때 호출
27. JSP서버측에서 처리하는 코드이기 때문에 당연히 response가 되지 않고,
response되지 않기 때문에 웹 브라우저에서 소스보기 해도 볼 수 없음.
28. 원인은 JRE (혹은 server) 경로, 버젼 문제
: 원래 작업하던 환경의 JRE(Java Runtime) 혹은 server의 경로와 버전이
지금 작업하는 환경의 경로와 버전이 다른 경우 에러 발생할 수 있음
에러 발생하는 프로젝트 선택 후 우클릭 > Build Path > Configure Build Path... 클릭
> 에러 난 JRE Remove 하고 새로 추가하기
29. JSP 클린 3종 세트
: JSP 또는 Java Beans 파일을 변경해도 적용되지 않거나 알 수 없는 오류가 계속 발생될 때 클린을 시도해보기
[1단계] 프로젝트 클린
: Project > Clean… 클릭 > clean하고자 하는 프로젝트 선택 후 OK 버튼 클릭
[2단계] 서버 클린
: start 중인 Tomcat v9.0 Server at localhost를 stop 시키기 > 우클릭 > Clean... 클릭
[3단계] Work Directory 클린
: start 중인 Tomcat v9.0 Server at localhost를 stop 시키기 > 우클릭 > Clean Tomcat Work Directory… 클릭
[실습코드]
1. JSP01_Hello
** Hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<!-- viewport는 웹 반응형을 위해 필요함 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSP 시작</title>
</head>
<body>
첫 JSP 파일입니다!!<br>
<a href="page1.jsp">page1</a><br>
<!-- ./ : 현재페이지
http://localhost:8082/JSP001_Hello/page2.jsp -->
<a href="./page2.jsp">page2</a><br>
<!-- / : 404 에러
http://localhost:8082/page3.jsp -->
<a href="/page3.jsp">page3</a>
</body>
</html>
** page1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>page1</title>
</head>
<body>
<h1>page1</h1>
<!-- 서버에서 리퀘스트 발생함 -->
<a href="Hello.jsp">hello</a><br>
<!-- history.back() : 이전페이지로 돌아가기
리퀘스트 발생 안함,
브라우저에거 기억하는 이전 페이지로 돌아가는 것-->
<button onclick="history.back()">back</button>
</body>
</html>
** page2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>page2</title>
</head>
<body>
<h1>page2</h1>
</body>
</html>
** page3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>page3</title>
</head>
<body>
<h1>page3</h1>
</body>
</html>
2. JSP02_ServletBasic
: 같은 출력값이더라도 서블릿으로도 만들 수 있고, JSP으로도 만들 수 있다.
** sample.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JSP response</title>
</head>
<body>
<h2>JSP로 HTML 문서 만들기</h2>
</body>
</html>
** com.lec.servlet > HelloServlet
package com.lec.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloServlet
*/
//@WebServlet("/He")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("안녕하세요 첫번째 Servlet 입니다.");
// 서블릿으로 HTML 문서 response 하기
// 1. content type 설정
// 2. PrintWriter 객체 생성 <-- response 객체로부터
// 3. PrintWriter 객체로 HTML 스트림에 쓰기.
// 1.
response.setContentType("text/html; charset=utf-8");
// 2.
PrintWriter out = response.getWriter();
// 3.
out.println("<!DOCTYPE html>");
out.println("<html lang='ko'>");
out.println("<head>");
out.println("<mata charset='utf-8'>");
out.println("<title>서블릿 response</title>");
out.println("</head>");
out.println("<body>");
out.println("<h2>HTML 문서 response</h2>");
out.println("</body>");
out.println("</html>");
// 4. 다 썼으면 out.close로 닫아준다!
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
3. JSP03_ServletGetPost
: HTML을 만들고 get 방식으로 request 하기
** webpage.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>doGet() 메소드 동작 확인</title>
</head>
<body>
<!-- / : 도메인 뒤
프론트 엔드에서 /Ser 의 의미는 도메인 바로 뒤의 Sev이란 뜻임
http://localhost:8082/Sev -->
<form method="post" action="Sev">
<input type="submit">
</form>
<br>
<!-- a태그는 get 방식으로 호출된다..!! -->
<a href="Sev">클릭해보세요</a>
</body>
</html>
** com.lec.servlet > ServletDemo.jsp
package com.lec.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Sev")
public class ServletDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
public ServletDemo() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("doGet() 호출"); // 테스트
int sum = 0;
for(int cnt = 1; cnt <= 100; cnt++) {
sum += cnt;
}
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<head>");
out.println("<title>백까지 합</title>");
out.println("</head>");
out.println("<body>");
out.printf("100까지의 합 결과 : %d", sum);
out.println("</body>");
out.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("doPost() 호출");
doGet(request, response);
}
}
'웹_프론트_백엔드 > JAVA프레임윅기반_풀스택' 카테고리의 다른 글
2020.05.20 (0) | 2020.05.20 |
---|---|
2020.05.19 (0) | 2020.05.19 |
프론트엔드 웹 페이지 제작하기(5.8 ~ 5.17) (0) | 2020.05.18 |
2020.05.15 (0) | 2020.05.15 |
2020.05.14 (0) | 2020.05.14 |