관리 메뉴

DeseoDeSeo

[Message System 실습 ] servlet파일들을 하나의 servlet파일로 구성 본문

JSP

[Message System 실습 ] servlet파일들을 하나의 servlet파일로 구성

deseodeseo 2023. 8. 30. 19:40
이전에는 loginService, logout, Join 등등 각각의 servlet파일 생성
- >
하나의 servlet 파일로 구성 !
  • 파일들을 합칠 수 있는 하나의 파일 servlet파일 'FrontController ' 생성
<% if(info!=null){ %>
    <a href="update.jsp">개인정보수정</a> 
    <a href="LogoutService.do">로그아웃</a>
<% }else{ %>
	 <a href="#menu">로그인</a>
	<% } %>
  • 합쳐야하는 servlet파일들과 연결되는 부분을 LogoutService.do로 바꿔야한다.

 

< main.jsp의 전체 코드 파일 > 

<%@page import="com.model.MessageDTO"%>
<%@page import="com.model.MessageDAO"%>
<%@page import="com.model.MemberDTO"%>
<%@page import="java.util.ArrayList"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Forty by HTML5 UP</title>
		<meta charset="utf-8" />
		<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
		<!--[if lte IE 8]><script src="assets/js/ie/html5shiv.js"></script><![endif]-->
		<link rel="stylesheet" href="assets/css/main.css" />
		<!--[if lte IE 9]><link rel="stylesheet" href="assets/css/ie9.css" /><![endif]-->
		<!--[if lte IE 8]><link rel="stylesheet" href="assets/css/ie8.css" /><![endif]-->
	</head>
	<body>
		<%
		// 로그인한 사람의 정보 가져오기
			MemberDTO info = (MemberDTO)session.getAttribute("info");
		%>
		<!-- Wrapper -->
			<div id="wrapper">

				<!-- Header -->
					<header id="header" class="alt">
						<a href="index.html" class="logo"><strong>Forty</strong> <span>by HTML5 UP</span></a>
						<nav>
							<% if(info!=null){ %>
								<a href="update.jsp">개인정보수정</a>
								<a href="LogoutService.do">로그아웃</a>
							<% }else{ %>
								<a href="#menu">로그인</a>
							<% } %>
						</nav>
					</header>

				<!-- Menu -->
					<nav id="menu">	
						<ul class="links">
							<li><h5>로그인</h5></li>
								<form action="LoginService.do" method="post">
									<li><input name="email" type="text"  placeholder="Email을 입력하세요"></li>
									<li><input name="pw" type="password"  placeholder="PW를 입력하세요"></li>
									<li><input type="submit" value="LogIn" class="button fit"></li>
								</form>
						</ul>
						<ul class="actions vertical">
							<li><h5>회원가입</h5></li>
								<form action="JoinService.do" method="post">
									<li><input name="email" type="text"  placeholder="Email을 입력하세요"></li>
									<li><input name="pw" type="password"  placeholder="PW를 입력하세요"></li>
									<li><input name="phone" type="text"  placeholder="전화번호를 입력하세요"></li>
									<li><input name="addr" type="text"  placeholder="집주소를 입력하세요"></li>
									<li><input type="submit" value="JoinUs" class="button fit"></li>
								</form>
						</ul>
					</nav>			
				<!-- Banner -->
					<section id="banner" class="major">
						<div class="inner">
							<header class="major">
							
								<% if(info != null){ %>
									<h1><%= info.getEmail() %>님 환영합니다!</h1>
								<% }else{ %>
									<h1>로그인을 먼저해주세요.</h1>
								<% } %>
								
								<!-- 로그인 후 로그인 한 사용자의 세션아이디로 바꾸시오.
									 ex)smart님 환영합니다 -->
							</header>
							<div class="content">
								<p>아래는 지금까지 배운 웹 기술들입니다.<br></p>
								<ul class="actions">
									<li><a href="#one" class="button next scrolly">확인하기</a></li>
								</ul>
							</div>
						</div>
					</section>

				<!-- Main -->
					<div id="main">

						<!-- One -->
							<section id="one" class="tiles">
								<article>
									<span class="image">
										<img src="images/pic01.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">HTML</a></h3>
										<p>홈페이지를 만드는 기초 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic02.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">CSS</a></h3>
										<p>HTML을 디자인해주는 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic03.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Servlet/JSP</a></h3>
										<p>Java를 기본으로 한 웹 프로그래밍 언어/스크립트 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic04.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">JavaScript</a></h3>
										<p>HTML에 기본적인 로직을 정의할 수 있는 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic05.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">MVC</a></h3>
										<p>웹 프로젝트 중 가장 많이 사용하는 디자인패턴</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic06.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Web Project</a></h3>
										<p>여러분의 최종프로젝트에 웹 기술을 활용하세요!</p>
									</header>
								</article>
							</section>
					<!-- Two -->
							<section id="two">
								<div class="inner">
									<header class="major">
										<h2>나에게 온 메세지 확인하기</h2>
									</header>
									<p></p>
									<ul class="actions">
										<% if(info != null){ %>
										<% 
											MessageDAO dao = new MessageDAO();
											ArrayList<MessageDTO> list = dao.select(info.getEmail());
											for(int i = 0; i < list.size(); i++){
												// 1.아이유-이번 주 금요일 시간어때요 (2023-07-27 16:00)
												out.print("<li>");
												out.print( i + 1 + ".");
												out.print(list.get(i).getSend_name()+"-");
												out.print(list.get(i).getContent()+" (");
												out.print(list.get(i).getSend_date()+")");
												
												out.print("------------");
												out.print("<a href='MsgDelete.do?num=");
												out.print(list.get(i).getNum()+"'>삭제</a>");
												out.print("</li>");
												out.print("<br>");
											}
										%>
										<% }else{ %>
											<li>로그인을 하세요.</li>
										<% } %>
										<li><a href="MsgAllDelete.do" class="button next scrolly">전체삭제하기</a></li>
									</ul>
								</div>
							</section>

					</div>

				<!-- Contact -->
					<section id="contact">
						<div class="inner">
							<section>
								<form action="MsgSendService.do" method="post">
								<div class="field half first">
										<label for="name">Name</label>
										<input name="send_name"  type="text"  id="name" placeholder="보내는 사람 이름" />
									</div>
									<div class="field half">
										<label for="email">Email</label>
										<input name="receive_email" type="text"  id="email" placeholder="보낼 사람 이메일"/>
									</div>

									<div class="field">
										<label for="message">Message</label>
										<textarea name="content"  id="message" rows="6"></textarea>
									</div>
									<ul class="actions">
										<li><input type="submit" value="Send Message" class="special" /></li>
										<li><input type="reset" value="Clear" /></li>
									</ul>
								</form>
							</section>
							
							<section class="split">
								<section>
									<div class="contact-method">
										<span class="icon alt fa-envelope"></span>
										<h3>Email</h3>
										<% if(info != null){ %>
											<a href="#"><%=info.getEmail() %></a>    
										<% }else{ %>
											<a href="#">로그인 한 사람의 이메일을 출력</a>
										<% } %>
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-phone"></span>
										<h3>Phone</h3>
										<% if(info != null){ %>
											<span><%=info.getPhone() %></span>
										<% }else{ %>
											<span>로그인 한 사람의 전화번호를 출력</span>
										<% } %>
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-home"></span>
										<h3>Address</h3>
										<% if(info!=null){ %>
										   <span><%=info.getAddr() %></span>
										<% }else{ %>
											<span>로그인 한 사람의 집주소를 출력</span>
										<% } %>
									</div>
								</section>
							</section>					
						</div>
					</section>

				<!-- Footer -->
					<footer id="footer">
						<div class="inner">
							<ul class="icons">
								<li><a href="#" class="icon alt fa-twitter"><span class="label">Twitter</span></a></li>
								<li><a href="#" class="icon alt fa-facebook"><span class="label">Facebook</span></a></li>
								<li><a href="#" class="icon alt fa-instagram"><span class="label">Instagram</span></a></li>
								<li><a href="#" class="icon alt fa-github"><span class="label">GitHub</span></a></li>
								<li><a href="#" class="icon alt fa-linkedin"><span class="label">LinkedIn</span></a></li>
							</ul>
							<ul class="copyright">
								<li>&copy; Untitled</li><li>Design: <a href="https://html5up.net">HTML5 UP</a></li>
							</ul>
						</div>
					</footer>

			</div>

		<!-- Scripts -->
			<script src="assets/js/jquery.min.js"></script>
			<script src="assets/js/jquery.scrolly.min.js"></script>
			<script src="assets/js/jquery.scrollex.min.js"></script>
			<script src="assets/js/skel.min.js"></script>
			<script src="assets/js/util.js"></script>
			<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
			<script src="assets/js/main.js"></script>

	</body>
</html>
  • FrontController.java파일에 조건문을 삽입해서 JoinService, LoginService.. 등의 기존파일 코드를 복사, 붙여넣기 한다. 
package com.front;

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 javax.servlet.http.HttpSession;

import com.model.MemberDAO;
import com.model.MemberDTO;
import com.model.MessageDAO;
import com.model.MessageDTO;

/**
 * Servlet implementation class FrontController
 */
/* 하단은 url매핑 하는 것 */
/* 무엇으로 .do로 끝나면 여기로 옴, */
@WebServlet("*.do")
public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//System.out.println("프론트 컨트롤러 실행");
		
		// 1.client가 요청한 url주소 가져오기
		String requestURI =request.getRequestURI();
		//System.out.println(requestURI);
		
		// 2. Context Path(아주 중요)( 웹 어플리케이션의 시작 주소 )
		String contextPath = request.getContextPath();
		//System.out.println(contextPath);
		
		// 3. client 요청 부분만 분리
		//  출력된 /MessageSystem/LoginService.do  여기에서 LoginService.do 이부분만 출력하기 위해서
		String command = requestURI.substring(contextPath.length()+1);
		//System.out.println(command);
		
		
		if( command.equals("JoinService.do")) {
			//1. 회원가입 기능 구현
			// 1.email, pw, phone, addr 값을 콘솔(이클립스)에 출력
			
			System.out.println("회원가입 기능실행");
			request.setCharacterEncoding("EUC-KR");
			
			String email = request.getParameter("email");
			String pw = request.getParameter("pw");
			String phone = request.getParameter("phone");
			String addr = request.getParameter("addr");

			// System.out.println(email + "/" + pw + "/" + phone + "/" + addr);
			
			MemberDTO dto = new MemberDTO(email, pw, phone, addr);
			// System.out.println(dto.toString());
			
			MemberDAO dao = new MemberDAO();
			int cnt = dao.join(dto);
			
			if(cnt > 0) {
				System.out.println("회원가입 성공");
			}else {
				System.out.println("회원가입 실패");
			}
			
			response.sendRedirect("main.jsp");
			
		}else if(command.equals("LoginService.do")) {

			System.out.println("로그인 기능실행");
			String email = request.getParameter("email");
			String pw = request.getParameter("pw");
			
			MemberDTO dto = new MemberDTO(email, pw);
			MemberDAO dao = new MemberDAO();
			MemberDTO info = dao.login(dto);
			
			if(info != null) {
				System.out.println("로그인 성공");
				System.out.println(info.toString());
				// 세션에 로그인 정보 저장
				// 세션은 서버에 있는 영역
				HttpSession session = request.getSession();
				session.setAttribute("info", info);
			}else {
				System.out.println("로그인 실패");
			}
			response.sendRedirect("main.jsp");
	
		} else if(command.equals("LogoutService.do")){
			
			System.out.println("로그아웃 기능실행");
			
			HttpSession session = request.getSession();
			session.invalidate();
			response.sendRedirect("main.jsp");
			
		} else if(command.equals("UpdateService.do")) {
			//한글이 깨지지 않도록 데이터를 가져오기 전에 설정
			//회원정보 수정 기능구현
			request.setCharacterEncoding("EUC-KR");
			
			HttpSession session = request.getSession();
			MemberDTO info = (MemberDTO) session.getAttribute("info");
			
			String pw = request.getParameter("pw");
			String phone = request.getParameter("tel");
			String addr = request.getParameter("addr");
			
			MemberDAO dao = new MemberDAO();
			MemberDTO changeInfo = new MemberDTO(info.getEmail(), pw, phone, addr);
			int cnt = dao.update(changeInfo);
			
			if(cnt > 0) {
				//세션영역에 수정된 회원정보를 저장, main.jsp로 이동
				session.setAttribute("info", changeInfo);
				response.sendRedirect("main.jsp");	
			}else {
				response.sendRedirect("update.jsp");
			}
		}else if(command.equals("MsgSendService.do")) {
			//메세지 작성 기능 구현
			System.out.println("메세지 작성 기능실행");
			
			request.setCharacterEncoding("EUC-KR");
			
			String send_name = request.getParameter("send_name");
			String receive_email = request.getParameter("receive_email");
			String content = request.getParameter("content");
			
			MessageDTO dto = new MessageDTO(send_name, receive_email, content);
			
			// System.out.println(dto.toString());
			
			MessageDAO dao = new MessageDAO();
			int cnt = dao.insert(dto);
			
			String msg = "";
			
			if(cnt > 0) {
				msg = "메세지 전송 성공!";
			}else {
				msg = "메세지 전송 실패...";
			}
			response.setCharacterEncoding("EUC-KR");
			
			PrintWriter out = response.getWriter();
			out.print("<script>");
			out.print("alert('" + msg + "');");
			out.print("location.href='main.jsp#two';");
			out.print("</script>");
			
			
		}else if(command.equals("MsgAllDelete.do")) {
			// 메세지 전체 삭제 기능 구현
			MessageDAO dao = new MessageDAO();
			
			HttpSession session = request.getSession();
			MemberDTO info = (MemberDTO)session.getAttribute("info");
			dao.allDelete(info.getEmail());
			
			response.sendRedirect("main.jsp#two");
			
		}else if(command.equals("MsgDelete.do")) {
			// 메세지 개별 삭제 기능 구현
			String num = request.getParameter("num");
			int ch_num = Integer.parseInt(num);
			MessageDAO dao = new MessageDAO();
			dao.delete(ch_num);
			response.sendRedirect("main.jsp#two");
		}
		
		}
}

 

Update는 회원 정보 수정할 수 있는 화면도 필요해서 Update.jsp파일 필요함.
따라서 update.jsp에서 관련 정보를 수정함.

< update.jsp>

<%@page import="com.model.MemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Forty by HTML5 UP</title>
		<meta charset="utf-8" />
		<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
		<!--[if lte IE 8]><script src="assets/js/ie/html5shiv.js"></script><![endif]-->
		<link rel="stylesheet" href="assets/css/main.css" />
		<!--[if lte IE 9]><link rel="stylesheet" href="assets/css/ie9.css" /><![endif]-->
		<!--[if lte IE 8]><link rel="stylesheet" href="assets/css/ie8.css" /><![endif]-->
	</head>
	<body>
		<% MemberDTO info = (MemberDTO)session.getAttribute("info"); %>
	
		<h3>회원정보수정</h3>
		<h1>접속한 Email: <%=info.getEmail() %></h1>
		<form action="UpdateService.do" method="post">
			<input name="pw" type="password" placeholder="PW를 입력하세요">
			<input name="tel" type="text" placeholder="전화번호를 입력하세요">
			<input name="addr" type="text" placeholder="주소를 입력하세요">
			<input type="submit" value="UPDATE" class="button fit">
		</form>

	<!-- Scripts -->
			<script src="assets/js/jquery.min.js"></script>
			<script src="assets/js/jquery.scrolly.min.js"></script>
			<script src="assets/js/jquery.scrollex.min.js"></script>
			<script src="assets/js/skel.min.js"></script>
			<script src="assets/js/util.js"></script>
			<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
			<script src="assets/js/main.js"></script>

	</body>
</html>