반응형

 

jsp란

 

: HTML 코드에 java코드를 넣어 동적 웹페이지를 생성하는 웹어플리케이션 도구이다.

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%--
	1. 디렉티브(Directive)에 대하여
	
	JSP 페이지에 대한 설정정보를 지정할 때 사용된다. (page, taglib, include 등)
	
	ex) <%@ 디렉티브이름 속성명="속성값" ... %> 


	2. 스크립트 요소에 대하여...
	
	JSP에서 문서의 내용을 동적으로 생성하기 위해 사용된다.
	
	- 표현식 (expression) : 값을 출력결과에 포함시키고자 할 때 사용된다. ex) <%=값%>
	- 스크립트릿 (scriptlet) : 자바코드 블럭을 작성할 때 사용한다. ex> <% 자바코드들... %>
	- 선언부 (declaration) : 스크립트릿이나 표현식에서 사용할 수 있는 메서드 작성시 사용한다. ㅏex <%! ~~~ %>
	
	
	3. JSP 기본객체와 영역(SCOPE)
	
	- PAGE : 하나의 JSP페이지를 처리할 때 사용되는 영역 => pageContext
	- REQUEST : 하나의 HTTP요청을 처리할 때 사용되는 영역 => request
	- SESSION : 하나의 브라우저(사용자)와 관련된 영역 => session
	- APPLICATION : 하나의 웹애플리케이션과 관련된 영역 => application
	
--%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

 

 

 

Mybatis 버전 회원 정보 프로그램

 

 

Java 고급에 사용한 코드를 이용해 작성하였다.

 

- 경로 파일 위치

 

 

 

list.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	List<MemberVO> memList = (List<MemberVO>) request.getAttribute("memList");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원목록</title>
</head>
<body>
	<table border="1">
		<tr>
			<th>ID</th>
			<th>이름</th>
			<th>전화번호</th>
			<th>주소</th>
		</tr>
<%
	if(memList.size() > 0) {
		for(MemberVO mv : memList) {
%>
		<tr>
			<td><% out.print(mv.getMemId()); %></td>
			<td><%=mv.getMemName()%></td>
			<td><%=mv.getMemTel()%></td>
			<td><%=mv.getMemAddr()%></td>
		</tr>
<%
		}
	} else {
%>
	<tr>
		<td colspan="4">회원정보가 존재하지 않습니다.</td>
	</tr>
<%
	}
%>
	<tr align="center">
		<td colspan="4"><a href="<%=request.getContextPath()%>/member/insert.do">[회원 등록]</a></td>
	</tr>

	</table>

</body>
</html>

 

 

ListMemberController.java

package kr.or.ddit.member.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;

@WebServlet(value = "/member/list.do")
public class ListMemberController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		IMemberService memService = MemberServiceImpl.getInstance();
		List<MemberVO> memList = memService.displayMember();
		req.setAttribute("memList", memList);
		
		/////////////////////////////////////////////////////
		
		req.getRequestDispatcher("/views/member/list.jsp").forward(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

 

/ServletExam/member/list.do

 

/ServletExam/member/insert.do

 

 

=> 인코딩을 위해 필터 적용

 

MyCharacterEncoding.java

package kr.or.ddit.common.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyCharacterEncoding implements Filter{
	
	private String encoding; // 인코딩 정보
	
	@Override
	public void destroy() {
		
	}
	
	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		
		req.setCharacterEncoding(encoding); // 요청 인코딩 처리
		resp.setCharacterEncoding(encoding); // 응답 인코딩 처리
		
		chain.doFilter(req, resp);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
		if(filterConfig.getInitParameter("encoding") == null) {
			this.encoding = "UTF-8";
		} else {
			this.encoding =  filterConfig.getInitParameter("encoding");
		}
		
		System.out.println("설정된 인코딩 정보 : " + encoding);
	}
}

 

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>ServletExam</display-name>
  
  <filter>
  	<filter-name>MyCharacterEncoding</filter-name>
  	<filter-class>kr.or.ddit.common.filter.MyCharacterEncoding</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>MyCharacterEncoding</filter-name>
  	<url-pattern>*.do</url-pattern>
  </filter-mapping>
  
</web-app>

 

/ServletExam/member/list.do : 한글로 입력 시 글자 깨짐 없음

 

 

=> 회원 등록 및 목록 확인 완료

 

 

+ 상세 화면 작성 & 데이터 수정

 

DetailMemberController.java

package kr.or.ddit.member.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("/member/detail.do")
public class DetailMemberController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		req.getRequestDispatcher("/views/member/detail.jsp").forward(req, resp);
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

 

 

detail.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	MemberVO mv = (MemberVO) request.getAttribute("mv"); 
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 상세</title>
</head>
<body>
	<table border="1">
		<tr>
			<td>I D:</td>
			<td><%=mv.getMemId()%></td>
		</tr>
		<tr>
			<td>이름:</td>
			<td><%=mv.getMemName()%></td>
		</tr>
		<tr>
			<td>전화번호:</td>
			<td><%=mv.getMemTel()%></td>
		</tr>
		<tr>
			<td>주소:</td>
			<td><%=mv.getMemAddr()%></td>
		</tr>
		<tr>
			<td colspan="2">
			<a href="#">[목록]</a>
			<a href="./update.do?memId=<%=mv.getMemId()%>">[회원정보 수정]</a>
			<a href="#">[회원정보 삭제]</a>
			</td>
		</tr>
	</table>
</body>
</html>

 

 

DetailMemberController.java

package kr.or.ddit.member.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.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;

@WebServlet("/member/detail.do")
public class DetailMemberController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String memId = req.getParameter("memId");
		
		IMemberService memService = MemberServiceImpl.getInstance();
		
		MemberVO mv = memService.getMember(memId);
		
		req.setAttribute("mv", mv);
		
		req.getRequestDispatcher("/views/member/detail.jsp").forward(req, resp);
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

 

 

ModifyMemberController.java

package kr.or.ddit.member.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.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;

@WebServlet("/member/update.do")
public class ModifyMemberController extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String memId = req.getParameter("memId");
		
		IMemberService memService = MemberServiceImpl.getInstance();
		
		MemberVO mv = memService.getMember(memId);
		
		req.setAttribute("mv", mv);
		
		req.getRequestDispatcher("/views/member/updateForm.jsp").forward(req, resp);
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String memId = req.getParameter("memId");
		String memName = req.getParameter("memName");
		String memTel = req.getParameter("memTel");
		String memAddr = req.getParameter("memAddr");
		
		IMemberService memService = MemberServiceImpl.getInstance();
		
		MemberVO mv = new MemberVO(memId, memName, memTel, memAddr);

		int cnt = memService.modifyMember(mv);
		
		if(cnt > 0) {
			// 수정 성공
		} else {
			// 수정 실패
		}
		
		req.getRequestDispatcher("/member/list.do").forward(req, resp);
		
	}
}

 

 

updateForm.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	MemberVO mv = (MemberVO)request.getAttribute("mv");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보 변경</title>
</head>
<body>
	<form action="./update.do" method="post">
		<input type="hidden" name="memId" value="<%=mv.getMemId()%>">
		<table>
			<tr>
				<td>I D:</td>
				<td><%=mv.getMemId()%></td>
			</tr>
			<tr>
				<td>이름:</td>
				<td><input type="text" name="memName" value="<%=mv.getMemName()%>"></td>
			</tr>
			<tr>
				<td>전화번호:</td>
				<td><input type="text" name="memTel" value="<%=mv.getMemTel()%>"></td>
			</tr>
			<tr>
				<td>주소:</td>
				<td><textarea name="memAddr" ><%=mv.getMemAddr()%></textarea></td>
			</tr>
		</table>
		<input type="submit" value="회원정보 수정">

	</form>
</body>
</html>

 

/ServletExam/member/list.do

 

/ServletExam/member/detail.do?memId=a001

 

 

+ 상세 화면에서 삭제 및 목록 화면으로 돌아가기

 

RemoveMemberController.java

package kr.or.ddit.member.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.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;

@WebServlet("/member/delete.do")
public class RemoveMemberController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String memId = req.getParameter("memId");
		
		IMemberService memService = MemberServiceImpl.getInstance();
		
		int cnt = memService.removeMember(memId);
		
		if(cnt > 0) {
			// 삭제 성공
			msg = "성공";
		} else {
			// 삭제 실패
			msg = "실패";
		}
		
//		req.setAttribute("msg", msg);
		// url의 문제가 있기에 아래와 같은 식으로 진행함
//		req.getRequestDispatcher("/member/list.do").forward(req, resp);
		
		resp.sendRedirect(req.getContextPath() + "/member/list.do"); // 리다이렉트 처리...
		
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}
}

 

 

list.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	List<MemberVO> memList = (List<MemberVO>) request.getAttribute("memList");
	
	String msg = request.getAttribute("msg") == null ? "" 
				: (String)request.getAttribute("msg");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원목록</title>
</head>
<body>
	<table border="1">
		<tr>
			<th>ID</th>
			<th>이름</th>
			<th>전화번호</th>
			<th>주소</th>
		</tr>
<%
	if(memList.size() > 0) {
		for(MemberVO mv : memList) {
%>
		<tr>
			<td><%=mv.getMemId()%></td>
			<td><a href="./detail.do?memId=<%=mv.getMemId()%>"><%=mv.getMemName()%></a></td>
			<td><%=mv.getMemTel()%></td>
			<td><%=mv.getMemAddr()%></td>
		</tr>
<%
		}
	} else {
%>
	<tr>
		<td colspan="4">회원정보가 존재하지 않습니다.</td>
	</tr>
<%
	}
%>
	<tr align="center">
		<td colspan="4"><a href="<%=request.getContextPath()%>/member/insert.do">[회원 등록]</a></td>
	</tr>

	</table>
	
<%if(!msg.equals("")) {%>
<script>
		alert('정상적으로 처리 되었습니다.');
</script>
<%}%>
</body>
</html>

 

 

detail.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	MemberVO mv = (MemberVO) request.getAttribute("mv"); 
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 상세</title>
</head>
<body>
	<table border="1">
		<tr>
			<td>I D:</td>
			<td><%=mv.getMemId()%></td>
		</tr>
		<tr>
			<td>이름:</td>
			<td><%=mv.getMemName()%></td>
		</tr>
		<tr>
			<td>전화번호:</td>
			<td><%=mv.getMemTel()%></td>
		</tr>
		<tr>
			<td>주소:</td>
			<td><%=mv.getMemAddr()%></td>
		</tr>
		<tr>
			<td colspan="2">
			<a href="./list.do">[목록]</a>
			<a href="./update.do?memId=<%=mv.getMemId()%>">[회원정보 수정]</a>
			<a href="<%=request.getContextPath()%>/member/delete.do?memId=<%=mv.getMemId()%>">[회원정보 삭제]</a>
			</td>
		</tr>
	</table>
</body>
</html>

 

/ServletExam/member/detail.do?memId=test > 회원정보 삭제 버튼 클릭 시 목록에서 삭제됨

 

sendRedirect 대신 getRequestDispatcher으로 작동 할 시 알람이 작동함

 

 

=> 알람이 올 수 있게 수정

 

list.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	List<MemberVO> memList = (List<MemberVO>) request.getAttribute("memList");
	
	String msg = request.getParameter("msg") == null ? "" 
				: (String)request.getParameter("msg");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원목록</title>
</head>
<body>
	<table border="1">
		<tr>
			<th>ID</th>
			<th>이름</th>
			<th>전화번호</th>
			<th>주소</th>
		</tr>
<%
	if(memList.size() > 0) {
		for(MemberVO mv : memList) {
%>
		<tr>
			<td><%=mv.getMemId()%></td>
			<td><a href="./detail.do?memId=<%=mv.getMemId()%>"><%=mv.getMemName()%></a></td>
			<td><%=mv.getMemTel()%></td>
			<td><%=mv.getMemAddr()%></td>
		</tr>
<%
		}
	} else {
%>
	<tr>
		<td colspan="4">회원정보가 존재하지 않습니다.</td>
	</tr>
<%
	}
%>
	<tr align="center">
		<td colspan="4"><a href="<%=request.getContextPath()%>/member/insert.do">[회원 등록]</a></td>
	</tr>

	</table>
	
<%if(!msg.equals("")) {%>
<script>
		alert('정상적으로 처리 되었습니다.');
</script>
<%}%>
</body>
</html>

 

 

RemoveMemberController.java

package kr.or.ddit.member.controller;

import java.io.IOException;
import java.net.URLEncoder;

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.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;

@WebServlet("/member/delete.do")
public class RemoveMemberController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String memId = req.getParameter("memId");
		
		IMemberService memService = MemberServiceImpl.getInstance();
		
		int cnt = memService.removeMember(memId);
		
		String msg = "";
		
		if(cnt > 0) {
			// 삭제 성공
			msg = "성공";
		} else {
			// 삭제 실패
			msg = "실패";
		}
        
		resp.sendRedirect(req.getContextPath() + "/member/list.do?msg=" 
				+ URLEncoder.encode(msg, "UTF-8")); // 리다이렉트 처리...
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}
}

 

삭제 시 알람 작동. url에 msg가 함께 출력됨

 

 

=> 세션에 담아 작동시킬 경우

 

list.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	List<MemberVO> memList = (List<MemberVO>) request.getAttribute("memList");
	
// 	String msg = request.getParameter("msg") == null ? "" 
// 				: (String)request.getParameter("msg");
	// 위의 방식이 아닌 session으로 작동 가능
	String msg = session.getAttribute("msg") == null ? "" 
				: (String)session.getAttribute("msg");
	session.removeAttribute("msg");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원목록</title>
</head>
<body>
	<table border="1">
		<tr>
			<th>ID</th>
			<th>이름</th>
			<th>전화번호</th>
			<th>주소</th>
		</tr>
<%
	if(memList.size() > 0) {
		for(MemberVO mv : memList) {
%>
		<tr>
			<td><%=mv.getMemId()%></td>
			<td><a href="./detail.do?memId=<%=mv.getMemId()%>"><%=mv.getMemName()%></a></td>
			<td><%=mv.getMemTel()%></td>
			<td><%=mv.getMemAddr()%></td>
		</tr>
<%
		}
	} else {
%>
	<tr>
		<td colspan="4">회원정보가 존재하지 않습니다.</td>
	</tr>
<%
	}
%>
	<tr align="center">
		<td colspan="4"><a href="<%=request.getContextPath()%>/member/insert.do">[회원 등록]</a></td>
	</tr>

	</table>
	
<%if(!msg.equals("")) {%>
<script>
		alert('정상적으로 처리 되었습니다.');
</script>
<%}%>
</body>
</html>

 

 

RemoveMemberController.java

package kr.or.ddit.member.controller;

import java.io.IOException;
import java.net.URLEncoder;

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.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;

@WebServlet("/member/delete.do")
public class RemoveMemberController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		String memId = req.getParameter("memId");
		
		IMemberService memService = MemberServiceImpl.getInstance();
		
		int cnt = memService.removeMember(memId);
		
		String msg = "";
		
		if(cnt > 0) {
			// 삭제 성공
			msg = "성공";
		} else {
			// 삭제 실패
			msg = "실패";
		}
		
		// 세션을 이용할 때
		req.getSession().setAttribute("msg", msg);
		
		// 세션을 이용할 때
		resp.sendRedirect(req.getContextPath() + "/member/list.do"); // 리다이렉트 처리...
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}
}

 

삭제 시 알람 출력. url에서 msg가 확인되지 않음 + msg 확인 후 삭제하여 같은 알람 여러번 발생하는 것을 막음

 

 

=> ModifyMemberController.java와 RegistMemberController.java 또한 세션의 방식으로 변경

 

 

 

TIP

 

톰캣 실행할 폴더 변경 시 아래와 같이 변경하면 됨

 

 

오른쪽 마우스 클릭 > Remove

 

오른쪽 마우스 클릭 > Add and Remove 클릭

 

추가할 폴더 선택 > Add > ServletTest처럼 추가된 것 확인 > Finish 클릭

 

추가된 화면 확인

 

 

반응형