오늘이라도

[Web] 2. 회원가입 화면 만들기 : index 작성, Servlet, web.xml, JSP 본문

취업성공패키지 SW 개발자 교육/Web

[Web] 2. 회원가입 화면 만들기 : index 작성, Servlet, web.xml, JSP

upcake_ 2020. 5. 7. 11:27
반응형

 

https://github.com/upcake/Class_Examples

교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다. 

gif 파일은 클릭해서 보는 것이 정확합니다.


 - 회원가입 화면 만들기 -

▲클라이언트와 서버간 통신 순서

 

1. index.html, 첫 화면

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 입력 화면</title>
<script type="text/javascript">
	function fnCheckForm() {
		var id = document.regForm.id.value;
		alert("id : " + id);
		if(id.length < 8) {
			alert("아이디는 8글자 이상이어야 합니다!");
 			document.regForm.id.value = "";
			document.regForm.id.focus();
			return false;
		} else {
			if(confirm("회원가입을 하시겠습니까?")) {
				return true;
			} else {
				return false;
			}
		}
	}
</script>
</head>
<body>
	<form action="member.do" method="post" onsubmit="return fnCheckForm()" name="regForm">
	이름 : <input type="text" name="irum" required="required" /><br />
	아이디 : <input type="text" name="id" required="required" /><br />
	비밀번호 : <input type="password" name="pw" required="required" /><br />
	나이 : <input type="number" name="age" required="required" /><br/>
	주소 : <input type="text" name="addr" required="required" /><br/>
	<input type="submit" value="회원가입"/>
	<input type="reset" value="초기화"/>
	</form>
</body>
</html>

▲index.html

 

2. Member.java : Servlet 만들기

▲Create Servlet ①

 - Class name이 파일명이 된다.

 

▲Create Servlet ②

 - URL mappings에 적절한 맵핑을 해준다.

▲Create Servlet ③

 - doGet과 doPost 박스의 체크를 해제한다.

 - service는 전송 방식 get과 post 역할을 둘 다 수행할 수 있다.

 - 슈퍼클래스 생성자를 생성하는 체크를 해제한다.

 

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;

import com.hanul.study.MemberDTO;

@WebServlet("/member.do")
public class Member extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//클라이언트의 요청을 받는다 : 매개 변수를 가져온다 ▶ HttpServletRequest
		request.setCharacterEncoding("utf-8");
		String irum = request.getParameter("irum");
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		int age = Integer.parseInt(request.getParameter("age"));
		String addr = request.getParameter("addr");
		
		//비지니스 로직 : DAO를 통해 DB와 연동하여 결과를 리턴받는 작업
		MemberDTO dto = new MemberDTO(irum, id, pw, age, addr);
		
		//DB 연동 : MemberDAO.java → insertMember(dto) ▶ 생략
		
		//프리젠테이션 로직 : 리턴 받은 결과를 클라이언트에게 응답 ▶ HttpServletResponse
		request.setAttribute("dto", dto);
		RequestDispatcher rd = request.getRequestDispatcher("result.jsp");
		rd.forward(request, response);
	}
}

 - Servlet에서 index에서 받은 매개 변수를 자바 변수로 변환한다.

 - 변환한 자바 변수를 dto 변수에 저장하고 DAO를 통해 DB와 연동한다.

 - 리턴 받은 결과를 클라이언트에게 응답한다.

 

더보기
package com.hanul.study;

public class MemberDTO {
	private String irum;
	private String id;
	private String pw;
	private int age;
	private String addr;
	
	public MemberDTO() {}

	public MemberDTO(String irum, String id, String pw, int age, String addr) {
		super();
		this.irum = irum;
		this.id = id;
		this.pw = pw;
		this.age = age;
		this.addr = addr;
	}

	public String getIrum() {
		return irum;
	}

	public void setIrum(String irum) {
		this.irum = irum;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}
}

 

3. web.xml, 맵핑하기

▲web.xml의 위치

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>01.FirstProject</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet> <!-- 지정한 이름을 실제 주소로 넘겨주는 맵핑 역할을 한다. -->
  	<display-name>Member</display-name>
  	<servlet-name>Member</servlet-name>
  	<servlet-class>Member</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>Member</servlet-name>
  	<url-pattern>/member.do</url-pattern>
  </servlet-mapping>
</web-app>

 - 코드로 작성한 이름을 실제 주소로 넘겨주는 맵핑 역할을 web.xml이 담담한다.

 

4. result.jsp, 결과 화면 작성하기

<%@page import="com.hanul.study.MemberDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
MemberDTO dto = (MemberDTO) request.getAttribute("dto");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 처리</title>
</head>
<body>
<div align="center">
	<table border="1">
		<tr>
			<th>이름</th>
			<td><%=dto.getIrum() %></td>
		</tr>
		<tr>
			<th>아이디</th>
			<td><%=dto.getId() %></td>
		</tr>
		<tr>
			<th>비밀번호</th>
			<td><%=dto.getPw() %></td>
		</tr>
		<tr>
			<th>나이</th>
			<td><%=dto.getAge() %></td>
		</tr>
		<tr>
			<th>주소</th>
			<td><%=dto.getAddr() %></td>
		</tr>
		<tr>
			<td colspan="2" align="center">
				<input type="button" value="회원가입" onclick="location.href='index.html'">
			</td>
		</tr>
	</table>
</div>
</body>
</html>

▲result.jsp

 - index.html에서 전송받은 값을 양식에 맞게 출력하는 역할을 한다.

반응형