웹 시스템
정적 페이지와 동적 페이지
- 정적 페이지
: 언제, 누가, 어디서 접속해도 디자인/내용이 동일한 페이지.
: HTML과 CSS로만 웹 어플리케이션을 제작하면 정적 페이지로밖에 제작할 수 없다
- 동적 페이지
: 접속한 시간, 장소, 사람에 따라 디자인/내용이 달라지는 페이지
: Javascript를 비롯해 PHP, Java 등으로 구현이 가능하다.
MVC 패턴
- 디자인 패턴 중 하나로, 어플리케이션 혹은 프로젝트를 구성할 때 그 구성요소를 세 가지의 역할(Model, View, Controller)로 구분하는 것.
- 사용자가 Controller를 조작하면, Controller는 Model을 통해 데이터베이스에 접근하고, 그 정보를 바탕으로 View가 시각적으로 표현하여 사용자에게 전달한다.
구분 | 역할 | 규칙 |
Model | 어플리케이션의 데이터(데이터베이스, 상수, 초기화값, 변수 등)의 접근과 가공을 책임지는 컴포넌트 |
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다. 2. View나 Controller에 대해 어떤 정보도 알지 말아야 한다. 3. 변경이 일어나면 변경 통지(이벤트 발생 혹은 수신)에 대한 처리 방법을 구현해야만 한다. |
View | 데이터를 기반으로 사용자들이 볼 수 있는 화면, 즉 사용자 인터페이스 요소를 담당한다. |
1. Model이 가지고 있는 정보를 따로 저장해서는 안된다. 2. Model이나 Controller에 대해 어떤 정보도 알지 말아야 한다. 3. 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야만 한다. |
Controller | 데이터와 사용자 인터페이스 요소들을 잇는 다리 역할을 한다. 데이터의 열람이나 수정에 대한 이벤트들을 처리한다. |
1. Model과 View에 대해 알고 있음으로써, Model과 View가 변경을 외부로 알리거나 수신하면 그것을 중재해주어야 한다. 2. Model과 View의 변경을 모니터링하여, 변경 통지를 해석해 각각의 구성 요소에 통지해주어야 한다. |
Servlet과 JSP
MVC모델에서의 Servlet과 JSP
- MVC모델에서 Servlet은 Controller, JSP는 View의 역할을 해준다.
- Servlet은 Java기반 문법, JSP는 HTML기반 문법을 따른다.
- 그러므로, JSP를 통해 사용자로부터 입력을 받아 그 처리는 Servlet이 맡고, 결과는 다시 JSP로 표시하는 흐름을 따른다.
* Servlet과 JSP환경에서의 리퀘스트/리스폰스 흐름
1. JSP페이지를 통해 사용자의 입력이 이루어진다.
2. 입력값은 Servlet으로 전달되어, 데이터베이스에 액세스 하는 등의 처리를 한다.
3. 처리한 결과값을 JSP에 전달하고, 그 이후의 작업을 맡긴다(포워드).
4. JSP가 전달받은 데이터를 바탕으로 사용자에게 보여줄 화면을 만든다.
사전 준비
1. 서버 준비
- 이클립스의 '서버' 패널에서 사용할 Tomcat 서버를 우클릭->개시
2. 프로젝트 작성
- 파일-신규-동적 웹 프로젝트 생성
3. JSP 파일 생성
- src/main/webapp 경로에 JSP 파일을 생성한다.
4. Servlet 파일 생성
- src/main/java 경로에 java 파일을 생성한다.
JSP파일의 작성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- 문서 상단에 추가해줄 코드.
<% Java 코드 %>
- 기본적으로는 HTML작성법을 따르나, Java 코드를 넣고 싶을 경우엔 '<% ~ %>' 안에 집어넣는다.
<%=aaa%>
- 변수 'aaa'의 값을 화면에 출력해주는 코드.
<a href="index.jsp">index.jsp로 이동</a>
- 링크를 클릭했을 때 페이지를 이동하는 코드. 일반적인 HTML 작성법과 동일하다.
* 예제) 당첨-꽝 추첨
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP연습 01</title>
</head>
<body>
<%
int num = (int)(Math.random()*10);
String str;
if(num > 5){
str = "당첨!";
}
else{
str="꽝!";
}
%>
<p>결과 <%= str%></p>
</body>
</html>
JSP -> Servlet -> JSP 로의 페이지 이동
* 예제) 사용자로부터 이름과 생년월일을 입력받아 이름과 나이를 표시하는 페이지
1. index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>사용자 입력</title>
</head>
<body>
<form action="inputcheck" method = "get">
<input type="text" name = "name">
<input type="number" name = "birth">
<input type="submit">
</form>
</body>
</html>
- form의 전송처는 Servlet파일의 url로 지정해준다.
2. inputcheck.java (Servlet파일)
// 사용할 URL 지정.
// 기본적으론 파일명으로 지정되나, 따로 지정하고 싶을 경우 사용
@WebServlet(urlPatterns={"/inputcheck"})
public class ServletSample extends HttpServlet {
protected void doGet(HttpServletRequest request , HttpServletResponse response)
throws ServletException , IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// 리퀘스트(form으로 입력받은 정보)를 불러들여 변수에 저장/처리
String name = request.getParameter("name");
int birth = Integer.parseInt(request.getParameter("birth"));
int age = 2025 - birth;
String mes = "어서오세요" + name + "님." + "연령 : " + age;
// 처리 결과를 JSP 파일에 전송
request.setAttribute("mes", mes);
// 이후의 작업을 result.jsp에 넘김(포워드)
request.getRequestDispatcher("/result.jsp").forward(request, response);
}
}
- 정보를 받고 처리하는 과정이 doGet 메소드 내에서 이루어진다.
- index.jsp의 form에서 입력된 정보가 인수인 request를 통해서 전달된다.
- 데이터를 처리한 후, 처리 결과는 그것을 표시할 result.jsp파일로 전송해주고, 이후의 작업도 넘겨준다.
3. result.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>
<%
String mes = (String)request.getAttribute("mes");
%>
<body>
<p><%=mes %></p>
</body>
</html>
- inputcheck.java로부터 데이터를 넘겨받아, 화면에 표시한다.
~ 참고한 자료 ~
'개발일기 > Java' 카테고리의 다른 글
[Java] 정규 표현식 정리 (0) | 2025.05.03 |
---|---|
[Java] Java의 정석 (7) 객체지향개념 4 (0) | 2025.03.19 |
[Java] Java의 정석 (6) 객체지향개념 3 (0) | 2025.03.05 |
[Java] Java의 정석 (5) 객체지향개념 2 (0) | 2025.03.04 |
[Java] Java의 정석 (4) 객체지향개념 1 (0) | 2025.03.04 |