반응형

# MVC01_6 회원관리UI 및 파라메터 수집(VO)하기

## 작업 설명

  • Controller (Servlet 로 생성)
  • Model (JAVA 로 생성)
  • DB (MySQL 로 진행)
  • DAO 에서 DB 접근 시 JDBC 로 진행

  • 해당 모델을 이용하여 작업 예정.

## tablesgenerator (테이블 구조 생성기) 사용방법

 

Create LaTeX tables online – TablesGenerator.com

You can import table data by uploading file in CSV format (Comma Separated Value). Most spreadsheet software, both desktop and online, allows to save tabular data in CSV format — it is usually available in the File menu under the name "Save As..." or "Ex

www.tablesgenerator.com

1. 상단 HTML 클릭 > File 클릭 

2. 생성할 테이블의 Rows 와 Columns 입력  후 Create

3. 생성된  table 크기 조절 후 안에 값 입력

4. 작업 완료된 결과를 가져와서 HTML에 입력

<table style="undefined;table-layout: fixed; width: 376px">
<colgroup>
<col style="width: 107px">
<col style="width: 269px">
</colgroup>
<thead>
  <tr>
    <th>아이디</th>
    <th></th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>패스워드</td>
    <td></td>
  </tr>
  <tr>
    <td>이름</td>
    <td></td>
  </tr>
  <tr>
    <td>나이</td>
    <td></td>
  </tr>
  <tr>
    <td>이메일</td>
    <td></td>
  </tr>
  <tr>
    <td>전화번호</td>
    <td></td>
  </tr>
  <tr>
    <td colspan="2"></td>
  </tr>
</tbody>
</table>

## 생성된 테이블 작업

  • 테이블에 input 등 필요한 태그 추가 및 해당 태그에 id값 설정.
  • id 값 설정 시 VO에 맞게 설정해 준다.
  • 기존 HTML 코드에서 불필요한 코드 제거
  • 신청, 취소 버튼 추가

  • 부트스트랩을 이용한 CSS 작업

## Servlet 생성

  • kr.bit.controller > New 클릭 후 Servlet 클릭
  • MemberInsertController 입력 후 Next
  • 그리고 URL Mapping 에 form의 action에 입력한 /memberInsert.do 입력 후 service 만 클릭 한 뒤 Finish.
  • Servlet에 회원가입에 따른 memberVO 에 set 되도록 아래와같이 설정.
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;

import kr.bit.model.MemberVO;

@WebServlet("/memberInsert.do")
public class MemberInsertController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) 
							throws ServletException, IOException {
		
		// 1. 파라미터 수집(VO)
		String id = request.getParameter("id");
		String pass = request.getParameter("pass");
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		String email = request.getParameter("email");
		String phone = request.getParameter("phone");
		
		// 파라미터 수집(VO)
		//MemberVO vo = new MemberVO(id, pass, name, age, email, phone);
		MemberVO vo = new MemberVO();		
		vo.setId(id);
		vo.setPass(pass);
		vo.setName(name);
		vo.setAge(age);
		vo.setEmail(email);
		vo.setPhone(phone);
		
		System.out.println("vo : " + vo);	// vo.toString() 이 생략되어있는 것.
	}
}

## HTML 경로 수정 및 작동확인

  • form의 경로를 기존 /memberInsert.do 에서 /MVC01/memberInsert.do 로 변경/.
<!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>
<h1>회원가입화면</h1>
<!-- /MVC01 에서 앞에 /는 http://127.0.0.1:8080/ 에서의 /를 의미. -->
<!-- /MVC01 를 ../ 로 할 수도 있지만, 매번 이렇게 하면 복잡하므로 위처럼 진행. -->
<form action="/MVC01/memberInsert.do" method="POST" >
	<table class="table table-bordered">
	  <tr>
	    <td>아이디</td>
	    <th><input type="text" name="id" /></th>
	  </tr>
	  <tr>
	    <td>패스워드</td>
	    <th><input type="password" name="pass" /></th>
	  </tr>
	  <tr>
	    <td>이름</td>
	    <th><input type="text" name="name" /></th>
	  </tr>
	  <tr>
	    <td>나이</td>
	    <th><input type="text" name="age" /></th>
	  </tr>
	  <tr>
	    <td>이메일</td>
	    <th><input type="text" name="email" /></th>
	  </tr>
	  <tr>
	    <td>전화번호</td>
	    <th><input type="text" name="phone" /></th>
	  </tr>
	  <tr>
	    <td colspan="2" align="center">
	    	<input type="submit" value="가입" class="btn btn-primary"/>
			<input type="reset" value="취소" class="btn btn-warning"/>
	    </td>
	  </tr>
	</table>
</form>
</body>
</html>

## 작업 내용 확인

  • 회원가입 form에 입력 후 가입 진행 시 vo에 설정되는 값 확인

반응형
반응형

# MVC01_5 Controller에서 Model 분리하기

  • Controller에서 비즈니스 로직을 Model로 분리하기
  • 일반적으로 model 패키지에는 VO, DAO, Util 등이 올수 있다.

## MyCalc.java

  • kr.bit.model > New 클릭하여 MyCalc 클래스 생성
package kr.bit.model;

public class MyCalc {
	public int hap(int su1, int su2) {
		int sum = 0;
		
		for ( int i = su1; i <= su2; i++ ) {
			sum += i;
		}
		
		return sum;
	}
}

## CalcController.java

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;

import kr.bit.model.MyCalc;

@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 = ? 
		// 비즈니스 로직 Model로 분리.
		/*int sum = 0;
		
		for ( int i = su1; i <= su2; i++ ) {
			sum += i;
		}*/
		
		MyCalc myCalc = new MyCalc();
		
		int sum = myCalc.hap(su1, su2);
		
		// 3. 응답(프리젠테이션 로직 = view -> 추후 JSP가 담당할 예정)
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<table border='1'>");
		out.println("<tr>");
		out.println("<td>TOTAL</td>");
		out.println("<td>" + sum + "</td>");
		out.println("</tr>"); 
		out.println("</table>");
		out.println("</body>");
		out.println("</html>");
	}
}

 

반응형
반응형

# MVC01_4 GET과 POST 요청 이해하기

## GET 방식 특징

  • URL에 변수를 포함시켜 전달한다.
  • 데이터를 header에 포함해서 전달한다.
  • URL에 정보가 노출되어 보안에 취약할 수 있다.
  • URL로 데이터를 전달하기 때문에 용량 등에 제한이 있다.
  • 캐싱할 수 있다. (항상 URL 뒤에 값을 붙여서 요청하기 때문에, URL에 해당 값을 직접 입력할 수 있다는 것)
# 캐싱 예
http://localhost:8081/MVC01/calc.do?su1=1&su2=5 이라고 할 때

http://localhost:8081/MVC01/calc.do?su1=555&su2=1115 
이렇게 URL 뒤 su1 su2에 값을 직접입력해서 요청하여 응답 받을수 있다.
  • 용도 : a 태그 등을 이용해 링크를 걸어서 넘길 때
  • 쿼리 스트링 : ?변수1=값1&변수2=값2 부분을 의미. (=꼬리표)
  • 공백을 사용할 수 없다. 쿼리 스트링에 공백 사용 시 공백도 값으로 인식될 수 있다.

## POST 방식 특징

  • URL에 변수를 노출하지 않고 패킷에 변수를 담아서 전달한다.
  • 데이터를 body에 담아서 전달한다.
  • 캐싱할 수 없다.
  • 용도 : 회원가입, 게시판 글쓰기 등 form 에서 넘기는 데이터
반응형
반응형

# MVC01_3 요청(HttpServletRequest)과 응답(HttpServletResponse)이해하기

## 클라이언트 요청 

  • su.html에 입력된 내용을 바탕으로 클라이언트에게 화면이 보여지게 된다.
<!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>
<form action="calc.do">
	<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="submit" value="전송" class="btn btn-primary"/>
				<input type="reset" value="취소" class="btn btn-warning"/>
			</td>
		</tr>
	</table>
</form>
</body>
</html>

  • 클라이언트가 수1, 수2에 값을 입력한 후 전송 버튼을 클릭하게 되면 su.html 내 from에 설정되어있는 action에 요청이 전달되어 요청에 따른 응답이 표시되게 된다.

## 요청에 대한 응답

  • CalcController 에서 응답을 처리하게 된다.
  • 여기서 Service 메서드는 Request Response 객체를 통해 요청과 응답을 수행한다.
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);
		
	}
}

## 요청 정보

  • 클라이언트에서 입력된 정보가 서버쪽으로 전달될 때 요청정보의 형태로 전달된다.
  • 여기서 요청정보는 패킷으로 요청이 된다.

## 패킷의 구성

  • 하나의 패킷에는 header 와 body로 이루어진다.
  • header에는 클라이언트의 정보가 들어간다. ( 클라이언트의 IP 주소. 클라이언트 port 정보 등 )
  • body에는 입력된 변수의 값이 들어간다. ( su1 = 1, su2 = 5 등)

## 톰캣 객체

  • 톰캣(WAS)은 하나의 클라이언트에 대한 요청이 들어오게 되면 이를 식별하기 위해서 2개의 객체를 만들게 된다.
  • HttpServletReqeust 라는 요청객체와 HttpServletResponse 라는 응답객체를 한 쌍으로 생성한다.
  • 여기서 HttpServletRequest에 넘어온 요청정보를 담아두게 된다. 
  • 그리고 HttpSrvletResponse에도 넘어온 요청 정보 중 header에 대한 정보를 담아두게 된다.

## 요청 방식

  • 클라이언트가 서버로 요청할때 요청하는 방식에는 GET 방식과 POST 방식이 있다.
  • 요청방식은 form 태그에 method="" 에 입력한다. (method를 입력하지 않으면 기본은 GET 방식으로 진행된다.)
<!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>
<form action="calc.do" method="POST">
	<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="submit" value="전송" class="btn btn-primary"/>
				<input type="reset" value="취소" class="btn btn-warning"/>
			</td>
		</tr>
	</table>
</form>
</body>
</html>
  • GET 방식 : 클라이언트 요청 시 서버로 넘어가는 파라미터 값이  아래와 같이 주소에 보이게 된다. (보안상 문제가 발생할 수 있어 회원가입, 글쓰기 등의 경우 사용하지 않는다.)
  • GET 방식은 보안에 취약하고, URL을 이용하여 파라미터 값을 전달하기 때문에 제한이 있다.
http://localhost:8081/MVC01/calc.do?su1=1&su2=5
  • POST 방식 :클라이언트 요청 시 서버로 넘어가는 파라미터 값을 패킷에 담아서 서버로 전달한다.
  • 일반적으로 form은 POST방식을 사용한다.
반응형

+ Recent posts