BE/Java [Servlet , Spring]

MVC구조 및 아파치 톰캣 서버를 사용한 JSP & Servlet 파일 생성

시녜's 2023. 3. 31. 19:07

MVC Architecture 구조

  Model View Controller 

소프트웨어 디자인 패턴 중 하나로 애플리케이션의 코드를 논리적으로 분리하여 유지 보수 및 확장성을 향상시킨다.

 

   Model   비지니스 로직을 처리하는 부분으로 DB와의 상호작용을 담당한다 (Servlet, DAO, VO, DB파일)
   View   사용자 인터페이스를 나타냄 (JSP파일)
   Controller   Model과 View사이의 중간자 역할을 하며 동작을 제어한다.

 

아파치 톰캣 (Apache Tomcat)

- 자바 웹 애플리케이션 서버(JWAS)로 Apache 소프트웨어 재단에서 관리되고 있는 오픈소스 프로젝트

  • 톰캣은 자바 서블릿(Servlet) JSP(JavaServerPages)를 실행하기 위한 환경을 제공한다.
  • 서블릿과 JSP는 자바 언어를 사용하여 웹 애플리케이션을 개발하는 기술이다.
언어 서블릿 JSP
역할 - 클라이언트의 요청을 처리하여 응답을 전송(컨트롤러 역할)
- 동적인 웹 페이지 생성 기능
- HTML, XML, JSON등의 웹 콘텐츠 형식으로 제공될 수 있다.
- 웹페이지의 뷰(view)역할을 수행
-  HTML코드 내에 자바 코드를 삽입하여 웹 페이지를 동적으로 생성 할 수 있으며 이는 클라이언트에게 응답으로 제공된다.
- jsp는 서블릿으로 변환되어 실행된다.

 

[과정]

컨트롤러(url요청) -> model (db연결 및 데이터 요청 처리) -> browser 출력(요청 응답 - jsp파일)

 

   이클립스 JSP & Servlet 생성

▶ apache-tomcat-8.0.5설치

- 설치 시 오라클과 서버 충돌 위험이 있어 HTTP포트를 8088로 변경해 준다

- 설치 후 [서비스] - 상태유형(중지) - 시작유형(수동)으로 설정해야 된다.

 

 

1. Dynamic Web Project로 프로젝트 생성 (안 보일 경우 other에서 지정)

 

2. 서버 생성 [window - show view - server]

- Tomcat v8.5 server 지정

- Tomcat installation directory - [browse] 버튼 - [programfiles]-[Apache Software Foundation] - Tomcat 8.0 폴더 선택

- run as로 서버 실행

 

3.  인코딩 타입 설정 [window - preferences] - [Web] - css, html, jsp 파일 인코딩 UTF-8로 설정

* 이 작업을 해줘야 한글이 깨지지 않고 출력된다*

 

4.  jsp파일 생성 후  run on server로 톰캣 지정해서 실행하면 자바 내에서 페이지가 실행된다.

** window탭 - Web Browser - Default system web browser로 설정하면 웹으로 볼 수 있다

 

5. 서버 중지 후 더블클릭해서 Overview - Modules - path 선택 후 Edit를 눌러 "/" 기본 루트로 지한다.

- localhost:8088/프로젝트명이 기본 url로 설정되어 있어 프로젝트명을 지워 "/" (루트)를 기본으로 설정한다.

 

 

6. Java Resources 폴더

컨트롤러 패키지 생성

- servlet 파일, 라우터 관리하는 패키지 (doGet, doPost)

 

 모델 패키지 생성

- java 클래스 파일, vo와 dao관리 및 db연결하는 파일을 담고 있는 패키지

 

[홈 컨트롤러 - 기본 출력 페이지]

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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("/")
public class HomeController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dis = request.getRequestDispatcher("/home.jsp");
		request.setAttribute("pageName","about.jsp");
		dis.forward(request, response);
	}

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

}

 

1) @WebServlet("/") 어노테이션은 서블릿 클래스가 "/" 경로에 매핑됨을 명시해 줌 - 루트에 대한 요청 처리

2) doGet( ) 메서드는 HTTP GET요청을 처리해주며 RequestDispatcher를 사용하여 "/home.jsp" 페이지로 요청 전달

3) request객체에 pageName 속성 설정해서 about.jsp 페이지를 넘겨준다.

4) doPost( )메소드는 HTTP POST요청을 처리해 준다.

 

* 처리할 URL이 여러 개인 경우 value={ } 안에 경로를 담아 , (콤마)로 구분해 준다.

예) @WebServlet(value={"/posts","/posts/insert","/posts/update","/posts/delete","/posts/read"})

 

  HTTPServlet

  • Java Servlet API에서 제공하는 클래스 중 하나로 HTTP 프로토콜을 기반으로 하는 웹 애플리케이션 개발에 사용된다.
  • 클라이언트로부터의 HTTP요청을 처리하고 HTTP응답으로 반환하는 서블릿을 만들 수 있다.
  • 이를 통해 동적인 웹 페이지 생성, 사용자 인증과 권한관리, 데이터 베이스 연동 등의 기능을 활용할 수 있다.
  • doGet( ), doPost( ), doPut( ), doDelete( )등 HTTP요청에 대한 다양한 메서드를 제공한다.
[ RequestDispatcher ]
웹 애플리케이션에서 서블릿, JSP 등의 자원을 다른 자원으로 전송할 수 있도록 지원하는 인터페이스 (연결다리 같은 역할)

- forward( ) :  현재 실행중인 서블릿의 제어를 전달하여 다른 자원으로 제어를 이전한다 (이동수단 역할)
- include( ) :  현재 실행중인 서블릿과 호출한 자원의 응답결과를 합쳐 클라이언트에게 전송한다.
  request.setAttribute("속성명","속성값")  HTTPServlet의 속성을 설정하는데 사용되며 이를 통해 받은 속성은 같은 HTTP요청에 대한 자원(jsp, html, 서블릿) 등에서 공유되어 사용될 수 있다.
- 뷰에 자원 넘겨줄때 쓰는 메소드
  request.getParameter("값") 브라우저에서 넘겨준 값을 서버에서 꺼내오는 메소드
  request.getSession( )
세션 생성메소드, HttpSession 클래스를 사용해 생성한다.
HttpSession session = request.getSession();
  request.setCharacterEncoding("인코딩타입")
"utf-8"을 작성해주면 클라이언트에게 받은 값이 깨지지 않고 전송된다.
  response.sendRedirect("이동할경로") 경로이동 메소드
  response.setContentType("인코딩타입") "text/html;charset=utf-8" 작성시 모든 언어를 인코딩하여 한글깨짐을 방지한다.
  response.getWriter( ) 출력 메소드, printWriter 클래스를 사용해 생성한다.
PrintWriter out = response.getWriter();