## 56. 웹 애플리케이션 자바 표준 기술 JavaEE 도입
- JavaEE 기술 소개
- JavaEE 버전 별 하위 기술 버전
- JavaEE 구현 서버 및 Servlet 컨테이너 관계
- Servlet API 사용법
report-common/build.gradle
ㄴ report-common 프로젝트의 build.gradle 스크립트 파일에서도 plugins 설정을 eclipse -> eclipse-wtp 로 변경해주기
report-server/build.gradle
ㄴ wtp 설정에서 component 의 contextPath 를 '/' 로 변경해줌
ㄴ gradle clean 해주기
settings.gradle
ㄴ 이제 app-client 는 사용하지 않으므로 주석처리해주기
ㄴ gradle 재설정하기
ㄴ 프로젝트 Refresh 해주기
=>
ㄴ report-server 제거
=>
=>
ㄴ Publish 해주기
=>
=>
ㄴ 다시 Add 해주기
=>
=>
ㄴ 다시 Publish 해주기
ㄴ /Users/yangsoyul/bitcamp-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/report-server 경로에서 확인
ㄴ 서버 실행
=>
ㄴ 서버 잘 실행됨을 확인
=>
=>
ㄴ 게시글 목록이 잘 출력됨을 확인
BoardAddServlet.java
ㄴ src0 에 백업해둔 BoardAddServlet.java 파일을 src 로 복사해준 후 @WebServlet 애노테이션으로 변경해주기
=>
BoardAddServlet.java
=>
BoardAddServlet.java
=>
BoardAddServlet.java
ㄴ HttpServletRequest, HttpServletResponse
=>
BoardAddServlet.java
ㄴ 해당 코드 삭제 => init 에서 만들어주기 때문에 제거해도 됨
=>
BoardAddServlet.java
ㄴ InitServlet 추가해주기
=>
=>
=>
BoardFormServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.util.AbstractServlet;
@WebServlet("/board/form")
public class BoardFormServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
int category = Integer.parseInt(request.getParameter("category"));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>비트캠프</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>게시글</h1>");
out.println("<form action='/board/add' method='post'>");
out.println("제목 <input type='text' name='title'><br>");
out.println("내용 <textarea name='content'></textarea><br>");
out.printf("<input type='hidden' name='category' value='%d'>\n", category);
out.println("<button>등록</button>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
}
=>
서버 restart
=>
=>
=>
=>
=>
LoginServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Member;
import bitcamp.util.AbstractServlet;
@WebServlet("/auth/login")
public class LoginServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Member m = new Member();
m.setPhone(request.getParameter("phone"));
m.setPassword(request.getParameter("password"));
Member loginUser = InitServlet.memberDao.findByPhoneAndPassword(m);
if (loginUser != null) {
// 로그인 정보를 다른 요청에도 사용할 수 있도록 세션 보관소에 담아 둔다.
request.getSession().setAttribute("loginUser", loginUser);
response.sendRedirect("/");
return;
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<meta http-equib='refresh' content='1;url=/auth/form.html'>");
out.println("<title>로그인</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>회원 정보가 일치하지 않습니다.<p>");
out.println("</body>");
out.println("</html>");
}
}
=>
서버 restart
=>
=>
=>
=>
=>
=>
listener 생성
ㄴ bitcamp.report.listener 패키지 생성
ㄴ ReportServletRequestListener 클래스 생성
ReportServletRequestListener.java
=>
ReportServletRequestListener.java
=>
서버 restart
=>
ㄴ 언제 어떤 실행이 되는지 확인
=>
=>
ㄴ 요청을 할 때마다 requestDestroyed 메서드 실행됨을 확인할 수 있음
=>
ReportServletRequestListener.java
=>
서버 restart
=>
=>
=>
BoardDetailServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Board;
import bitcamp.util.AbstractServlet;
@WebServlet("/board/detail")
public class BoardDetailServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Board board = InitServlet.boardDao.findBy(Integer.parseInt(request.getParameter("category")),
Integer.parseInt(request.getParameter("no")));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>게시글</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>게시글</h1>");
if (board == null) {
out.println("<p>해당 번호의 게시글이 없습니다!</p>");
} else {
out.println("<form action='/board/update' method='post'>");
out.printf("<input type='hidden' name='category' value='%d'>\n", board.getCategory());
out.println("<table border='1'>");
out.printf("<tr><th style='width:120px;'>번호</th>"
+ " <td style='width:300px;'><input type='text' name='no' value='%d' readonly='readonly'></td></tr>\n",
board.getNo());
out.printf("<tr><th>제목</th>" + " <td><input type='text' name='title' value='%s'></td></tr>\n",
board.getTitle());
out.printf("<tr><th>내용</th>"
+ " <td><textarea name='content' style='height:200px; width:400px;'>%s</textarea></td></tr>\n",
board.getContent());
out.printf("<tr><th>작성자</th> <td>%s</td></tr>\n", board.getWriter().getName());
out.printf("<tr><th>조회수</th> <td>%d</td></tr>\n", board.getViewCount());
out.printf("<tr><th>등록일</th> <td>%tY-%1$tm-%1$td</td></tr>\n", board.getCreatedDate());
out.println("</table>");
out.println("<div>");
out.println("<button>변경</button>");
out.println("<button type='reset'>초기화</button>");
out.printf("<a href='/board/delete?category=%d&no=%d'>삭제</a>\n", board.getCategory(),
board.getNo());
out.printf("<a href='/board/list?category=%d'>목록</a>", board.getCategory());
out.println("</div>");
out.println("</form>");
try {
board.setViewCount(board.getViewCount() + 1);
InitServlet.boardDao.updateCount(board);
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
}
}
out.println("</body>");
out.println("</html>");
}
}
BoardUpdateServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Board;
import bitcamp.report.vo.Member;
import bitcamp.util.AbstractServlet;
@WebServlet("/board/update")
public class BoardUpdateServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Member loginUser = (Member) request.getSession().getAttribute("loginUser");
if (loginUser == null) {
response.sendRedirect("/auth/form.html");
return;
}
int category = Integer.parseInt(request.getParameter("category"));
Board board = new Board();
board.setNo(Integer.parseInt(request.getParameter("no")));
board.setTitle(request.getParameter("title"));
board.setContent(request.getParameter("content"));
board.setWriter(loginUser);
board.setCategory(category);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/board/list?category=%d'>", category);
out.println("<title>게시글</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>게시글 변경</h1>");
try {
if (InitServlet.boardDao.update(board) == 0) {
out.println("<p>게시글이 없거나 변경 권한이 없습니다.</p>");
} else {
out.println("<p>변경했습니다!</p>");
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>게시글 변경 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
서버 restart
=>
=>
=>
=>
BoardDeleteServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Board;
import bitcamp.report.vo.Member;
import bitcamp.util.AbstractServlet;
@WebServlet("/board/delete")
public class BoardDeleteServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Member loginUser = (Member) request.getSession().getAttribute("loginUser");
if (loginUser == null) {
response.sendRedirect("/auth/form.html");
return;
}
int category = Integer.parseInt(request.getParameter("category"));
Board b = new Board();
b.setNo(Integer.parseInt(request.getParameter("no")));
b.setWriter(loginUser);
b.setCategory(category);
try {
if (InitServlet.boardDao.delete(b) == 0) {
throw new Exception("해당 번호의 게시글이 없거나 삭제 권한이 없습니다.");
} else {
response.sendRedirect("/board/list?category=" + category);
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
throw new RuntimeException(e);
}
}
}
=>
서버 restart
=>
=>
ㄴ 제대로 삭제됨을 확인
=> Member, Item 도 동일한 방식으로 수정해주기
MemberAddServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Member;
import bitcamp.util.AbstractServlet;
@WebServlet("/member/add")
public class MemberAddServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Member m = new Member();
m.setName(request.getParameter("name"));
m.setPhone(request.getParameter("phone"));
m.setPassword(request.getParameter("password"));
m.setPosition(request.getParameter("position").charAt(0));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/member/list'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원 등록</h1>");
try {
InitServlet.memberDao.insert(m);
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>등록 성공입니다!</p>");
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>등록 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
MemberDeleteServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.util.AbstractServlet;
@WebServlet("/member/delete")
public class MemberDeleteServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
if (InitServlet.memberDao.delete(Integer.parseInt(request.getParameter("no"))) == 0) {
throw new Exception("해당 번호의 직원이 없습니다!");
} else {
response.sendRedirect("/member/list");
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
throw new RuntimeException(e);
}
}
}
MemberDetailServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Member;
import bitcamp.util.AbstractServlet;
@WebServlet("/member/detail")
public class MemberDetailServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Member member = InitServlet.memberDao.findBy(Integer.parseInt(request.getParameter("no")));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원</h1>");
if (member == null) {
out.println("<p>해당 번호의 직원이 없습니다!</p>");
} else {
out.println("<form action='/member/update' method='post'>");
out.println("<table border='1'>");
out.printf("<tr><th style='width:120px;'>번호</th>"
+ " <td style='width:300px;'><input type='text' name='no' value='%d' readonly></td></tr>\n",
member.getNo());
out.printf("<tr><th>이름</th>" + " <td><input type='text' name='name' value='%s'></td></tr>\n",
member.getName());
out.printf(
"<tr><th>전화번호</th>" + " <td><input type='tel' name='phone' value='%s'></td></tr>\n",
member.getPhone());
out.printf("<tr><th>암호</th>" + " <td><input type='password' name='password'></td></tr>\n",
member.getName());
out.printf(
"<tr><th>직책</th>" + " <td><select name='position'>\n"
+ " <option value='0' %s>관리자</option>\n"
+ " <option value='1' %s>일반직원</option></select></td></tr>\n",
(member.getPosition() == '0' ? "selected" : ""),
(member.getPosition() == '1' ? "selected" : ""));
out.println("</table>");
out.println("<div>");
out.println("<button>변경</button>");
out.println("<button type='reset'>초기화</button>");
out.printf("<a href='/member/delete?no=%d'>삭제</a>\n", member.getNo());
out.println("<a href='/member/list'>목록</a>\n");
out.println("</div>");
out.println("</form>");
}
out.println("</body>");
out.println("</html>");
}
}
MemberListServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Member;
import bitcamp.util.AbstractServlet;
@WebServlet("/member/list")
public class MemberListServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletResponse response = (HttpServletResponse) res;
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원 목록</h1>");
out.println("<div style='margin:5px;'>");
out.println("<a href='/member/form.html'>새 직원</a>");
out.println("</div>");
out.println("<table border='1'>");
out.println(" <tr><th>번호</th> <th>이름</th> <th>전화번호</th></tr>");
out.println("</thead>");
out.println("<tbody>");
List<Member> list = InitServlet.memberDao.findAll();
for (Member m : list) {
out.printf("<tr>" + " <td>%d</td>" + " <td><a href='/member/detail?no=%d'>%s</a></td>"
+ " <td>%s</td></tr>\n", m.getNo(), m.getNo(), m.getName(), m.getPhone());
}
out.println("</tbody>");
out.println("</table>");
out.println("<a href='/'>메인</a>");
out.println("</body>");
out.println("</html>");
}
}
MemberUpdateServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Member;
import bitcamp.util.AbstractServlet;
@WebServlet("/member/update")
public class MemberUpdateServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Member member = new Member();
member.setNo(Integer.parseInt(request.getParameter("no")));
member.setName(request.getParameter("name"));
member.setPhone(request.getParameter("phone"));
member.setPassword(request.getParameter("password"));
member.setPosition(request.getParameter("position").charAt(0));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/member/list'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원 변경</h1>");
try {
if (InitServlet.memberDao.update(member) == 0) {
out.println("<p>회원이 없습니다.</p>");
} else {
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>변경했습니다!</p>");
}
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>변경 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
ItemAddServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Item;
import bitcamp.util.AbstractServlet;
@WebServlet("/item/add")
public class ItemAddServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Item item = new Item();
item.setName(request.getParameter("name"));
item.setPrice(Integer.parseInt(request.getParameter("price")));
item.setType(request.getParameter("type"));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/item/list'>");
out.println("<title>물품</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>물품 등록</h1>");
try {
InitServlet.itemDao.insert(item);
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>등록 성공입니다!</p>");
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>등록 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
ItemDeleteServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.util.AbstractServlet;
@WebServlet("/item/delete")
public class ItemDeleteServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
try {
if (InitServlet.itemDao.delete(Integer.parseInt(request.getParameter("no"))) == 0) {
throw new Exception("해당 번호의 물품이 없습니다!");
} else {
response.sendRedirect("/item/list");
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
throw new RuntimeException(e);
}
}
}
ItemListServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Item;
import bitcamp.util.AbstractServlet;
@WebServlet("/item/list")
public class ItemListServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletResponse response = (HttpServletResponse) res;
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>물품</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>물품 목록</h1>");
out.println("<div style='margin:5px;'>");
out.println("<a href='/item/form.html'>새 물품</a>");
out.println("</div>");
out.println("<table border='1'>");
out.println(" <tr><th>번호</th> <th>물품 이름</th> <th>물품 가격</th> <th>물품 종류</th></tr>");
out.println("</thead>");
List<Item> list = InitServlet.itemDao.findAll();
for (Item item : list) {
out.printf(
"<tr>" + " <td>%d</td>" + " <td><a href='/item/detail?no=%d'>%s</a></td>" + " <td>%d</td>"
+ " <td>%s</td></tr>\n",
item.getNo(), item.getNo(), item.getName(), item.getPrice(), item.getType());
}
out.println("</tbody>");
out.println("</table>");
out.println("<a href='/'>메인</a>");
out.println("</body>");
out.println("</html>");
}
}
ItemUpdateServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bitcamp.report.vo.Item;
import bitcamp.util.AbstractServlet;
@WebServlet("/item/update")
public class ItemUpdateServlet extends AbstractServlet {
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
Item item = new Item();
item.setNo(Integer.parseInt(request.getParameter("no")));
item.setName(request.getParameter("name"));
item.setPrice(Integer.parseInt(request.getParameter("price")));
item.setType(request.getParameter("type"));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/item/list'>");
out.println("<title>물품</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>물품 변경</h1>");
try {
if (InitServlet.itemDao.update(item) == 0) {
out.println("<p>물품이 없습니다.</p>");
} else {
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>변경했습니다!</p>");
}
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>변경 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
ㄴ AbstractServlet.java 파일 GenericServlet 이라는 이름으로 Rename 하기
=>
ㄴ GenericServlet.java 파일 제거
ㄴ Command + Shift + O 를 이용하여 모두 import 다시 해주기
ㄴ 해당 경고를 없애기 위해 모든 XxxXxxServlet.java 파일에 serial version ID 삽입해주기
=>
private static final long serialVersionUID = 1L;
=>
BoardAddServlet.java
ㄴ GenericServlet -> HttpServlet 으로 교체해주기
ㄴ XxxXxxServlet.java 파일의 service 메서드를 HttpServletRequest, HttpServletResponse 로 모두 변경해주기
BoardDeleteServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Board;
import bitcamp.report.vo.Member;
@WebServlet("/board/delete")
public class BoardDeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Member loginUser = (Member) request.getSession().getAttribute("loginUser");
if (loginUser == null) {
response.sendRedirect("/auth/form.html");
return;
}
int category = Integer.parseInt(request.getParameter("category"));
Board b = new Board();
b.setNo(Integer.parseInt(request.getParameter("no")));
b.setWriter(loginUser);
b.setCategory(category);
try {
if (InitServlet.boardDao.delete(b) == 0) {
throw new Exception("해당 번호의 게시글이 없거나 삭제 권한이 없습니다.");
} else {
response.sendRedirect("/board/list?category=" + category);
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
throw new RuntimeException(e);
}
}
}
BoardDetailServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Board;
@WebServlet("/board/detail")
public class BoardDetailServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Board board = InitServlet.boardDao.findBy(Integer.parseInt(request.getParameter("category")),
Integer.parseInt(request.getParameter("no")));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>게시글</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>게시글</h1>");
if (board == null) {
out.println("<p>해당 번호의 게시글이 없습니다!</p>");
} else {
out.println("<form action='/board/update' method='post'>");
out.printf("<input type='hidden' name='category' value='%d'>\n", board.getCategory());
out.println("<table border='1'>");
out.printf("<tr><th style='width:120px;'>번호</th>"
+ " <td style='width:300px;'><input type='text' name='no' value='%d' readonly='readonly'></td></tr>\n",
board.getNo());
out.printf("<tr><th>제목</th>" + " <td><input type='text' name='title' value='%s'></td></tr>\n",
board.getTitle());
out.printf("<tr><th>내용</th>"
+ " <td><textarea name='content' style='height:200px; width:400px;'>%s</textarea></td></tr>\n",
board.getContent());
out.printf("<tr><th>작성자</th> <td>%s</td></tr>\n", board.getWriter().getName());
out.printf("<tr><th>조회수</th> <td>%d</td></tr>\n", board.getViewCount());
out.printf("<tr><th>등록일</th> <td>%tY-%1$tm-%1$td</td></tr>\n", board.getCreatedDate());
out.println("</table>");
out.println("<div>");
out.println("<button>변경</button>");
out.println("<button type='reset'>초기화</button>");
out.printf("<a href='/board/delete?category=%d&no=%d'>삭제</a>\n", board.getCategory(),
board.getNo());
out.printf("<a href='/board/list?category=%d'>목록</a>", board.getCategory());
out.println("</div>");
out.println("</form>");
try {
board.setViewCount(board.getViewCount() + 1);
InitServlet.boardDao.updateCount(board);
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
}
}
out.println("</body>");
out.println("</html>");
}
}
BoardFormServlet.java
package bitcamp.report.handler;
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;
@WebServlet("/board/form")
public class BoardFormServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int category = Integer.parseInt(request.getParameter("category"));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>비트캠프</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>게시글</h1>");
out.println("<form action='/board/add' method='post'>");
out.println("제목 <input type='text' name='title'><br>");
out.println("내용 <textarea name='content'></textarea><br>");
out.printf("<input type='hidden' name='category' value='%d'>\n", category);
out.println("<button>등록</button>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
}
}
BoardListServlet.java
package bitcamp.report.handler;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
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 bitcamp.report.vo.Board;
@WebServlet("/board/list")
public class BoardListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int category = Integer.parseInt(request.getParameter("category"));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>게시글</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>게시글 목록</h1>");
out.println("<div style='margin:5px;'>");
out.printf("<a href='/board/form?category=%d'>새 글</a>\n", category);
out.println("</div>");
out.println("<table border='1'>");
out.println("<thead>");
out.println(" <tr><th>번호</th> <th>제목</th> <th>작성자</th> <th>조회수</th> <th>등록일</th></tr>");
out.println("</thead>");
List<Board> list = InitServlet.boardDao.findAll(category);
out.println("<tbody>");
for (Board board : list) {
out.printf(
"<tr>" + " <td>%d</td>" + " <td><a href='/board/detail?category=%d&no=%d'>%s</a></td>"
+ " <td>%s</td>" + " <td>%d</td>" + " <td>%s</td></tr>\n",
board.getNo(), board.getCategory(), board.getNo(),
(board.getTitle().length() > 0 ? board.getTitle() : "제목없음"), board.getWriter().getName(),
board.getViewCount(), dateFormatter.format(board.getCreatedDate()));
}
out.println("</tbody>");
out.println("</table>");
out.println("<a href='/'>메인</a>");
out.println("</body>");
out.println("</html>");
}
}
BoardUpdateServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Board;
import bitcamp.report.vo.Member;
@WebServlet("/board/update")
public class BoardUpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Member loginUser = (Member) request.getSession().getAttribute("loginUser");
if (loginUser == null) {
response.sendRedirect("/auth/form.html");
return;
}
int category = Integer.parseInt(request.getParameter("category"));
Board board = new Board();
board.setNo(Integer.parseInt(request.getParameter("no")));
board.setTitle(request.getParameter("title"));
board.setContent(request.getParameter("content"));
board.setWriter(loginUser);
board.setCategory(category);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/board/list?category=%d'>", category);
out.println("<title>게시글</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>게시글 변경</h1>");
try {
if (InitServlet.boardDao.update(board) == 0) {
out.println("<p>게시글이 없거나 변경 권한이 없습니다.</p>");
} else {
out.println("<p>변경했습니다!</p>");
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>게시글 변경 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
initServlet.java
package bitcamp.report.handler;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import bitcamp.report.dao.BoardDao;
import bitcamp.report.dao.ItemDao;
import bitcamp.report.dao.MemberDao;
import bitcamp.report.dao.MySQLBoardDao;
import bitcamp.report.dao.MySQLItemDao;
import bitcamp.report.dao.MySQLMemberDao;
import bitcamp.util.SqlSessionFactoryProxy;
@WebServlet(value = "/init", loadOnStartup = 1)
public class InitServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static SqlSessionFactory sqlSessionFactory;
public static BoardDao boardDao;
public static MemberDao memberDao;
public static ItemDao itemDao;
@Override
public void init() throws ServletException {
System.out.println("InitServlet.init() 호출됨!");
try {
sqlSessionFactory = new SqlSessionFactoryProxy(new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("bitcamp/report/config/mybatis-config.xml")));
boardDao = new MySQLBoardDao(sqlSessionFactory);
memberDao = new MySQLMemberDao(sqlSessionFactory);
itemDao = new MySQLItemDao(sqlSessionFactory);
} catch (Exception e) {
System.out.println("InitServlet.init() 실행 중 오류 발생!");
e.printStackTrace();
}
}
}
ItemAddServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Item;
@WebServlet("/item/add")
public class ItemAddServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Item item = new Item();
item.setName(request.getParameter("name"));
item.setPrice(Integer.parseInt(request.getParameter("price")));
item.setType(request.getParameter("type"));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/item/list'>");
out.println("<title>물품</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>물품 등록</h1>");
try {
InitServlet.itemDao.insert(item);
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>등록 성공입니다!</p>");
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>등록 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
ItemDeleteServlet.java
package bitcamp.report.handler;
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("/item/delete")
public class ItemDeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
if (InitServlet.itemDao.delete(Integer.parseInt(request.getParameter("no"))) == 0) {
throw new Exception("해당 번호의 물품이 없습니다!");
} else {
response.sendRedirect("/item/list");
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
throw new RuntimeException(e);
}
}
}
ItemDetailServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Item;
@WebServlet("/item/detail")
public class ItemDetailServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Item item = InitServlet.itemDao.findBy(Integer.parseInt(request.getParameter("no")));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>물품</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>물품</h1>");
if (item == null) {
out.println("<p>해당 번호의 물품이 없습니다!</p>");
} else {
out.println("<form action='/item/update'>");
out.println("<table border='1'>");
out.printf("<tr><th style='width:120px;'>번호</th>"
+ " <td style='width:300px;'><input type='text' name='no' value='%d' readonly></td></tr>\n",
item.getNo());
out.printf(
"<tr><th>물품 이름</th>" + " <td><input type='text' name='name' value='%s'></td></tr>\n",
item.getName());
out.printf(
"<tr><th>물품 가격</th>" + " <td><input type='text' name='price' value='%d'></td></tr>\n",
item.getPrice());
out.printf("<tr><th>물품 종류</th>" + " <td><select name='type'>\n"
+ " <option value='식료품' %s>식료품</option>\n" + " <option value='생활용품' %s>생활용품</option>\n"
+ " <option value='의류' %s>의류</option>\n" + " <option value='가전제품' %s>가전제품</option>\n"
+ " <option value='리빙' %s>리빙</option></select></td></tr>\n",
(item.getType() == "식료품" ? "selected" : ""), (item.getType() == "생활용품" ? "selected" : ""),
(item.getType() == "의류" ? "selected" : ""), (item.getType() == "가전제품" ? "selected" : ""),
(item.getType() == "리빙" ? "selected" : ""));
out.println("</table>");
out.println("<div>");
out.println("<button>변경</button>");
out.println("<button type='reset'>초기화</button>");
out.printf("<a href='/item/delete?no=%d'>삭제</a>\n", item.getNo());
out.println("<a href='/item/list'>목록</a>\n");
out.println("</div>");
out.println("</form>");
}
out.println("</body>");
out.println("</html>");
}
}
ItemListServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Item;
@WebServlet("/item/list")
public class ItemListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>물품</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>물품 목록</h1>");
out.println("<div style='margin:5px;'>");
out.println("<a href='/item/form.html'>새 물품</a>");
out.println("</div>");
out.println("<table border='1'>");
out.println(" <tr><th>번호</th> <th>물품 이름</th> <th>물품 가격</th> <th>물품 종류</th></tr>");
out.println("</thead>");
List<Item> list = InitServlet.itemDao.findAll();
for (Item item : list) {
out.printf(
"<tr>" + " <td>%d</td>" + " <td><a href='/item/detail?no=%d'>%s</a></td>" + " <td>%d</td>"
+ " <td>%s</td></tr>\n",
item.getNo(), item.getNo(), item.getName(), item.getPrice(), item.getType());
}
out.println("</tbody>");
out.println("</table>");
out.println("<a href='/'>메인</a>");
out.println("</body>");
out.println("</html>");
}
}
ItemUpdateServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Item;
@WebServlet("/item/update")
public class ItemUpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Item item = new Item();
item.setNo(Integer.parseInt(request.getParameter("no")));
item.setName(request.getParameter("name"));
item.setPrice(Integer.parseInt(request.getParameter("price")));
item.setType(request.getParameter("type"));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/item/list'>");
out.println("<title>물품</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>물품 변경</h1>");
try {
if (InitServlet.itemDao.update(item) == 0) {
out.println("<p>물품이 없습니다.</p>");
} else {
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>변경했습니다!</p>");
}
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>변경 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
LoginServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Member;
@WebServlet("/auth/login")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Member m = new Member();
m.setPhone(request.getParameter("phone"));
m.setPassword(request.getParameter("password"));
Member loginUser = InitServlet.memberDao.findByPhoneAndPassword(m);
if (loginUser != null) {
// 로그인 정보를 다른 요청에도 사용할 수 있도록 세션 보관소에 담아 둔다.
request.getSession().setAttribute("loginUser", loginUser);
response.sendRedirect("/");
return;
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<meta http-equib='refresh' content='1;url=/auth/form.html'>");
out.println("<title>로그인</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>회원 정보가 일치하지 않습니다.<p>");
out.println("</body>");
out.println("</html>");
}
}
MemberAddServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Member;
@WebServlet("/member/add")
public class MemberAddServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Member m = new Member();
m.setName(request.getParameter("name"));
m.setPhone(request.getParameter("phone"));
m.setPassword(request.getParameter("password"));
m.setPosition(request.getParameter("position").charAt(0));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/member/list'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원 등록</h1>");
try {
InitServlet.memberDao.insert(m);
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>등록 성공입니다!</p>");
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>등록 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}
MemberDeleteServlet.java
package bitcamp.report.handler;
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/delete")
public class MemberDeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
if (InitServlet.memberDao.delete(Integer.parseInt(request.getParameter("no"))) == 0) {
throw new Exception("해당 번호의 직원이 없습니다!");
} else {
response.sendRedirect("/member/list");
}
InitServlet.sqlSessionFactory.openSession(false).commit();
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
throw new RuntimeException(e);
}
}
}
MemberDetailServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Member;
@WebServlet("/member/detail")
public class MemberDetailServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Member member = InitServlet.memberDao.findBy(Integer.parseInt(request.getParameter("no")));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원</h1>");
if (member == null) {
out.println("<p>해당 번호의 직원이 없습니다!</p>");
} else {
out.println("<form action='/member/update' method='post'>");
out.println("<table border='1'>");
out.printf("<tr><th style='width:120px;'>번호</th>"
+ " <td style='width:300px;'><input type='text' name='no' value='%d' readonly></td></tr>\n",
member.getNo());
out.printf("<tr><th>이름</th>" + " <td><input type='text' name='name' value='%s'></td></tr>\n",
member.getName());
out.printf(
"<tr><th>전화번호</th>" + " <td><input type='tel' name='phone' value='%s'></td></tr>\n",
member.getPhone());
out.printf("<tr><th>암호</th>" + " <td><input type='password' name='password'></td></tr>\n",
member.getName());
out.printf(
"<tr><th>직책</th>" + " <td><select name='position'>\n"
+ " <option value='0' %s>관리자</option>\n"
+ " <option value='1' %s>일반직원</option></select></td></tr>\n",
(member.getPosition() == '0' ? "selected" : ""),
(member.getPosition() == '1' ? "selected" : ""));
out.println("</table>");
out.println("<div>");
out.println("<button>변경</button>");
out.println("<button type='reset'>초기화</button>");
out.printf("<a href='/member/delete?no=%d'>삭제</a>\n", member.getNo());
out.println("<a href='/member/list'>목록</a>\n");
out.println("</div>");
out.println("</form>");
}
out.println("</body>");
out.println("</html>");
}
}
MemberListServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Member;
@WebServlet("/member/list")
public class MemberListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원 목록</h1>");
out.println("<div style='margin:5px;'>");
out.println("<a href='/member/form.html'>새 직원</a>");
out.println("</div>");
out.println("<table border='1'>");
out.println(" <tr><th>번호</th> <th>이름</th> <th>전화번호</th></tr>");
out.println("</thead>");
out.println("<tbody>");
List<Member> list = InitServlet.memberDao.findAll();
for (Member m : list) {
out.printf("<tr>" + " <td>%d</td>" + " <td><a href='/member/detail?no=%d'>%s</a></td>"
+ " <td>%s</td></tr>\n", m.getNo(), m.getNo(), m.getName(), m.getPhone());
}
out.println("</tbody>");
out.println("</table>");
out.println("<a href='/'>메인</a>");
out.println("</body>");
out.println("</html>");
}
}
MemberUpdateServlet.java
package bitcamp.report.handler;
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 bitcamp.report.vo.Member;
@WebServlet("/member/update")
public class MemberUpdateServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Member member = new Member();
member.setNo(Integer.parseInt(request.getParameter("no")));
member.setName(request.getParameter("name"));
member.setPhone(request.getParameter("phone"));
member.setPassword(request.getParameter("password"));
member.setPosition(request.getParameter("position").charAt(0));
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<meta charset='UTF-8'>");
out.printf("<meta http-equiv='refresh' content='1;url=/member/list'>");
out.println("<title>직원</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>직원 변경</h1>");
try {
if (InitServlet.memberDao.update(member) == 0) {
out.println("<p>회원이 없습니다.</p>");
} else {
InitServlet.sqlSessionFactory.openSession(false).commit();
out.println("<p>변경했습니다!</p>");
}
} catch (Exception e) {
InitServlet.sqlSessionFactory.openSession(false).rollback();
out.println("<p>변경 실패입니다!</p>");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
}
}