반응형

# MVC01_2 Controller(Servlet)의 역할

## Servlet (Controller 역할을 한다.) 기본개념 습득을 위해 요청/응답 연습 예제 : su.html 생성

  • su.html에 아래와 같이 입력.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>연습</title>
</head>
<body>
<table>
	<tr>
		<td>수1</td>
		<td><input type="text" name="su1" /></td>
	</tr>
	<tr>
		<td>수2</td>
		<td><input type="text" name="su2" /></td>
	</tr>
	<tr>
		<td colspan="2" align="center">
			<input type="button" value="전송" />
			<input type="button" value="취소" />
		</td>
	</tr>
</table>
</body>
</html>

### 파라미터

  • 클라이언트가 웹에서 접근하여 su1, su2에 각각 값을 입력하여 전송 버튼 클릭 하게 되면 su1에 입력한 값은 su1, su2에 입력한 값은 su2 라는 파라미터에 담기게 된다. (현재는 버튼 동작하지 않음)

### form 태그

  • 일반적으로 table을 하나의 form으로 묶어준다.
  • 취소 버튼의 type을 button 에서 reset으로 변경. (reset의 경우 form 으로 되어있는 곳에서만 동작한다. -> form 안에 있는 파라미터 값을 초기화 해준다.)
  • 전송 버튼의 type을 button 에서 submit으로 변경. (submit의 경우 form 으로 되어있는 곳에서만 동작한다. -> form 안에 있는 파라미터가 전송된다. 이를 위해서는 form 태그의 action에 요청을 받을 대상을 지정해 줘야한다.)

### 전송 버튼 클릭에 따른 요청 처리를 위한 form 태그 매핑

  •  kr.bit.controller > New 클릭 후 CalcController 이름의 Servlet 생성
  • 그리고 /calc.do 로 매핑 설정

  • 그리고 Next 후 Service만 체크하여 Finish.
package kr.bit.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("/calc.do")
public class CalcController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) 
											throws ServletException, IOException {
		
	}
}
  •  생성된 CalcController 를 아래와 같이 입력.
package kr.bit.controller;

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("/calc.do")
public class CalcController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) 
											throws ServletException, IOException {
		// 1. 클라이언트에서 넘어오는 폼 파라미터 받기(파라미터 수집) -> 파라미터 : su1, su2
		int su1 = Integer.parseInt(request.getParameter("su1"));
		int su2 = Integer.parseInt(request.getParameter("su2"));
		
		// 2. 비즈니스 로직 -> su1 ~ su2 = ? 
		int sum = 0;
		
		for ( int i = su1; i <= su2; i++ ) {
			sum += i;
		}
		
		// 3. 응답
		PrintWriter out = response.getWriter();
		out.println("total = " + sum);
		
	}
}

### su1, su2 입력에 따른 응답 확인

아래와 같이 su1, su2 입력 후 결과 확인

### 유용한 탬플릿 사이트 

  • 부트스트랩 탬플릿 CSS 등 제공.
  • https://www.w3schools.com/
  • 위 사이트에서 부트스트랩3를 이용하여 위에서 만든 su.html을 작업하면 아주 간편하게 아래처럼 만들수 있다.
 

W3Schools Online Web Tutorials

HTML Example:

This is a heading

This is a paragraph.

Try it Yourself CSS Example: body {   background-color: lightblue; } h1 {   color: white;   text-align: cente

 

www.w3schools.com

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>연습</title>
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<table class="table table-bordered">
	<tr>
		<td>수1</td>
		<td><input type="text" name="su1" /></td>
	</tr>
	<tr>
		<td>수2</td>
		<td><input type="text" name="su2" /></td>
	</tr>
	<tr>
		<td colspan="2" align="center">
			<input type="button" value="전송" class="btn btn-primary"/>
			<input type="button" value="취소" class="btn btn-warning"/>
		</td>
	</tr>
</table>
</body>
</html>

 

반응형
반응형

# MVC01_01 Servlet과 Model 만을 이용한 회원관리 만들기

  • Servlet 은 MVC 요소에서 Controller를 의미한다. (C는 가장 먼저 클라이언트의 요청을 받는 요소.)

## 작업 설명

1. 클라이언트의 요청을 작업을 한다. (파라미터를 수집하는 역할을 한다.) => Controller (Servlet)

2. 클라이언트의 요청을 처리하는 작업 (비즈니스 로직) => Java class

3. 클라이언트에게 응답하는 작업 (프리젠테이션 로직) => View (JSP)

  • 위처럼 작업이 세분화 되어야 한다.
  • 우선 Sevlet 과 Model 로 회원관리 페이지 만들 예정.

## 작업 시작 (기본 디렉터리 구조 생성)

  • src 우클릭 > New 하여 새로운 package 생성 (kr.bit.model 와 kr.bit.db 패키지 생성)
  • WebContent > New 하여 새로운 Folder 생성 (member 폴더 생성)

### member.sql

  • 위에서 생성한 kr.bit.db 패키지에 member.sql 생성

### memberVO.java

  • 위에서 생성한 kr.bit.model 패키지에 memberVO.java 클래스 생성 (현실세계의 회원(Object)를 객채지향 프로그래밍에서 사용하기 위해 MemberVO라는 자료형 생성)
  • memberVO 생성 후 내부에 필요한 내용 입력. 입력완료후 우클릭 > source 들어가서
  • Generate Getters and Setters 진행 후 다시 Generate toString() 진행
  • 필요하면 생성자 메서드도 오버로딩 진행.
  • 그리고 Generate Constructor using Fields 눌러서 초기화 해줄 수 있는 생성자 생성 (회원가입용으로 num 제외)
  • 그리고 Generate Constructor using Fields 눌러서 초기화 해줄 수 있는 생성자 생성 (데이터 등 가져와서 VO로 묶을때 사용)
package kr.bit.model;

public class MemberVO {
	
	private int num;
	private String id;
	private String pass;
	private String name;
	private int age;
	private String email;
	private String phone;
		
	public MemberVO() {
		
	}
	public MemberVO(String id, String pass, String name, int age, String email, String phone) {
		super();
		this.id = id;
		this.pass = pass;
		this.name = name;
		this.age = age;
		this.email = email;
		this.phone = phone;
	}
	
	public MemberVO(int num, String id, String pass, String name, int age, String email, String phone) {
		super();
		this.num = num;
		this.id = id; 
		this.pass = pass;
		this.name = name;
		this.age = age;
		this.email = email;
		this.phone = phone;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "MemberVO [num=" + num + ", id=" + id + ", pass=" + pass + ", name=" + name + ", age=" + age + ", email="
				+ email + ", phone=" + phone + "]";
	}	
}

### memberDAO

  • 위에서 생성한 kr.bit.model 패키지에 memberDAO.java 생성. (JDBC)
  • 추후 여기에는 INSTER / UPDATE / DELETE 등의 기능 구현 예정
package kr.bit.model;

import java.sql.*;

// JDBC -> myBatis, JPA
public class MemberDAO {
	private Connection conn;
	private PreparedStatement ps;
	private ResultSet rs;
	
		
}

### memberRegister.html

  • WebContent > member 폴더에 memberRegister.html 생성. (회원을 DB에 등록하기 위한 UI)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>신규 회원 가입</title>
</head>
<body>
회원가입화면
<table border="1">
	<tr>
		<td>아이디</td>
		<td><input type="text" name="id"/></td>
	</tr>
</table>
</body>
</html>

반응형
반응형

# 인프런 MVC 프레임워크는 내손에 13일차 : Project Export, Import 하기

## 프로젝트 배포 Export

  • 배포하기 위한 프로젝트 우클릭 > Export > WAR file 클릭
  • WAR file을 저장할 위치 선택 하고, 소스 파일도 함께 배포파일로 만들기 위해서는 아래 Export source files를 체크해준다. 기존의 동일한 배포 파일이 존재하는 경우에는 덮어쓰기를 하려면 Overwrite existing file를 체크한다. 완료 후 finish.

MVC01.war
0.00MB

 

## 프로젝트 불러오기 Import

  • Project Explorer 에서 우클릭 > Import > WAR file 클릭
  • 기존에 Export 한 파일을 선택. 
  • 동일한 이름의 프로젝트 존재시에는 프로젝트 명 변경 후 finish.

  • 그후 톰캣 서버에 Context 등록을 위해 Servers 탬에 있는 톰캣 우클릭 > Add and Remove 클릭
  • 등록하고자하는 프로젝트를 Available에서 선택 후 Add 그리고 finish.
반응형
반응형

# 인프런 MVC 프레임워크는 내손에 12일차 : Dynamic Web Project 만들기

## Dynamic Web Project 생성

  • File > New > Dynamic Web Project 클릭
  • Project Name 설정 후 Next
  • 아래와 같이 체크 후 Finish. (Content directory의 경우 WebApp 으로 하는 경우도 있다.)

 

## 생성한 Dynamic Web Project Context 등록

  • 생성한 프로젝트를 톰캣 서버가 인식할 수 있도록 해주는 Context 등록이 필요. 등록 방법은 아래와 같다.
  • Servers 탭의 톰캣 우클릭 > Add and Remove

  • Add and Remove 팝업이 나오면, Available에 존재하는 프로젝트 MVC01을 클릭 후 Add를 눌러서 Configured로 위치 시킨다. 그후 finish를 클릭하면 아래와 같이 server.xml에 Context가 등록된 걸 확인핼 수 있다.

Context에서 reloadable란? : 소스 코드 수정 등에 대한 reStart가 자동으로 되도록 해주는 것으로 true 일 경우 일정 시간 후 재시작 된다. 

##  톰캣 서버와 프로젝트 연결이 정상적으로 잘 되었는지 확인하기 위한 연습

  • 신규로 생성한 MVC01 프로젝트 우클릭 > New > HTML File or JSP File 클릭

1. HTML File 생성

  • index.html 파일 생성
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
MVC01 Start !!
</body>
</html>
  • 서버 스타트 후 아래와 같이 입력하면 입력된 내용이 출력 되는것을 확인할 수 있다.
http://localhost:8081/MVC01/index.html

2. JSP File 생성

  • test.jsp 파일 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	int sum = 0;

	for ( int i = 0; i <= 10; i++ ) {
		sum += i;
	}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=sum %>
</body>
</html>
  • 서버 스타트 후 아래와 같이 입력하면 입력된 내용이 출력되는 것을 확인할 수 있다.
http://localhost:8081/MVC01/test.jsp

3. Servlet 생성

  • 프로젝트 > src > New > Package 생성
  • kr.bit.controller 이름으로 패키지 생성 후
  • 생성된 패키지에 아래와 같이 Servlet 생성

  • 아래와 같이 HelloStart 이름 입력 후 Next

  • 요청에 따른 Mapping 하는 부분 으로 기존 URL mapping 의 /HelloStart를 /h.do로 변경 후 Next

  • 아래와 같이 Service만 체크 후 Finish

  • 완료하게 되면 기본적인 Servlet 틀이 생성된다. 아래와 같이 입력 후 실행.
package kr.bit.controller;

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("/h.do")
public class HelloStart extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		int sum = 0;
		
		for ( int i = 0; i <= 100; i++ ) {
			sum += i;
		}
		
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<body>");
		out.println(sum);
		out.println("</body>");
		out.println("</html>");
	}
}
  • 서버 스타트 후 아래와 같이 입력하면 입력된 내용이 출력되는 것을 확인할 수 있다.
http://localhost:8081/MVC01/h.do

반응형

+ Recent posts