본문 바로가기

Java

[JAVA] Servelet을 이용한 회원가입

반응형

 자바 - 스프링을 배우고 싶다. 

그 전에 자바 - 서블릿 - jsp를 이용하여 간단한 회원가입을 만들어 보자. (1년전에 수업들은걸 되살려보자!!)

 

그 전에 우리나라 대기업들이 많이 쓰는 스프링이 무엇인지, 서블릿, jsp, tomcat이 무엇인지 간단히 알아보고 가보자

 

MVC : 디자인 패턴 중 하나로 하나의 프로젝트를 구성할 때 3가지 역할로 구분한 패턴이다.

 Model - 애플리케이션의 데이터를 나타낸다. 데이타베이스 안의 상수, 초기화값, 변수, 값 등을 뜻한다. 또한 이러한 데이터, 정보들의 가공을 책임지는 컴포넌트를 말한다. (예를 들어 좋아요 0개에서 버튼을 누르면 1이 된다. 여기서 초기의 0이란 값과 누르고 나서의 1이란 값이다.)

 

 View - 말 그대로 보이는 것. 출력되는 모든 것들이다. (예를 들어 좋아요 0개에서 버튼을 누르면 1이 된다. 여기서 좋아요 0개의 버튼, 누르고 난 후의 1이란 좋아요 버튼 보이는 것들 모두 뷰이다.)

 

 Controller - 데이터와 UI(사용자 인터페이스)를 잇는 역할을 한다. (예를 들어 좋아요 0에서 버튼을 누르면 1이 된다. 여기서 버튼을 누르면 > 0(초기의 값) + 1 => 1(누르고 나서의 값) 이다.)

스프링이란 ?

 자바를 위한 오픈 소스 애플리케이션 프레임워크, 동적인 웹사이트를 개발하기 위한 여러가지 서비스를 간단하게 제공해준다. 

 

Servelet?

 서블릿이란 클라이언ㅌ트의 요청을 처리하고, 그 결과를 반환해주는 자바 웹프로그래밍 기술이다.

uri 맵, WAS로 응답을 전달 하는 등의 기능을 한다. 

 

jsp(Java Server Page)?

 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성하여 웹브라우저에 돌려주는 서버 사이드 스크립트 언어다. 

 

apache tomcat ? 

 WAS(Web application server)의 하나이다. WAS란 웹 어플리케이션이 동작하도록 지원하는 목적을 가졌다.(서비스 및 비즈니스 로직을 담고 있는 서버 라고 할 수 있다.) tomcat은 java코드를 실행할 수 있는 자바 HTTP웹 서버 환경을 제공해 준다.

 


 

 서블릿을 만들고 web app libraries에 ojdbc6.jar, tomcat~.jar을 넣는 것과 같은 기본적인건 제외하고 

설명하겠당

sec02.ex01과 test02이 오늘 살펴볼 코드이다.

sec02.ex01부분은 servlet, test02은 jsp이다.

 

jsp부분 listMembers, memberForm이 MVC중 V(VIEW)부분, MemberController는 Controller부분, MemberDAO와 MemberVO는 Model부분이라 할 수 있따.

 

1. MemberController

package sec02.ex01;

import java.io.IOException;
import java.util.List;
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("/member/*")
public class MemberController extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	MemberDAO memberDAO;
	
	//memberDAO 생성
	public void init() throws ServletException
	{
		memberDAO = new MemberDAO();
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}
	
	private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String nextPage = null;
		
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		//URL에서 요청명을 가져옴
		String action =request.getPathInfo();
		
		//최초 요청이거나 각 action마다 가는 페이지를 설정
		if (action ==null || action.equals("/listMembers.do")) {
			List<MemberVO> membersList = memberDAO.listMembers();
			request.setAttribute("membersList", membersList);
			//listMember.jsp로 포워딩
			nextPage = "/test02/listMembers.jsp";
		}
		else if(action.equals("/addMember.do")) {
			String id = request.getParameter("id");
			String pwd = request.getParameter("pwd");
			String name = request.getParameter("name");
			String email = request.getParameter("email");
			MemberVO memberVO = new MemberVO(id, pwd, name, email);
			memberDAO.addMember(memberVO);
			//포워딩
			nextPage = "/member/listMembers.do";
		}
		else if(action.equals("/memberForm.do")) {
			//포워딩
			nextPage = "/test02/memberForm.jsp";
		}
		else {
			List<MemberVO> membersList = memberDAO.listMembers();
			request.setAttribute("membersList", membersList);
			
			nextPage = "/test02/listmembers.jsp";
		}
		
		//nextPage에 지정한 요청명으로 다시 서블릿에 요청
		RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
		dispatch.forward(request, response);
	}

}

 

2. Member.DAO

package sec02.ex01;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class MemberDAO {
	
	private DataSource dataFactory;
	private Connection conn;
	private PreparedStatement pstmt;
	
	public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context) ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public List<MemberVO> listMembers() {
		List<MemberVO> membersList = new ArrayList<>();
		try {
			conn = dataFactory.getConnection();
			//t_member 테이블 불러오기
			String query = "select * from t_member order by joinDate desc";
			//prepareStatement 객체를 생성하여 SQL문을 인자로 전달
			pstmt = conn.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			
			while(rs.next()) {

				String id = rs.getString("id");
				String pwd = rs.getString("pwd");
				String name = rs.getString("name");
				String email = rs.getString("email");
				Date joinDate = rs.getDate("joinDate");
				//조회한 회원 정보를 레코드 별로 MemberVO 객체 속성에 저장
				MemberVO memberVO = new MemberVO(id, pwd, name, email, joinDate);
				//MembersList에 MemberVO 객체들을 저장
				membersList.add(memberVO);
			}
			rs.close();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
	e.printStackTrace();
		}
	return membersList;
	}
	public void addMember(MemberVO m) {
		try {
			conn = dataFactory.getConnection();
			
			String id = m.getId();
			String pwd = m.getPwd();
			String name = m.getName();
			String email = m.getEmail();
			
			String query = "INSERT INTO t_member(id, pwd, name, email)" + "VALUES(?, ?, ?, ?)";
			//PrepareStatement 객체를 생성하면서 SQL문을 인자로 전달
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
			pstmt.setString(3, name);
			pstmt.setString(4, email);
			//SQL문 실행
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();	
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

3. MemberVO

package sec02.ex01;

import java.util.Date;

public class MemberVO {
	
	private String id;
	private String pwd;
	private String name;
	private String email;
	private Date joinDate;

	public MemberVO(String id, String pwd, String name, String email) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
	}
	
	public MemberVO(String id, String pwd, String name, String email, Date joinDate) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
		this.joinDate = joinDate;
	}
	
	public String getId() {
		return id;
	}

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

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getJoinDate() {
		return joinDate;
	}

	public void setJoinDate(Date joinDate) {
		this.joinDate = joinDate;
	}


}

 

 

4. listmembers

<%@ page language="java" contentType="text/html; charset=UTF-8" import = "java.util.*,sec01.ex01.*"
    pageEncoding="UTF-8" isELIgnored = "false" %>

<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<c:set var = "contextPath" value = "${pageContext.request.contextPath}" />

<%
	request.setCharacterEncoding("UTF-8");
%>

<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
	<style>
		.cls1{
		font-size:40px;
		text-align:center;
	}
		.cls2{
		font-size:20px;
		text-align:center;
	}
	
	</style>
</head>
<body>
	<p class = "cls1">회원 정보</p>
	<table align = "center" border = "1">
		<tr align = "center" bgcolor = "lightgreen">
			<td width = "7%"> <b> 아이디 </b></td>
			<td width = "7%"> <b> 비밀번호 </b></td>
			<td width = "7%"> <b> 이름 </b></td>
			<td width = "7%"> <b> 이메일 </b></td>
			<td width = "7%"> <b> 가입일 </b></td>
		</tr>
		
	<c:choose>
		<c:when test = "${membersList == null}" >
			<tr>
				<td colspan = 5> <b>등록된 회원이 없습니다.</b> </td>
			</tr>
		</c:when>
		<c:when test = "${membersList != null }" >
			<c:forEach var = "mem" items = "${membersList}">
				<tr align = "center">
					<td> ${mem.id} </td>
					<td> ${mem.pwd} </td>
					<td> ${mem.name} </td>
					<td> ${mem.email} </td>
					<td> ${mem.joinDate} </td>
				</tr>
			</c:forEach>
		</c:when>
	</c:choose>					
</table>
<!-- 회원가입하기 클릭시 서블릿에 /member/memberForm.do로 요청 -->
<a href = "${contextPath}/member/memberForm.do"> <p class = "cls2">회원가입하기</p></a>
</body>
</html>

 

5. memberForm

<%@ page language="java" contentType="text/html; charset=UTF-8" import = "java.util.*,sec01.ex01.*"
    pageEncoding="UTF-8" isELIgnored = "false" %>

<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>

<c:set var = "contextPath" value = "${pageContext.request.contextPath}" />
<html>
<head>
<meta charset="UTF-8">
<title>회원가입창</title>
</head>
<body>
<form method = "post" action = "${contextPath}/member/addMember.do">
<h1 style = "text-align:center">회원가입창</h1>
	<table align = "center">
		<tr>
			<td width ="200"> <p align = "right">아이디</td>
			<td width = "400"> <input type ="text" name="id"> </td>
		</tr>
		<tr>
			<td width ="200"> <p align = "right">비밀번호</td>
			<td width = "400"> <input type ="text" name="pwd"> </td>
		</tr>
		<tr>
			<td width ="200"> <p align = "right">이름</td>
			<td width = "400"> <input type ="text" name="name"> </td>
		</tr>
		<tr>
			<td width ="200"> <p align = "right">이메일</td>
			<td width = "400"> <input type ="text" name="email"> </td>
		</tr>
		<tr>
			<td width ="200"> <p>&nbsp;</p></td>
			<td width = "400">
				<input type = "submit" value = "가입하기">
				<input type = "reset" value = "다시입력">
			</td>
		</tr>		
	</table>
</form>
</body>
</html>

 

 

 

 


 

 

오늘도 열코 합시다 여러분 ㅎ_ㅎ 다음에는 스프링을 지대로배워봅시다ㅏㅏ 

반응형