본문 바로가기
ICIA 수업일지

2021.08.17 수업일지(JAVA, Servlet, Spring)

by 주성씨 2021. 8. 18.

- Servlet이란 자바 클래스를 기반으로 하는 웹 어플리케이션 프로그래밍 기술이다. JSP도 자바를 기반으로 하는 웹 어플리케이션 기술로 HTML 문서 안에 자바 코드가 삽입되는 구조를 갖는다.

- MVC(Model View Controller) Architecture
 클라이언트 입장에서 웹 어플리케이션 서버에 접속하여 노드제이에스에서의 라우터의 역할을 여기서는 컨트롤러(Servlet)가 하여 특정 도메인 요청에 뷰(JSP/HTML)를 통해서 웹페이지를 볼 수 있게 한다. DB의 접속은 JAVA를 통해서 하며 여기서의 자바는 Model이라고 한다. 이를 통합하여 MVC라고 한다.

- Back to Eclipse

1. 이클립스에서의 웹 구현을 위해서 다이나믹 웹 프로젝트를 새성한다.

웹 구현을 위해 다이나믹 웹 프로젝트를 생성한다.

 

2. 웹 서버 구현을 위해서 아파치 톰켓을 설치해준다. 이전에 JDK 설치를 확인해보고 설치가 안되어 있으면 설치해주도록 한다.

HTTP 포트가 오라클 포트랑 겹치니 위와 같이 8088로 지정해준다.

 

자바 경로 C:\Program Files\Java\jre... blah blah

 

3. 설치가 완료되면 서비스를 켜서 톰켓 서버가 작동하고 있는지 확인해보자.

위와 같이 실행중이라고 나와야하니 확인바란다.

 

4. 일단 아파치는 내부 서버와 중복되어 오류가 발생할 수 있으니 중지시킨다.

 

 

 

위와 같이 서버를 시작하여 외부부라우저를 통해서 확인할 수 있다.

 

프로젝트 네임은 ex01, target은 톰켓으로 설정되어 있음을 확인해주도록 한다.

 

위와 같이 다이나믹 웹 프로젝트가 생성됨을 확인할 수 있다.

 

인코딩을 UTF-8로 한다.

 

프로젝트 익스플로러의 위 경로에 마우스 오른쪽 버튼을 클릭한다.

 

ejs의 역할을 하는 jsp를 만들어준다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>[홍길동의 쇼핑몰]</h1>
</body>
</html>

 

이클립스의 내부 부라우저를 통해서 위와 같이 확인할 수 있다.

 

외부 브라우저에서도 경로 입력을 통해서 위와 같이 확인가능하다.

 

웹브라우저의 path를 변경하기전에 서버를 중지시킨다.

 

서버패스를 / 로만 한다.

 

위와 같이 바뀐 경로를 이용해서 브라우저에 접속할 수 있다.

 

외부 브라우저를 이용할 수 있다.

 

만약에 포트경로를 바꾸고 싶다면 위에서 확인가능하니 변경후 저장해주도록 한다. 단 이전에 서버는 중지시켜야 한다.

 

<body>
	<div id="container">
		<div id="header">
			<h1>홍길동의 쇼핑몰</h1>
		</div>
		<div id="center">
			<div id="menu">
				<ul>
					<li>회원관리</li>
					<li>도서관리</li>
				</ul>
			</div>
			<div id="content"></div>
		</div>
		<div id="footer">
			<h3>Copyright 2021. ICIA</h3>
		</div>
	</div>
</body>

 

 

- CSS 적용해보자.

<style>
#container {
	width: 960px;
	border: 1px solid gray;
	padding: 20px;
	margin: 0 auto;
}

#header {
	padding: 20px;
	border: 1px solid gray;
}

h1, h3 {
	text-align: center;
}

#center {
	padding: 20px;
	border: 1px solid gray;
	margin-top: 10px;
	margin-bottom: 10px;
	overflow: hidden;
}

#menu {
	width: 150px;
	float: left;
	margin-top: 30px;
}

#content {
	width: 750px;
	float: left;
	border-left: 1px dotted gray;
	padding-left: 10px;
}

#footer {
	padding: 20px;
	border: 1px solid gray;
}
</style>

 

- #content는 외부파일로 만들어서 include하자.

[new] about.jsp 새로운 파일을 만들어주자.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<h3>쇼핑몰소개</h3>
<p>때에, 착목한는 미인을 발휘하기 피는 위하여서. 피가 일월과 싶이 칼이다. 인간의 영락과 피어나는 할지라도 크고
	커다란 설산에서 사라지지 자신과 것이다. 가는 온갖 것은 청춘의 위하여서 품고 주는 꾸며 할지라도 것이다. 귀는 노년에게서
	붙잡아 구할 너의 그리하였는가? 가슴에 얼마나 따뜻한 것이다. 그들의 노년에게서 같이, 천고에 없는 곳이 있을 그들에게 심장의
	아니다. 뭇 동산에는 커다란 같지 피는 능히 있는 목숨이 사막이다. 그들의 불러 청춘의 얼마나 봄바람이다. 사랑의 하는 공자는
	인간이 갑 봄바람이다. 그러므로 안고, 풍부하게 봄날의 아름다우냐? 얼마나 날카로우나 가지에 수 못하다 있는가? 없는 가치를
	않는 청춘은 타오르고 얼마나 몸이 있다. 못할 온갖 그와 것이 찬미를 찾아다녀도, 그림자는 피는 같이 이것이다. 불러 그와 이상
	풀이 못하다 것이다. 품고 품에 때에, 보라. 그들의 오아이스도 인도하겠다는 그리하였는가? 밥을 봄날의 석가는 그러므로 있으랴?
	얼음에 끓는 이상의 하는 끓는다. 피가 천자만홍이 그들의 따뜻한 고동을 철환하였는가? 꽃이 품고 있는 있다. 모래뿐일 아름답고
	천자만홍이 있으랴? 가는 피어나기 이상을 쓸쓸하랴? 발휘하기 트고, 그들은 보이는 일월과 수 생의 말이다. 아름답고 가는 불어
	그들의 붙잡아 대중을 것이다. 사랑의 끓는 이상, 노년에게서 황금시대다. 쓸쓸한 보이는 만물은 속에 뜨고, 때에, 있는 가치를
	그것은 쓸쓸하랴? 피고 같지 피어나는 미인을 아니더면, 생생하며, 소리다.이것은 청춘의 봄바람이다. 천하를 인류의 수 영락과
	피다.</p>
<p>얼음 인류의 방황하였으며, 돋고, 열락의 있는 우리의 가진 칼이다. 몸이 보는 인생에 두기 약동하다. 열락의 유소년에게서
	인생을 풀밭에 낙원을 보이는 가장 살았으며, 예가 것이다. 심장은 우리 품었기 이상은 이상의 열락의 옷을 자신과 것이다. 보내는
	청춘의 커다란 꾸며 말이다. 무엇을 바이며, 들어 황금시대다. 피가 어디 두손을 있는가? 수 모래뿐일 두기 꾸며 예가
	뜨거운지라, 사막이다. 듣기만 오아이스도 예수는 것은 무엇을 기쁘며, 밝은 것이다. 예수는 인생에 무한한 듣는다. 기쁘며,
	되려니와, 품었기 뜨거운지라, 설레는 듣는다. 예수는 몸이 사랑의 우리 청춘의 대중을 보내는 있으랴? 작고 아름답고 구하지
	청춘의 사랑의 심장은 구하지 이것이다. 만천하의 얼음에 봄날의 간에 않는 청춘을 만물은 풍부하게 교향악이다. 못하다 거친 꽃
	두손을 꽃이 우리는 산야에 얼마나 싶이 것이다. 무엇을 끝까지 하였으며, 있는 오직 그들에게 보라. 꽃이 공자는 만천하의
	평화스러운 모래뿐일 인간의 있으랴? 많이 더운지라 바로 위하여, 것이다. 새가 위하여 안고, 그들은 많이 못할 용감하고
	사막이다. 행복스럽고 그들은 눈이 이성은 얼마나 속에 그리하였는가? 찾아다녀도, 설레는 공자는 이상의 꽃이 뜨거운지라, 보이는
	것이다. 뼈 아니더면, 그것은 피가 바이며, 천하를 심장은 끓는 피가 칼이다. 튼튼하며, 내려온 위하여 전인 청춘의 불어 어디
	쓸쓸하랴? 영락과 수 이것을 그들은 이상 가지에 곧 것이다. 별과 동력은 인생을 것이다. 그들은 보이는 이는 황금시대를 아니한
	몸이 놀이 남는 철환하였는가? 이상은 피어나기 인간은 아니다. 따뜻한 어디 동력은 내려온 따뜻한 속에서 무한한 이것이다.
	위하여, 이상의 없으면, 뿐이다. 기관과 못할 이상, 행복스럽고 내는 작고 놀이 같이 것이다. 원대하고, 것은 그것은 보이는
	천하를 우리 오직 끓는다.</p>
</html>

 

			<div id="content">
			<jsp:include page="about.jsp"/>
			</div>

 

이와 같은 결과물이 나올 수 있다.

 

CSS 파일을 외부파일로 만들어보자.

 

 

 

이와 같이 컨트롤러를 만드어준다.

 

- 생성한 페이지에 대한 정보를 아래와 같이 넣어준다.

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 IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dis=request.getRequestDispatcher("index.jsp");
		dis.forward(request, response);
	}

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

}

 

- webapp에 user 폴더를 만들고 안에 멤버 컨트롤러를 만들어준다.

 

- 유저 컨트롤러를 아래와 같은 위치에 생성한다.

 

package controller;

import java.io.IOException;
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(value={"/user/list", "/user/insert","/user/read"})
//위와 같이 value로 여러 path를 지정해 줄 수 있다.
public class UserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		switch (request.getServletPath()) {
		case "/user/list": 
			System.out.println("/user/list");
			break;
		case "/user/insert":
			System.out.println("/user/insert");
			break;
		case "/user/read":
			System.out.println("/user/read");
			break;
		}
	}

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

}

 

자바 콘솔에서 위와 같이 확인할 수 있다.

 

 

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(value={"/user/list", "/user/insert","/user/read"})
//위와 같이 value로 여러 path를 지정해 줄 수 있다.
public class UserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dis=request.getRequestDispatcher("../index.jsp");
		
		switch (request.getServletPath()) {
		case "/user/list": 
			request.setAttribute("pageName", "/user/list.jsp");
			System.out.println("/user/list");
			break;
		case "/user/insert":
			System.out.println("/user/insert");
			break;
		case "/user/read":
			System.out.println("/user/read");
			break;
		}
		
		dis.forward(request, response);
	}

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

}

 

- 일단 여기서 중지하도록 하고 스택오버플로우에 물어보도록 하자.

 

- Spring을 설치하고 설정을 바꿔보자.

1. encoding을 utf-8로 변경한다. css, html, jsp
2. server를 아파치 8.0으로 설정해준다.
3. 프로젝트를 만들어준다.
4. 다이나믹 웹 프로젝트를 만들어준다.
5. 타겟 런타임이 아파치 톰켓 8.0으로 되어있는지 확인한다.
6. webcontent에 view역할을 하는 index.jsp를 만들어준다.
7. java 리소스>src 아래 패키지 컨트롤러, 클래스 인덱스서블릿 이라는 이름의 파일을 만든다.

 

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 IndexServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	// 컨트롤러를 통해서 인덱스 jsp 파일을 가지고 오는 것이다.
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher dis = request.getRequestDispatcher("index.jsp");
		dis.forward(request, response);
	}

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

}

ㄴ IndexServlet.java에 위와 같이 입력하고 서버를 구동하면

이와 같이 웹에서 볼 수 있다.