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);
}
}
=> 인코딩을 위해 필터 적용
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>
=> 회원 등록 및 목록 확인 완료
+ 상세 화면 작성 & 데이터 수정
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>
+ 상세 화면에서 삭제 및 목록 화면으로 돌아가기
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>
=> 알람이 올 수 있게 수정
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 {
}
}
=> 세션에 담아 작동시킬 경우
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 {
}
}
=> ModifyMemberController.java와 RegistMemberController.java 또한 세션의 방식으로 변경
TIP
톰캣 실행할 폴더 변경 시 아래와 같이 변경하면 됨
'자바' 카테고리의 다른 글
[Java 고급] 32장 파일 첨부 예제 (0) | 2024.02.28 |
---|---|
[Java 고급] 31장 파일 첨부 (0) | 2024.02.26 |
[Java 고급] 29장 서블릿 컨텍스트, 필터, 리스너 (0) | 2024.02.22 |
[Java 고급] 28장 세션 (1) | 2024.02.21 |
[Java 고급] 27장 쿠키 (0) | 2024.02.21 |