JSP 개발 환경 및 기초 문법
- 1. 개발 환경 구축
- Eclipse(이클립스) 설치 , Tomcat (톰캣, 웹컨테이너, WAS - 웹어플리케이션 서비스)
: Tomcat은 웹어플리케이션 서버 중에 하나이다. (동적 데이터 처리)
HttpServletRequest, HttpServletResponse
: WebServer - Apache는 웹서버 중에 하나이다. (정적 데이터 처리)
HttpRequest, HttpResponse
=> https://www.eclipse.org/downloads/packages/
or drive.google.com/file/d/1vi_uSndiIl_DCZwspiCSZFYB7SEAdPR_/view?usp=sharing
Eclipse IDE for Enterprise Java and Web Developers >>> Windows x86_64
or drive.google.com/file/d/1Lp-WlzljDMBwsnh43w2qux_2OcHW4v17/view?usp=sharing
Download >> Tomcat9 >> 9.0.44 >> Binary Distributions >> 64-bit Windows zip 파일 다운로드
eclipse-jee-2020-12-R-win32-x86_64 압축 해제후 eclipse.exe 실행 :
실행 오류시 shshsh.tistory.com/88 참고















































web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>servlet_0322</display-name>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>ex1.EX1_HelloWebServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MyProfile</servlet-name>
<servlet-class>exam.MyProfile</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyProfile</servlet-name>
<url-pattern>/MyProfile</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
EX1_HelloWebServlet.java
package ex1;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// HttpServlet을 상속 받았기 때문에 WAS에 의해서 관리 될 객체가 된다.
public class EX1_HelloWebServlet extends HttpServlet{
// 알트 + 시프트 + S
public EX1_HelloWebServlet() {
System.out.println("생성자 호출!");
// TODO Auto-generated constructor stub
}
// doGet, service 메서드는 thread에 의해서 관리된다.
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(req, resp);
System.out.println("service 메서드 호출!");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("get 메서드 호출!");
// resp : 서버가 브라우저에게 응답하는 객체
// MIME TYPE을 전송한다.
resp.setContentType("text/html; charset=EUC-KR");
PrintWriter out = resp.getWriter();
out.println("<h1>");
out.println("안녕하세요오!! 나의 첫번째 서블릿입니다!!.");
out.println("</h1>");
out.close();
}
}
MyProfile.java
package exam;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyProfile extends HttpServlet{
public MyProfile() {
System.out.println("MyProfile 생성자 호출!");
// TODO Auto-generated constructor stub
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("MyProfile doget 메서드 호출!");
resp.setContentType("text/html; charset=EUC-KR");
PrintWriter out = resp.getWriter();
String name = "홍길동";
out.println("<h2>");
out.println("나의 소개 </br>");
out.println("이름은 " + name + "입니다.</br>");
out.println("지금 가산에 있습니다.</br>");
out.println("</h2>");
out.close();
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(req, resp);
System.out.println("MyProfile service 메서드 호출!");
}
}
GugudanServlet.java
package ex1;
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 GugudanServlet
* Servlet 3.0부터 어노테이션 기반이 제공, web.xml 작성이 불필요하다.
*/
@WebServlet("/GugudanServlet") // web.xml을 대신한다.
public class GugudanServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// SetvletResponse 객체, 즉 웹 브라우저로 전송하는 스트림
response.setContentType("text/html; charset=EUC-KR"); // 최상위
PrintWriter out = response.getWriter();
StringBuffer sb = new StringBuffer();
sb.append("<!DOCTYPE html>");
sb.append("<html>");
sb.append("<head>");
sb.append("<meta charset=\"euc-kr\">");
sb.append("<title> 구구단").append("</title>");
sb.append("</head>");
sb.append("<body>");
sb.append("<table border=\"1\">");
// tr 태그는 하나의 row, td는 하나의 column
// <td>데이터</td>
// 최소한 한개의 td는 반드시 한개의 tr로 이루어진다
for (int i=0; i<=9; i++) {
sb.append("<tr>");
for (int j=2; j<=9; j++) {
if(i == 0) {
sb.append("<td>").append(j);
sb.append("단");
sb.append("</td>");
} else {
sb.append("<td>").append(j);
sb.append("x").append(i);
sb.append("=").append(i*j);
sb.append("</td>");
}
}
sb.append("</tr>");
}
sb.append("</table>");
sb.append("</body>");
sb.append("</html>");
out.println(sb.toString());
}
}
- cgi : C언어 기반으로 웹 어플리케이션을 처리
프로세스 단위로 이루어져 있다. 단점 : 무겁고 어렵다.
<Thread 기반>
- php : 인터프리터 기반, Apache의 웹 어플리케이션 모듈
- asp : 비주얼 베이직 기반의 웹 어플리케이션
- servletJSP : 자바 기반의 스레드 단위로 동작하는 웹 어플리케이션
- Servlet의 기본 아키텍처와 JSP
- JSP 표기법 - 스크립트 릿 방식
- JSP 개발 방법 : Model1, Model2 , 패턴 - > MVC 패턴
- JSP 내장 API : request,respose =>
- JSP Scope

***** < 웹 라이프사이클> *****
1. 클라이언트가 요청을 한다.
2. web.xml에서 해당 요청의 url을 확인한 후에 요청으로 매핑 된 Servlet을 최초로 생성한다
(톰 캣이 처음 시작되었을 때...)
2-1. WAS는 무조건 새로운 요청이 왔을 때 HttpServletRequest, HttpServletResponse를 생성해둔다.
3. init() 을 호출한다. - 서블릿 객체 초기화
4. service() 를 호출할 때 2-1에서 생성해둔 두 객체를 인자값으로 전달하면서 호출한다. (Thread)
5. service() 에서 분석 된 전송방식(get,post)에 따라서 doXXX 메서드를 호출하면서
HttpServletRequest, HttpServletResponse 를 전달하게 된다.
6. doGet() 이나 doPost()를 통해서 할일을 하고(비지니스 로직)
7. Response 객체를 통해서 브라우저로 전송한다.
============================================
HTTP 프로토콜 (웹 서버) - HttpRequest, HttpResponse
■ HTTP 프로토콜은 웹 서버와 웹 브라우저사이의 통신에 사용하는 프로토콜이다.
■ HTTP 프로토콜은 요청(Request)과 응답(Response)으로 이루어진 프로토콜이다.
■ HTTP 요청은 HTTP 메소드, 요청 URL, 서버에 전달한 정보로 이루어져 있다.
■ HTTP 응답은 요청에 대한 서버의 응답으로서 상태코드, 컨텐츠 타입정보, 컨텐츠로 구성되어 있다.
Web Container (웹 컨테이너, WAS) - HttpServletRequest, HttpServletResponse
■ 컨테이너는 웹서버와 서블릿 사이의 통신을 지원한다.
■ 컨테이너는 서블릿의 생명주기를 관리한다.
■ 컨테이너는 새로운 요청이 들어올 때 마다 자바 스레드를 생성해서 사용자의 요청을 처리한다.
■ 컨테이너는 선언적인 방법으로 보안관련 내용을 설정할 수 있다.
-> 사용자의 요청을 대기하는 스레드를 통해서 Servlet을 관리한다
서블릿
■ 서블릿은 웹 서버에서 실행되는 자바 프로그램이다. (톰캣[WAS]에서 관리되는..)
■ 서블릿은 사용자의 요구에 따라서 동적으로 웹 컨텐츠를 생산해서 클라이언트 측에 전송하는 자바 기술이다.
■ javax.servlet.http.HttpServlet 클래스를 상속받아서 사용자정의 서블릿 프로그램을 작성한다.
서블릿의 실행과정
■ 사용자가 url을 클릭해서 컨테이너(ex.톰캣)에 새로운 요청을 한다.
■ 컨테이너는 요청을 접수한 다음, HttpServletRequest와 HttpServletResponse 객체를 생성한다.
■ 접수된 url을 분석해서 해당 서블릿 객체를 생성하고, 사용자의 요청을 처리하기 위해 스레드를 생성한다.
■ 서블릿의 service() 메소드를 호출하고, 요청방식에 따라서 어떤 메소드를 호출할지 결정한다. get, post
■ 서블릿의 doGet()메소드를 호출해서 사용자의 요청을 처리하고, 응답을 작성한다.
■ 작성된 응답을 클라이언트에 전송한다.
■ 사용자의 요청을 처리하기 위해 생성한 스레드를 소멸시킨다.
배포 서술자(web.xml)
■ 배포 서술자는 서블릿과 jsp를 어떻게 실행하는냐에 관한 정보가 들어있다.
■ 배포 서술자에서는 서블릿과 URL을 매핑시키는 작업을 한다.
■ 배포 서술자는 URL 매핑외에 보안역할 설정, 오류 페이지 설정, 초기화 구성
등의 내용을 설정할 수 있다.
'WEB > Study' 카테고리의 다른 글
| [0401][JSP] 로그인 세션 , 파일 업로드 구현 하기 (0) | 2021.04.01 |
|---|---|
| [0326][Web-JSP] Model 1 방식으로 만드는 기본 CRUD (0) | 2021.03.26 |
| [0325][Web - JSP] Connection Pool, DAO, DTO, Model 1 의 개념과 실습 (0) | 2021.03.25 |
| [0324] [Web - JSP] HTML5 : Form태그 요소, GET,POST , Parameter정리, JSP등 기본 문법 (0) | 2021.03.24 |
| [0323] [Web - JSP] HTML5, Servlet 생명주기 , Servlet에서 이동방식 (0) | 2021.03.23 |