실습(MVC(board))
- [Web_JSP] 23 이어서
1. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>board</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>MemberFrontController</servlet-name>
<servlet-class>com.board.app.member.MemberFrontController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MemberFrontController</servlet-name>
<url-pattern>*.me</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BoardFrontController</servlet-name>
<servlet-class>com.board.app.board.BoardFrontController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BoardFrontController</servlet-name>
<url-pattern>*.bo</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ReplyFrontController</servlet-name>
<servlet-class>com.board.app.reply.ReplyFrontController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ReplyFrontController</servlet-name>
<url-pattern>*.re</url-pattern>
</servlet-mapping>
</web-app>
2. header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<header id="header">
<a href="index.html" class="logo">Altitude <span>by Pixelarity</span></a>
<nav>
<ul>
<li><a href="#menu">Menu</a></li>
</ul>
</nav>
</header>
<!-- Nav -->
<nav id="menu">
<ul class="actions stacked">
<c:choose>
<c:when test="${memberNumber eq null}">
<li><a href="${pageContext.request.contextPath }/member/MemberJoin.me" class="button primary fit">회원가입</a></li>
<li><a href="${pageContext.request.contextPath }/member/MemberLogin.me" class="button fit">로그인</a></li>
</c:when>
<c:otherwise>
<li><a href="${pageContext.request.contextPath }/member/MemberLogout.me" class="button fit">로그아웃</a></li>
</c:otherwise>
</c:choose>
</ul>
</nav>
3. MemberFrontController.java
package com.board.app.member;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.board.app.action.ActionInfo;
public class MemberFrontController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String requestURL = req.getRequestURI();
// String command = requestURL.substring(requestURL.lastIndexOf("/") + 1);
String command = requestURL.substring(req.getContextPath().length());
ActionInfo actionInfo = null;
System.out.println(command);
if(command.equals("/member/MemberCheckIdOk.me")) {
new MemberCheckIdOk().execute(req, resp);
}else if(command.equals("/member/MemberJoinOk.me")) {
actionInfo = new MemberJoinOk().execute(req, resp);
}else if(command.equals("/member/MemberLogin.me")) {
actionInfo = new MemberLogin().execute(req, resp);
}else if(command.equals("/member/MemberLoginOk.me")) {
actionInfo = new MemberLoginOk().execute(req, resp);
}else if(command.equals("/member/MemberLogout.me")) {
actionInfo = new MemberLogout().execute(req, resp);
}
if(actionInfo != null) {
if(actionInfo.isRedirect()) {
resp.sendRedirect(actionInfo.getPath());
}else {
RequestDispatcher dispatcher = req.getRequestDispatcher(actionInfo.getPath());
dispatcher.forward(req, resp);
}
}
}
}
4. MemberLogout.java
package com.board.app.member;
import java.io.IOException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.board.app.action.Action;
import com.board.app.action.ActionInfo;
public class MemberLogout implements Action {
@Override
public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
ActionInfo actionInfo = new ActionInfo();
HttpSession session = req.getSession();
session.invalidate();
if(req.getHeader("Cookie") != null) {
Cookie[] cookies = req.getCookies();
for(Cookie cookie : cookies) {
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
}
actionInfo.setRedirect(true);
actionInfo.setPath(req.getContextPath() + "/member/MemberLogin.me");
return actionInfo;
}
}
5. boardDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE HTML>
<!--
Altitude by Pixelarity
pixelarity.com | hello@pixelarity.com
License: pixelarity.com/license
-->
<html>
<head>
<title>게시글 상세보기</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/assets/css/main.css" />
<style>
form textarea{
border-radius:0;
resize:none;
color:black !important;
}
form div#reply{
display:flex;
margin-bottom:3%;
}
input[type='submit']:not(#register), input[type='button'] {border-radius:0;}
ul.actions li {
padding: 0 0 0 0.2em;
}
p.content{
width:63%;
}
p.writer{
width:20%;
font-weight:bold;
}
</style>
</head>
<body class="is-preload">
<c:set var="board" value="${board}"/>
<c:set var="files" value="${files}"/>
<c:set var="page" value="${page}"/>
<!-- Page Wrapper -->
<div id="page-wrapper">
<!-- Wrapper -->
<div class="wrapper">
<div class="inner">
<jsp:include page="/app/fix/header.jsp"/>
</div>
</div>
<!-- Wrapper -->
<div class="wrapper">
<div class="inner">
<!-- Main -->
<section class="main">
<a href="#" class="image main"><img src="${pageContext.request.contextPath}/images/boardView.png" alt="" /></a>
<div class="col-12">
<ul class="actions" style="display:flex; justify-content:flex-end;">
<li><input type="button" value="글쓰기" class="primary" onclick="location.href = '${pageContext.request.contextPath}/board/BoardWrite.bo?page=${page}'"/></li>
<li><input type="button" value="목록" class="primary" onclick="location.href = '${pageContext.request.contextPath}/board/BoardListOk.bo?page=${page}'"/></li>
<c:if test="${memberNumber eq board.getMemberNumber()}">
<li><input type="button" value="수정" onclick="location.href = '${pageContext.request.contextPath}/board/BoardUpdate.bo?boardNumber=${board.getBoardNumber()}&page=${page}'"/></li>
<li><input type="button" value="삭제" onclick="location.href = '${pageContext.request.contextPath}/board/BoardDeleteOk.bo?boardNumber=${board.getBoardNumber()}'"/></li>
</c:if>
</ul>
</div>
<header class="major">
<h2 style="text-align:left;">${board.getBoardTitle()}</h2>
<p style="text-align:left; margin-bottom:1%">작성자 : ${board.getMemberId()}</p>
</header>
<hr style="margin-top:0;">
<div>
첨부파일
</div>
<!-- 첨부파일 목록 -->
<c:choose>
<c:when test="${files != null and fn:length(files) > 0}">
<c:forEach var="file" items="${files}">
<a href="${pageContext.request.contextPath}/board/FileDownloadOk.bo?fileName=${file.getFileName()}&fileNameOriginal=${file.getFileNameOriginal()}">
<c:out value="${file.getFileNameOriginal()}"/>
</a>
<br>
</c:forEach>
</c:when>
<c:otherwise>
<br>
첨부파일이 없습니다.
</c:otherwise>
</c:choose>
<hr />
<!-- 내용 -->
<h3><pre>${board.getBoardContent()}</pre></h3>
</section>
<section class="main accent2" style="padding:3%">
<header class="major" style="text-align:left;">
<h2>댓글</h2>
<p>여러분의 소중한 댓글을 작성해주세요.</p>
</header>
<form method="post" action="#" class="combined" style="width:auto;">
<textarea name="content" id="content" placeholder="비속어를 사용하지 말아주세요." class="invert" rows="5" style="border-radius:0; resize:none;"></textarea>
<input id="register" type="button" class="primary" value="등록" onclick="insert()"/>
</form>
<form action="#" id="replies" class="combined" style="flex-direction:column; margin:0; display:contents;">
</form>
</section>
</div>
</div>
<!-- Wrapper -->
<div class="wrapper">
<div class="inner">
<!-- Footer -->
<footer id="footer">
<section class="links">
<div>
<h3>Magna</h3>
<ul class="plain">
<li><a href="#">Aliquam tempus</a></li>
<li><a href="#">Ultrecies nul</a></li>
<li><a href="#">Gravida ultricies</a></li>
<li><a href="#">Commodo etiam</a></li>
</ul>
</div>
<div>
<h3>Feugiat</h3>
<ul class="plain">
<li><a href="#">Morbi sem lorem</a></li>
<li><a href="#">Praes sed dapi</a></li>
<li><a href="#">Sed adipis nullam</a></li>
<li><a href="#">Fus dolor lacinia</a></li>
</ul>
</div>
<div>
<h3>Tempus</h3>
<ul class="plain">
<li><a href="#">Donecnec etiam</a></li>
<li><a href="#">Aapibus sedun</a></li>
<li><a href="#">Namnulla tempus</a></li>
<li><a href="#">Morbi set amet</a></li>
</ul>
</div>
<div>
<h3>Aliquam</h3>
<ul class="plain">
<li><a href="#">Lorem prasent dia</a></li>
<li><a href="#">Nellentes ipsum</a></li>
<li><a href="#">Diamsed arcu dolor</a></li>
<li><a href="#">Sit amet cursus</a></li>
</ul>
</div>
</section>
<ul class="contact-icons">
<li class="icon solid fa-home">1234 Fictional Street #5432 Nashville, TN 00000-0000</li>
<li class="icon solid fa-phone"><a href="#">(000) 000-0000</a></li>
<li class="icon solid fa-envelope"><a href="#">info@untitled.tld</a></li>
</ul>
<p class="copyright">© Untitled. All rights reserved.</p>
</footer>
</div>
</div>
</div>
<!-- Scripts -->
<script src="${pageContext.request.contextPath}/assets/js/jquery.min.js"></script>
<script>
let contextPath = "${pageContext.request.contextPath}";
let boardNumber = "${board.getBoardNumber()}";
let memberNumber = "${memberNumber}";
</script>
<script src="${pageContext.request.contextPath}/assets/js/browser.min.js"></script>
<script src="${pageContext.request.contextPath}/assets/js/breakpoints.min.js"></script>
<script src="${pageContext.request.contextPath}/assets/js/util.js"></script>
<script src="${pageContext.request.contextPath}/assets/js/main.js"></script>
<script src="${pageContext.request.contextPath}/assets/js/reply.js"></script>
</body>
</html>
'웹 개발 > JSP' 카테고리의 다른 글
[Web_JSP] 23 (0) | 2022.06.11 |
---|---|
[Web_JSP] 22 (0) | 2022.06.10 |
[Web_JSP] 21 (0) | 2022.06.09 |
[Web_JSP] 20 (0) | 2022.06.08 |
[Web_JSP] 19 (0) | 2022.06.07 |