Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 객체 비교
- 집합_SET
- 생성자오버로드
- 어윈 사용법
- 추상메서드
- Java
- 대덕인재개발원
- 제네릭
- oracle
- GRANT VIEW
- 사용자예외클래스생성
- 인터페이스
- 환경설정
- abstract
- 자바
- 메소드오버로딩
- 컬렉션 타입
- 자동차수리시스템
- 정수형타입
- NestedFor
- 컬렉션프레임워크
- 참조형변수
- 오라클
- cursor문
- 한국건설관리시스템
- EnhancedFor
- 예외미루기
- exception
- 예외처리
- 다형성
Archives
- Today
- Total
거니의 velog
231107_JSP 과제 5 본문
[MemberVO.java]
package kr.or.ddit.ch11.vo;
public class MemberVO{
private String mem_id;
private String mem_pw;
private String mem_name;
private String mem_sex;
public String getMem_id() {
return mem_id;
}
public void setMem_id(String mem_id) {
this.mem_id = mem_id;
}
public String getMem_pw() {
return mem_pw;
}
public void setMem_pw(String mem_pw) {
this.mem_pw = mem_pw;
}
public String getMem_name() {
return mem_name;
}
public void setMem_name(String mem_name) {
this.mem_name = mem_name;
}
public String getMem_sex() {
return mem_sex;
}
public void setMem_sex(String mem_sex) {
this.mem_sex = mem_sex;
}
@Override
public String toString() {
return "MemberVO [mem_id=" + mem_id + ", mem_pw=" + mem_pw + ", mem_name=" + mem_name + ", mem_sex=" + mem_sex
+ "]";
}
}
[MemberDAO.java]
package kr.or.ddit.ch11.dao;
import java.util.ArrayList;
import kr.or.ddit.ch11.vo.MemberVO;
public class MemberDAO{
private ArrayList<MemberVO> memberList = new ArrayList<MemberVO>();
private static MemberDAO instance = new MemberDAO();
public static MemberDAO getInstance() {
return instance;
}
public MemberDAO() {
MemberVO memVo1 = new MemberVO();
memVo1.setMem_id("qwer");
memVo1.setMem_name("홍길동");
memVo1.setMem_pw("1234");
memVo1.setMem_sex("남성");
MemberVO memVo2 = new MemberVO();
memVo2.setMem_id("asdf");
memVo2.setMem_name("강감찬");
memVo2.setMem_pw("1234");
memVo2.setMem_sex("남성");
MemberVO memVo3 = new MemberVO();
memVo3.setMem_id("zxcv");
memVo3.setMem_name("성춘향");
memVo3.setMem_pw("1234");
memVo3.setMem_sex("여성");
memberList.add(memVo1);
memberList.add(memVo2);
memberList.add(memVo3);
}
public ArrayList<MemberVO> getMemberList() {
return memberList;
}
public MemberVO getMemberById(String mem_id) {
MemberVO memberById = null;
for(int i = 0; i < memberList.size(); i++) {
MemberVO member = memberList.get(i);
if(member != null && member.getMem_id() != null && member.getMem_id().equals(mem_id)) {
memberById = member;
break;
}
}
return memberById;
}
}
[BoardVO.java]
package kr.or.ddit.ch11.vo;
import java.util.List;
public class BoardVO implements Comparable<BoardVO>{
private int no = 0;
private String title;
private String content;
private String writer;
private String regDate;
private int hit = 0;
private BoardFileVO fileVO;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getRegDate() {
return regDate;
}
public void setRegDate(String regDate) {
this.regDate = regDate;
}
public int getHit() {
return hit;
}
public void setHit(int hit) {
this.hit = hit;
}
public BoardFileVO getFileVO() {
return fileVO;
}
public void setFileVO(BoardFileVO fileVO) {
this.fileVO = fileVO;
}
@Override
public int compareTo(BoardVO board) {
if (board.no < no) {
return 1;
} else if (board.no > no) {
return -1;
}
return 0;
}
@Override
public String toString() {
return "BoardVO [no=" + no + ", title=" + title + ", content=" + content + ", writer=" + writer + ", regDate="
+ regDate + ", hit=" + hit + ", fileVO=" + fileVO + "]";
}
}
[BoardRepository.java]
package kr.or.ddit.ch11.dao;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import kr.or.ddit.ch11.vo.BoardFileVO;
import kr.or.ddit.ch11.vo.BoardVO;
public class BoardRepository {
private static int no = 0; // 게시글번호
private static int fno = 0; // 파일 번호
private ArrayList<BoardVO> listOfBoard = new ArrayList<BoardVO>();
private static BoardRepository instance = new BoardRepository();
public static BoardRepository getInstance(){
return instance;
}
public BoardRepository() {}
public ArrayList<BoardVO> selectBoardList() {
return listOfBoard;
}
public BoardVO getBoardById(int no) {
BoardVO boardVO = null;
for (int i = 0; i < listOfBoard.size(); i++) {
BoardVO board = listOfBoard.get(i);
if (board != null && board.getNo() == no) {
boardVO = new BoardVO();
boardVO = board;
break;
}
}
boardVO.setHit(boardVO.getHit() + 1);
return boardVO;
}
public void deleteBoard(int no) {
for (int i = 0; i < listOfBoard.size(); i++) {
BoardVO board = listOfBoard.get(i);
if (board != null && board.getNo() == no) {
listOfBoard.remove(i);
}
}
}
public void updateBoard(BoardVO board) {
for (int i = 0; i < listOfBoard.size(); i++) {
BoardVO gBoard = listOfBoard.get(i);
if (gBoard != null && gBoard.getNo() == board.getNo()) {
// gBoard.setNo(board.getNo());
gBoard.setTitle(board.getTitle());
gBoard.setContent(board.getContent());
gBoard.setRegDate(getCurrentTime());
if(!board.getFileVO().getFileName().equals("")) {
gBoard.setFileVO(board.getFileVO());
}
break;
}
}
}
public void addFileNo(BoardFileVO fvo) {
fvo.setNo(++fno);
}
public void addBoard(BoardVO board) {
board.setNo(++no);
board.setRegDate(getCurrentTime());
listOfBoard.add(board);
}
public int getNo() {
return no;
}
public String getCurrentTime() {
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
return formatter.format(calendar.getTime());
}
}
[BoardFileVO.java]
package kr.or.ddit.ch11.vo;
public class BoardFileVO {
private int no = 0;
private String contentType;
private long fileSize;
private String fileName;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public long getFileSize() {
return fileSize;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
@Override
public String toString() {
return "BoardFileVO [no=" + no + ", contentType=" + contentType + ", fileSize=" + fileSize + ", fileName="
+ fileName + "]";
}
}
[login.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String fail = request.getParameter("fail");
//System.out.println(fail);
%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 로그인 페이지를 작성해주세요.
** 아래 처럼 만들어주세요.
아이디 : _________
비밀번호 : __________
[ 로그인 ]
2. 로그인 처리는 login_process.jsp 로 요청해주세요.
> 회원가입을 진행하지 않고, 특정 아이디/비밀번호를 정해서 로그인 처리해주세요.
-->
<form id="loginForm" name="loginForm" class="form-horizontal" action="login_process.jsp" method="post">
<div class="form-group row" style="margin-bottom: 10px;">
<label for="loginId" class="col-sm-3">아이디 : </label>
<div class="col-sm-9">
<input type="text" name="loginId" id="loginId" class="form-control" >
</div>
</div>
<div class="form-group row" style="margin-bottom: 10px;">
<label for="loginPw" class="col-sm-3">비밀번호 : </label>
<div class="col-sm-9">
<input type="text" name="loginPw" id="loginPw" class="form-control" >
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-12">
<button id="loginBtn" class="btn btn-primary" type="button">로그인</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
<script type="text/javascript">
$(function(){
var loginForm = $("#loginForm");
var loginBtn = $("#loginBtn");
var fail = <%= fail %>;
loginBtn.on("click", function(){
var loginId = $("#loginId").val();
var loginPw = $("#loginPw").val();
if(!loginId) {
alert("아이디를 입력해주세요.");
return false;
}
if(!loginPw) {
alert("비밀번호를 입력해주세요.");
return false;
}
loginForm.submit();
});
if(fail == "0"){
alert("로그인 실패!");
}
});
</script>
</html>
[login_process.jsp]
<%@page import="kr.or.ddit.ch11.vo.MemberVO"%>
<%@page import="kr.or.ddit.ch11.dao.MemberDAO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 로그인 화면에서 넘겨받은 아이디/비밀번호를 이용하여 로그인 인증을 진행해주세요.
> 본인이 결정한 아이디/비밀번호일때 로그인 처리해주세요.
2. 로그인 인증
> 로그인 성공 시, menu.jsp로 이동합니다.
> 로그인 실패 시, login.jsp로 이동합니다.
-->
<%
request.setCharacterEncoding("utf-8");
String loginId = request.getParameter("loginId");
String loginPw = request.getParameter("loginPw");
//System.out.println("loginId : " + loginId);
//System.out.println("loginPw : " + loginPw);
MemberDAO memDao = MemberDAO.getInstance();
MemberVO memVo = memDao.getMemberById(loginId);
//System.out.println("memVo : " + memVo);
if(memVo != null){
if(loginId.equals(memVo.getMem_id()) && loginPw.equals(memVo.getMem_pw())) { // 로그인 성공
response.sendRedirect("menu.jsp");
}else { // 로그인 실패
response.sendRedirect("login.jsp?fail=0");
}
}else { // 로그인 실패
response.sendRedirect("login.jsp?fail=0");
}
%>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
</html>
[menu.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 메뉴 페이지를 작성해주세요.
[출력 예시]
메뉴
_____________________
[ 게시판 ] [ 자료실 ]
2. 게시판 버튼을 클릭 시, 게시판 페이지(boardList.jsp)로 이동합니다.
3. 자료실 버튼을 클릭 시, 자료실 페이지(dropbox.jsp)로 이동합니다.
-->
<h3>메뉴를 선택해주세요!</h3>
<br />
<div>
1 : <button id="goToBoard" name="goToBoard" class="btn btn-primary" type="button">게시판</button>
<br />
<br />
2 : <button id="goToRefer" name="goToRefer" class="btn btn-secondary" type="button">자료실</button>
</div>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
[commonJsFooter.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script type="text/javascript">
$(function(){
$("#goToBoard").click(function(){
location.href = "boardList.jsp";
});
$("#goToRefer").click(function(){
location.href = "dropbox.jsp";
});
$("#memLogout").click(function(){
location.href = "login.jsp";
});
});
</script>
- http://localhost/ch11/test/login.jsp
[tomcat-users.xml]
...
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="admin"/>
<user username="tomcat" password="1234" roles="tomcat"/>
<user username="both" password="1234" roles="tomcat,role1"/>
<user username="role1" password="1234" roles="role1"/>
<user username="admin" password="1234" roles="admin"/>
...
[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_3_1.xsd" version="3.1">
<display-name>JSPBook</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 11장 예외처리 과제 시작 -->
<security-role>
<role-name>admin</role-name>
</security-role>
<security-constraint>
<display-name>addBoardSecurity</display-name>
<web-resource-collection>
<web-resource-name>JSPBookProject</web-resource-name>
<description></description>
<url-pattern>/ch11/test/boardForm.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>권한 관리자명</description>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/ch11/test/loginSecurity.jsp</form-login-page>
<form-error-page>/ch11/test/login_failed.jsp</form-error-page>
</form-login-config>
</login-config>
<!-- 11장 예외처리 과제 끝 -->
</web-app>
[boardList.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 게시판 목록을 출력해주세요.
> JSTL을 활용해주세요.
> 초기 화면에서는 데이터가 없으므로 '조회하실 게시글이 존재하지 않습니다.'를 출력해주세요.
> 데이터가 있는 경우엔 제목, 작성자, 작성일, 조회수를 맞춰서 데이터를 출력해주세요.
** 초반 데이터는 없습니다.
제목 작성자 작성일 조회수
─────────────────────────────────────────────────────────────────────────────
조회하실 게시글이 존재하지 않습니다.
─────────────────────────────────────────────────────────────────────────────
[ 게시글 등록하기 ]
** 데이터가 있는 경우 아래와 같이 출력됩니다.
제목 작성자 작성일 조회수
─────────────────────────────────────────────────────────────────────────────
게시판 제목입니다......! 1 허나훔 2022-12-12 1245
게시판 제목입니다......! 2 송서영 2022-12-12 1245
게시판 제목입니다......! 3 채진영 2022-12-12 1245
게시판 제목입니다......! 4 배영호 2022-12-12 1245
게시판 제목입니다......! 5 조은혁 2022-12-12 1245
게시판 제목입니다......! 6 조현수 2022-12-12 1245
.....
─────────────────────────────────────────────────────────────────────────────
[ 게시글 등록하기 ]
2. 시큐리티 적용
> 게시판 등록 페이지를 시큐리티 보호자원으로 설정해주세요.
- 시큐리티 인증방식 : FORM
- 시큐리티 로그인
> 등록 페이지는 역할명 admin만 접근 가능토록 해주세요.
- id : admin
- pw : a1234
> 로그인 인증 시, loginSecurity.jsp로 이동하여 인증을 진행 할 수 있도록 해주세요.
> 로그인 인증 실패 시, loginFailed.jsp로 이동할 수 있도록 해주세요.
3. 게시글 클릭 시, 해당 게시글 상세보기 페이지로 이동합니다.
> 상세보기 페이지로 이동할 때, 조회수가 상승합니다.
-->
<%@ include file="/ch11/test/pageModuleTest/lnbContainer.jsp" %>
<table class="table table-hover" style="margin-top: 10px;">
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<tr>
<td colspan="5">
조회하실 게시글이 존재하지 않습니다.
</td>
</tr>
</table>
<a class="btn btn-info" href="boardForm.jsp">게시글 등록</a>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
[loginSecurity.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 시큐리티 보호자원 이동 시, 인증 페이지를 작성해주세요.
[출력 예시]
아이디 : ________
비밀번호 : _________
[ 로그인 ]
-->
<form class="form-signin" action="j_security_check" method="post">
<div class="form-group row" style="margin-bottom: 10px;">
<label for="loginId" class="col-sm-3">아이디 : </label>
<div class="col-sm-9">
<input type="text" name="j_username" id="j_username" class="form-control" >
</div>
</div>
<div class="form-group row" style="margin-bottom: 10px;">
<label for="loginPw" class="col-sm-3">비밀번호 : </label>
<div class="col-sm-9">
<input type="text" name="j_password" id="j_password" class="form-control" >
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-12">
<button id="loginBtn" class="btn btn-primary" type="submit">로그인</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
</html>
[login_failed.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 시큐리티 로그인 인증 실패 페이지를 작성해주세요.
> 로그인
[출력 예시]
인증에 실패하였습니다!
[ 로그인 페이지 이동 ]
-->
<h3>인증에 실패하였습니다!</h3>
<br />
<button id="goLoginPage" name="goLoginPage" class="btn btn-primary" type="button">로그인 페이지로 이동</button>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
[commonJsFooter.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script type="text/javascript">
$(function(){
// 게시판 이동
$("#goToBoard").click(function(){
location.href = "boardList.jsp";
});
// 자료실 이동
$("#goToRefer").click(function(){
location.href = "dropbox.jsp";
});
// 로그아웃
$("#memLogout, #goLoginPage").click(function(){
location.href = "login.jsp";
});
});
</script>
- http://localhost/ch11/test/boardList.jsp
[login_process.jsp]
<%
request.setCharacterEncoding("utf-8");
String loginId = request.getParameter("loginId");
String loginPw = request.getParameter("loginPw");
//System.out.println("loginId : " + loginId);
//System.out.println("loginPw : " + loginPw);
MemberDAO memDao = MemberDAO.getInstance();
MemberVO memVo = memDao.getMemberById(loginId);
//System.out.println("memVo : " + memVo);
if(memVo != null){
if(loginId.equals(memVo.getMem_id()) && loginPw.equals(memVo.getMem_pw())) { // 로그인 성공
response.sendRedirect("menu.jsp?id=" + loginId);
}else { // 로그인 실패
response.sendRedirect("login.jsp?fail=0");
}
}else { // 로그인 실패
response.sendRedirect("login.jsp?fail=0");
}
%>
[menu.jsp]
<h3>메뉴를 선택해주세요!</h3>
<br />
<div>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
%>
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
1 : <button id="goToBoard" name="goToBoard" class="btn btn-primary" type="button">게시판</button>
<br />
<br />
2 : <button id="goToRefer" name="goToRefer" class="btn btn-secondary" type="button">자료실</button>
</div>
[boardList.jsp]
<%@ include file="/ch11/test/pageModuleTest/lnbContainer.jsp" %>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
%>
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
<table class="table table-hover" style="margin-top: 10px;">
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<tr>
<td colspan="5">
조회하실 게시글이 존재하지 않습니다.
</td>
</tr>
</table>
<a class="btn btn-info" href="boardForm.jsp?id=<%= id %>">게시글 등록</a>
[dropbox.jsp]
<%@ include file="/ch11/test/pageModuleTest/lnbContainer.jsp" %>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
%>
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
[boardForm.jsp]
<%@page import="kr.or.ddit.ch11.vo.MemberVO"%>
<%@page import="kr.or.ddit.ch11.dao.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 게시판 등록 페이지를 작성해주세요.
[출력 예]
게시글 등록
─────────────────────────────
제목 :
작성자 :
내용 :
─────────────────────────────
첨부파일 : [파일 선택 ]
─────────────────────────────
[ 등록 ] [ 목록 ]
2. 등록 버튼 클릭 시, 게시글 등록(boardInsert.jsp)을 진행해주세요.
3. 목록 버튼 클릭 시, 게시판 목록 페이지(boardList.jsp)로 이동해주세요
-->
<h4>게시글 등록</h4>
<br />
<form id="boardForm" name="boardForm" class="form-horizontal" action="boardInsert.jsp" method="post" enctype="multipart/form-data">
<div class="form-group row" style="margin-bottom: 10px;">
<label for="title" class="col-sm-3">제목 : </label>
<div class="col-sm-9">
<input type="text" name="title" id="title" class="form-control" >
</div>
</div>
<div class="form-group row" style="margin-bottom: 10px;">
<label for="content" class="col-sm-3">내용 : </label>
<div class="col-sm-9">
<textarea id="content" name="content" class="form-control" style="height: 200px;" wrap="soft"></textarea>
</div>
</div>
<div class="form-group row" style="margin-bottom: 10px;">
<label for="file" class="col-sm-3">파일 : </label>
<div class="col-sm-9">
<input id="file" name="file" class="form-control" type="file" />
</div>
</div>
<div class="form-group row">
<div class="col-sm-offset-2 col-sm-12">
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
%>
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
<%
MemberDAO memDao = MemberDAO.getInstance();
MemberVO memVo = memDao.getMemberById(id);
//System.out.println("memVo : " + memVo);
%>
<input id="writer" name="writer" type="hidden" value="<%= memVo.getMem_name() %>" />
<input id="regDate" name="regDate" type="hidden" />
<button id="boardInsBtn" class="btn btn-primary" type="button">등록</button>
<button id="goToBoard" class="btn btn-secondary" type="button">목록</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
[commonJsFooter.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script type="text/javascript">
$(function(){
var today = new Date();
var todayStr = today.toLocaleString();
// 게시판 이동
$("#goToBoard").click(function(){
var logMemId = $("#logMemId").val();
location.href = "boardList.jsp?id=" + logMemId;
});
// 자료실 이동
$("#goToRefer").click(function(){
var logMemId = $("#logMemId").val();
location.href = "dropbox.jsp?id=" + logMemId;
});
// 로그아웃
$("#memLogout, #goLoginPage").click(function(){
location.href = "login.jsp";
});
// 게시글 등록 처리 이동 겸 validation 처리
$("#boardInsBtn").click(function(){
var titleVal = $("#title").val();
var contentVal = $("#content").val();
var fileVal = $("#file").val();
var writerVal = $("#writer").val();
//console.log("todayStr : " + todayStr);
$("#regDate").val(todayStr);
var regDateVal = $("#regDate").val();
var boardForm = $("#boardForm");
if(!titleVal) {
alert("게시글 제목을 입력해 주세요.");
$("#title").focus();
return false;
}
if(!contentVal) {
alert("게시글 내용을 입력해 주세요.");
$("#content").focus();
return false;
}
//console.log("fileVal : " + fileVal);
if(!fileVal) {
alert("파일을 넣어 주세요.");
$("#content").focus();
return false;
}
// 테스트용
//console.log("writerVal : " + writerVal);
//console.log("regDateVal : " + regDateVal);
boardForm.submit();
});
});
</script>
[boardInsert.jsp]
<%@page import="kr.or.ddit.ch11.vo.BoardFileVO"%>
<%@page import="kr.or.ddit.ch11.vo.BoardVO"%>
<%@page import="kr.or.ddit.ch11.dao.BoardRepository"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String realFolder = request.getServletContext().getRealPath("/resources/images");
String encType = "UTF-8";
int maxSize = 100 * 1024 * 1024;
File folder = new File(realFolder);
if(!folder.exists()) {
folder.mkdirs();
}
DiskFileUpload upload = new DiskFileUpload();
upload.setSizeMax(1000000);
upload.setSizeThreshold(maxSize);
upload.setRepositoryPath(realFolder);
List items = upload.parseRequest(request);
Iterator params = items.iterator();
// 데이터를 저장할 변수 설정
// MemberVO 기준 들어가야 할 값들
// 번호(no)는 조회해서 1씩 증가시켜야 함
// fileVO로 파일 업로드 경로 세우는 듯...
String title = ""; // 게시판 제목
String content = ""; // 게시판 내용
String writer = ""; // 작성자(id기준)
BoardRepository dao = BoardRepository.getInstance();
BoardFileVO fileVo = new BoardFileVO();
// FileVO 기준 들어가야 할 값들
// 번호(no)는 조회해서 1씩 증가시켜야 함
String contentType = ""; // 파일 컨텐츠 타입
long fileSize = 0L; // 파일 크기 정보
String fileName = ""; // 저장 파일 이름
while(params.hasNext()) {
FileItem item = (FileItem) params.next();
if(item.isFormField()) { // 일반 데이터일 때
String fieldName = item.getFieldName();
//System.out.println(fieldName);
if(fieldName.equals("title")) {
title = item.getString(encType);
}else if(fieldName.equals("content")) {
content = item.getString(encType);
}else if(fieldName.equals("writer")) {
writer = item.getString(encType);
}
}else { // 파일 데이터일 때
contentType = item.getContentType(); // 파일 컨텐츠 타입
fileSize = item.getSize(); // 파일 크기 정보
fileName = item.getName(); // 저장 파일 이름
File saveFile = new File(realFolder + "/" + fileName);
item.write(saveFile); // 파일 복사
dao.addFileNo(fileVo);
fileVo.setFileName(fileName);
fileVo.setContentType(contentType);
fileVo.setFileSize(fileSize);
}
}
BoardVO boardVo = new BoardVO();
boardVo.setTitle(title);
boardVo.setContent(content);
boardVo.setWriter(writer);
boardVo.setFileVO(fileVo);
System.out.println("boardVo : " + boardVo);
dao.addBoard(boardVo);
response.sendRedirect("boardList.jsp?id=" + writer);
%>
[boardList.jsp]
<%@page import="kr.or.ddit.ch11.vo.BoardVO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="kr.or.ddit.ch11.dao.BoardRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 게시판 목록을 출력해주세요.
> JSTL을 활용해주세요.
> 초기 화면에서는 데이터가 없으므로 '조회하실 게시글이 존재하지 않습니다.'를 출력해주세요.
> 데이터가 있는 경우엔 제목, 작성자, 작성일, 조회수를 맞춰서 데이터를 출력해주세요.
** 초반 데이터는 없습니다.
제목 작성자 작성일 조회수
─────────────────────────────────────────────────────────────────────────────
조회하실 게시글이 존재하지 않습니다.
─────────────────────────────────────────────────────────────────────────────
[ 게시글 등록하기 ]
** 데이터가 있는 경우 아래와 같이 출력됩니다.
제목 작성자 작성일 조회수
─────────────────────────────────────────────────────────────────────────────
게시판 제목입니다......! 1 허나훔 2022-12-12 1245
게시판 제목입니다......! 2 송서영 2022-12-12 1245
게시판 제목입니다......! 3 채진영 2022-12-12 1245
게시판 제목입니다......! 4 배영호 2022-12-12 1245
게시판 제목입니다......! 5 조은혁 2022-12-12 1245
게시판 제목입니다......! 6 조현수 2022-12-12 1245
.....
─────────────────────────────────────────────────────────────────────────────
[ 게시글 등록하기 ]
2. 시큐리티 적용
> 게시판 등록 페이지를 시큐리티 보호자원으로 설정해주세요.
- 시큐리티 인증방식 : FORM
- 시큐리티 로그인
> 등록 페이지는 역할명 admin만 접근 가능토록 해주세요.
- id : admin
- pw : a1234
> 로그인 인증 시, loginSecurity.jsp로 이동하여 인증을 진행 할 수 있도록 해주세요.
> 로그인 인증 실패 시, loginFailed.jsp로 이동할 수 있도록 해주세요.
3. 게시글 클릭 시, 해당 게시글 상세보기 페이지로 이동합니다.
> 상세보기 페이지로 이동할 때, 조회수가 상승합니다.
-->
<%@ include file="/ch11/test/pageModuleTest/lnbContainer.jsp" %>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
BoardRepository dao = BoardRepository.getInstance();
ArrayList<BoardVO> boardList = dao.selectBoardList();
System.out.println("boardList : " + boardList);
%>
<c:set var="boardList" value="<%= boardList %>"></c:set>
<c:set var="id" value="<%= id %>"></c:set>
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
<table class="table table-hover" style="margin-top: 10px;">
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<c:choose>
<c:when test="${boardList.size() ne 0}">
<c:forEach var="boardVo" items="${boardList}">
<tr>
<td>${boardVo.getNo()}</td>
<td>${boardVo.getTitle()}</td>
<td>${boardVo.getWriter()}</td>
<td>${boardVo.getRegDate()}</td>
<td>${boardVo.getHit()}</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="5">
조회하실 게시글이 존재하지 않습니다.
</td>
</tr>
</c:otherwise>
</c:choose>
</table>
<a class="btn btn-info" href="boardForm.jsp?id=${id}">게시글 등록</a>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
- http://localhost/ch11/test/boardForm.jsp
[web.xml] => 에러페이지 이동 처리
<error-page>
<error-code>500</error-code>
<location>/ch11/test/exceptionBoard_error.jsp</location>
</error-page>
[boardList.jsp]
...
<table class="table table-hover" style="margin-top: 10px;">
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<style>
.boardInfo {
cursor: pointer;
}
</style>
<c:choose>
<c:when test="${boardList.size() ne 0}">
<c:forEach var="boardVo" items="${boardList}">
<tr class="boardInfo">
<td>${boardVo.getNo()}</td>
<td>${boardVo.getTitle()}</td>
<td>${boardVo.getWriter()}</td>
<td>${boardVo.getRegDate()}</td>
<td>${boardVo.getHit()}</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="5">
조회하실 게시글이 존재하지 않습니다.
</td>
</tr>
</c:otherwise>
</c:choose>
</table>
...
[commonJsFooter.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script type="text/javascript">
$(function(){
var today = new Date();
var todayStr = today.toLocaleString();
// 게시판 이동
$("#goToBoard, #goToBoardList").click(function(){
var logMemId = $("#logMemId").val();
location.href = "boardList.jsp?id=" + logMemId;
});
// 자료실 이동
$("#goToRefer").click(function(){
var logMemId = $("#logMemId").val();
location.href = "dropbox.jsp?id=" + logMemId;
});
// 로그아웃
$("#memLogout, #goLoginPage").click(function(){
location.href = "login.jsp";
});
// 게시글 등록 처리 이동 겸 validation 처리
$("#boardInsBtn").click(function(){
var titleVal = $("#title").val();
var contentVal = $("#content").val();
var fileVal = $("#file").val();
var writerVal = $("#writer").val();
//console.log("todayStr : " + todayStr);
$("#regDate").val(todayStr);
var regDateVal = $("#regDate").val();
var boardForm = $("#boardForm");
if(!titleVal) {
alert("게시글 제목을 입력해 주세요.");
$("#title").focus();
return false;
}
if(!contentVal) {
alert("게시글 내용을 입력해 주세요.");
$("#content").focus();
return false;
}
//console.log("fileVal : " + fileVal);
if(!fileVal) {
alert("파일을 넣어 주세요.");
$("#content").focus();
return false;
}
// 테스트용
//console.log("writerVal : " + writerVal);
//console.log("regDateVal : " + regDateVal);
boardForm.submit();
});
// 게시글 상세보기
$(".boardInfo").click(function(){
var thisIs = $(this);
var boardNo = thisIs.children().eq(0).html().trim();
console.log(boardNo);
var logMemId = $("#logMemId").val();
location.href = "boardView.jsp?bno=" + boardNo + "&id=" + logMemId;
});
// 게시글 삭제하기
$("#boardRemove").click(function(){
//console.log(window.confirm("게시글을 정말로 삭제하시겠습니까?"));
var bno = $("#bno").val();
if(window.confirm("게시글을 정말로 삭제하시겠습니까?")) {
location.href = "boardRemove.jsp?bno=" + bno;
}
});
});
</script>
[boardView.jsp]
<%@page import="kr.or.ddit.ch11.vo.BoardFileVO"%>
<%@page import="kr.or.ddit.ch11.vo.BoardVO"%>
<%@page import="kr.or.ddit.ch11.dao.BoardRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 게시글 상세보기를 출력해주세요.
> JSTL을 활용해주세요.
[출력 예]
게시판 상세보기
──────────────────────────────────────────────
제목 :
작성자 작성일 조회수
──────────────────────────────────────────────
내용
──────────────────────────────────────────────
[ 수정 ] [ 삭제 ] [ 목록 ]
2. 수정 버튼 클릭 시, 수정 페이지(boardUpdateForm.jsp)로 이동합니다.
3. 삭제 버튼 클릭 시, 해당 게시글이 삭제 처리 될 수 있도록 합니다.
> "정말로 삭제하시겠습니까?" 알림창이 나타나고, [확인]버튼을 클릭 시 삭제가 처리(boardRemove.jsp) 될 수 있도록 해주세요.
> "정말로 삭제하시겠습니까?" 알림창이 나타나고, [취소]버튼을 클릭 시 알림창이 꺼질 수 있게 해주세요.
4. 목록 버튼 클릭 시, 목록 페이지(boardList.jsp)로 이동합니다.
-->
<%@ include file="/ch11/test/pageModuleTest/lnbContainer.jsp" %>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String bno = request.getParameter("bno");
int ibno = Integer.parseInt(bno);
BoardRepository dao = BoardRepository.getInstance();
BoardVO bvo = dao.getBoardById(ibno);
System.out.println("bvo : " + bvo);
%>
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
<input id="bno" name="bno" type="hidden" value="<%= bvo.getNo() %>" />
<c:set var="bvo" value="<%= bvo %>"></c:set>
<c:set var="id" value="<%= id %>"></c:set>
<table class="table table-hover" style="margin-top: 10px;">
<tr>
<th>제목</th>
<td colspan="3">${bvo.getTitle()}</td>
</tr>
<tr>
<td>${bvo.getWriter()}</td>
<td colspan="3">${bvo.getRegDate()}</td>
</tr>
<tr>
<td colspan="4">
<p style="white-space: pre-wrap"><c:out value="${bvo.getContent()}"/></p>
</td>
</tr>
<tr>
<th>첨부파일</th>
<td colspan="3">
<a href="#none">${bvo.getFileVO().getFileName()}</a>
</td>
</tr>
<tr>
<td colspan="4">
<button id="boardModify" name="boardModify" class="btn btn-warning" type="button">수정</button>
<button id="boardRemove" name="boardRemove" class="btn btn-danger" type="button">삭제</button>
<button id="goToBoardList" name="goToBoard" class="btn btn-dark" type="button">목록</button>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
[boardRemove.jsp]
<%@page import="kr.or.ddit.ch11.dao.BoardRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
삭제할 게시글 정보를 넘겨받고, 삭제를 진행해주세요.
삭제가 실패하여 에러가 발생 할 경우, exceptionBoard_error.jsp 페이지로 이동할 수 있게 해주세요.
삭제 완료 후, 게시판 목록 페이지(boardList.jsp)로 이동해주세요.
-->
<!--
1. 게시글 삭제를 처리해주세요.
> 삭제 성공 후, 상세보기 페이지(boardList.jsp)로 이동해주세요.
> 삭제 실패 후, 에러 페이지(exceptionBoard_error.jsp)로 이동해주세요.
-->
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String bno = request.getParameter("bno");
int ibno = Integer.parseInt(bno);
BoardRepository dao = BoardRepository.getInstance();
dao.deleteBoard(ibno);
response.sendRedirect("boardList.jsp?id=" + id);
%>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
</html>
[commonJsFooter.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<script type="text/javascript">
$(function(){
var today = new Date();
var todayStr = today.toLocaleString();
// 게시판 이동
$("#goToBoard, #goToBoardList").click(function(){
var logMemId = $("#logMemId").val();
location.href = "boardList.jsp?id=" + logMemId;
});
// 자료실 이동
$("#goToRefer").click(function(){
var logMemId = $("#logMemId").val();
location.href = "dropbox.jsp?id=" + logMemId;
});
// 로그아웃
$("#memLogout, #goLoginPage").click(function(){
location.href = "login.jsp";
});
// 게시글 등록 처리 이동 겸 validation 처리
$("#boardInsBtn").click(function(){
var titleVal = $("#title").val();
var contentVal = $("#content").val();
var fileVal = $("#file").val();
var writerVal = $("#writer").val();
//console.log("todayStr : " + todayStr);
$("#regDate").val(todayStr);
var regDateVal = $("#regDate").val();
var boardForm = $("#boardForm");
if(!titleVal) {
alert("게시글 제목을 입력해 주세요.");
$("#title").focus();
return false;
}
if(!contentVal) {
alert("게시글 내용을 입력해 주세요.");
$("#content").focus();
return false;
}
//console.log("fileVal : " + fileVal);
if(!fileVal) {
alert("파일을 넣어 주세요.");
$("#content").focus();
return false;
}
// 테스트용
//console.log("writerVal : " + writerVal);
//console.log("regDateVal : " + regDateVal);
boardForm.submit();
});
// 게시글 상세보기
$(".boardInfo").click(function(){
var thisIs = $(this);
var boardNo = thisIs.children().eq(0).html().trim();
console.log(boardNo);
var logMemId = $("#logMemId").val();
location.href = "boardView.jsp?bno=" + boardNo + "&id=" + logMemId;
});
// 게시글 삭제하기
$("#boardRemove").click(function(){
//console.log(window.confirm("게시글을 정말로 삭제하시겠습니까?"));
var bno = $("#bno").val();
var logMemId = $("#logMemId").val();
if(window.confirm("게시글을 정말로 삭제하시겠습니까?")) {
location.href = "boardRemove.jsp?bno=" + bno + "&id=" + logMemId;
}
});
// 게시글 수정하기 이동
$("#boardModify").click(function(){
var bno = $("#bno").val();
var logMemId = $("#logMemId").val();
location.href = "boardUpdateForm.jsp?bno=" + bno + "&id=" + logMemId;
});
// 게시글 수정하기
$("#boardModifyAccept").click(function(){
var logMemId = $("#logMemId").val();
location.href = "boardUpdate.jsp?id=" + logMemId;
});
});
</script>
[boardUpdateForm.jsp]
<%@page import="kr.or.ddit.ch11.vo.BoardVO"%>
<%@page import="kr.or.ddit.ch11.dao.BoardRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
1. 게시판 수정 페이지를 작성해주세요.
[출력 예]
게시글 등록
─────────────────────────────
제목 : 제목입니다1
작성자 : 홍길동
내용 : 내용입니다1
─────────────────────────────
[ 수정 ] [ 목록 ]
2. 수정 버튼 클릭 시, 게시글 수정(boardUpdate.jsp)을 진행해주세요.
3. 목록 버튼 클릭 시, 목록 페이지(boardList.jsp)로 이동해주세요.
-->
<%@ include file="/ch11/test/pageModuleTest/lnbContainer.jsp" %>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String bno = request.getParameter("bno");
int ibno = Integer.parseInt(bno);
BoardRepository dao = BoardRepository.getInstance();
BoardVO bvo = dao.getBoardById(ibno);
System.out.println("bvo : " + bvo);
%>
<form id="boardUpForm" name="boardUpForm" class="form-horizontal" action="boardUpdate.jsp" method="post" enctype="multipart/form-data">
<input id="bno" name="bno" type="hidden" value="<%= bvo.getNo() %>" />
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
<input id="bfileno" name="bfileno" type="hidden" value="<%= bvo.getFileVO().getNo() %>" />
<input id="writer" name="writer" type="hidden" value="<%= bvo.getWriter() %>" />
<input id="regDate" name="regDate" type="hidden" value="<%= bvo.getRegDate() %>" />
<c:set var="bvo" value="<%= bvo %>"></c:set>
<c:set var="id" value="<%= id %>"></c:set>
<table class="table table-hover" style="margin-top: 10px;">
<tr>
<th>제목</th>
<td colspan="3">
<input id="title" name="title" class="form-control" type="text" value="${bvo.getTitle()}" />
</td>
</tr>
<tr>
<td>
${bvo.getWriter()}
</td>
<td colspan="3">
${bvo.getRegDate()}
</td>
</tr>
<tr>
<td colspan="4">
<textarea id="content" name="content" class="form-control" style="height: 200px;" wrap="soft">${bvo.getContent()}</textarea>
</td>
</tr>
<tr>
<th>첨부파일</th>
<td colspan="3">
<input id="file" name="file" class="form-control" type="file" />
</td>
</tr>
<tr>
<td colspan="4">
<button id="boardModifyAccept" name="boardModify" class="btn btn-primary" type="button">수정</button>
<button id="goToBoardList" name="goToBoard" class="btn btn-secondary" type="button">취소</button>
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
[boardUpdate.jsp]
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="kr.or.ddit.ch11.vo.BoardVO"%>
<%@page import="kr.or.ddit.ch11.vo.BoardFileVO"%>
<%@page import="kr.or.ddit.ch11.dao.BoardRepository"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String realFolder = request.getServletContext().getRealPath("/resources/images");
String encType = "UTF-8";
int maxSize = 100 * 1024 * 1024;
File folder = new File(realFolder);
if(!folder.exists()) {
folder.mkdirs();
}
DiskFileUpload upload = new DiskFileUpload();
upload.setSizeMax(1000000);
upload.setSizeThreshold(maxSize);
upload.setRepositoryPath(realFolder);
List items = upload.parseRequest(request);
Iterator params = items.iterator();
// MemberVO 기준 들어가야 할 값들
String title = ""; // 게시판 제목
String content = ""; // 게시판 내용
String writer = ""; // 작성자(id기준)
String logMemId = ""; // 로그인된 아이디
String bno = ""; // 수정할 게시판 번호
BoardRepository dao = BoardRepository.getInstance();
BoardFileVO fileVo = new BoardFileVO();
// FileVO 기준 들어가야 할 값들
String contentType = ""; // 파일 컨텐츠 타입
long fileSize = 0L; // 파일 크기 정보
String fileName = ""; // 저장 파일 이름
String bfileno = ""; // 파일 번호
while(params.hasNext()) {
FileItem item = (FileItem) params.next();
if(item.isFormField()) { // 일반 데이터일 때
String fieldName = item.getFieldName();
//System.out.println(fieldName);
if(fieldName.equals("title")) {
title = item.getString(encType);
}else if(fieldName.equals("content")) {
content = item.getString(encType);
}else if(fieldName.equals("writer")) {
writer = item.getString(encType);
}else if(fieldName.equals("logMemId")) {
logMemId = item.getString(encType);
}else if(fieldName.equals("bno")) {
bno = item.getString(encType);
}else if(fieldName.equals("bfileno")) {
bfileno = item.getString(encType);
}
}else { // 파일 데이터일 때
contentType = item.getContentType(); // 파일 컨텐츠 타입
fileSize = item.getSize(); // 파일 크기 정보
fileName = item.getName(); // 저장 파일 이름
File saveFile = new File(realFolder + "/" + fileName);
item.write(saveFile); // 파일 복사
fileVo.setFileName(fileName);
fileVo.setContentType(contentType);
fileVo.setFileSize(fileSize);
}
}
int ibfileno = Integer.parseInt(bfileno);
fileVo.setNo(ibfileno);
BoardVO boardVo = new BoardVO();
boardVo.setTitle(title);
boardVo.setContent(content);
boardVo.setWriter(writer);
int ibno = Integer.parseInt(bno);
boardVo.setNo(ibno);
boardVo.setFileVO(fileVo);
System.out.println("boardVo : " + boardVo);
dao.updateBoard(boardVo);
response.sendRedirect("boardList.jsp?id=" + logMemId);
%>
[dropbox.jsp]
<%@page import="java.util.ArrayList"%>
<%@page import="kr.or.ddit.ch11.vo.BoardVO"%>
<%@page import="kr.or.ddit.ch11.dao.BoardRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html class="no-js" lang="zxx">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>쉽게 배우는 JSP 웹 프로그래밍</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<%@ include file="/pageModule/headPart.jsp" %>
</head>
<body>
<%@ include file="/pageModule/header.jsp" %>
<div class="breadcrumbs" style="padding-top:40px;">
<div class="container">
<div class="row align-items-center">
<div class="col-lg-6 col-md-6 col-12">
<div class="breadcrumbs-content">
<h1 class="page-title">JSP 개요</h1>
</div>
</div>
<div class="col-lg-6 col-md-6 col-12">
<ul class="breadcrumb-nav">
<li><a href="/">INDEX</a></li>
<li>CH01</li>
</ul>
</div>
</div>
</div>
</div>
<section class="about-us section">
<div class="container">
<div class="row align-items-center justify-content-center">
<div class="col-lg-12 col-md-12 col-12">
<div class="content-left wow fadeInLeft" data-wow-delay=".3s">
<!--
첨부한 파일들을 확인 할 수 있는 자료실 페이지를 구성해주세요.
- 자료실을 구성하는데 필요한 내용 모두는 board를 작성했던 방식을 참고하여 작성한다.
1. 파일의 유형에 따라 유형에 맞는 default 이미지로 리스트를 구성하세요.
[출력 예]
자료실
[pdf] [excel] [excel] [ppt]
[image] [txt] [word] [txt]
[etc] [etc] [pdf] [ppt]
[...]
목록
-->
<%@ include file="/ch11/test/pageModuleTest/lnbContainer.jsp" %>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
BoardRepository dao = BoardRepository.getInstance();
ArrayList<BoardVO> bvoList = dao.selectBoardList();
System.out.println("bvoList : " + bvoList);
%>
<input id="logMemId" name="logMemId" type="hidden" value="<%= id %>" />
<br />
<h3>자료실</h3>
<c:set var="bvoList" value="<%= bvoList %>"></c:set>
<table class="table table-hover" style="margin-top: 10px;">
<c:choose>
<c:when test="${bvoList.size() ne 0}">
<c:forEach var="bvo" items="${bvoList}">
<tr>
<td>
<img src="${pageContext.request.contextPath }/resources/images/${bvo.getFileVO().getFileName()}" style="width: 300px;"/>
</td>
<td>
이미지 파일명 : <a href="${pageContext.request.contextPath}/resources/images/${bvo.getFileVO().getFileName()}" download="${bvo.getFileVO().getFileName()}">${bvo.getFileVO().getFileName()}</a> <br />
이미지 크기 : ${bvo.getFileVO().getFileSize()} <br />
컨텐츠 타입 : ${bvo.getFileVO().getContentType()}
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="2">
조회할 파일 목록이 없습니다.
</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
</div>
</div>
</div>
</section>
<%@ include file="/pageModule/footer.jsp" %>
<%@ include file="/pageModule/footerPart.jsp" %>
</body>
<%@ include file="/ch11/test/pageModuleTest/commonJsFooter.jsp" %>
</html>
'대덕인재개발원 > 대덕인재개발원_웹기반 애플리케이션' 카테고리의 다른 글
231109_JSP 개론 11 (0) | 2023.11.09 |
---|---|
231108_JSP 개론 10 (0) | 2023.11.08 |
231107_JSP 개론 9 (0) | 2023.11.07 |
231106_JSP 개론 8 (0) | 2023.11.06 |
231103_JSP 과제 4 (0) | 2023.11.03 |