쌍용교육(JAVA)/MVC
쌍용교육 -JSP수업 55~56일차 - MVC(4)
구 승
2024. 5. 8. 14:40
list.jsp를 호출하면 주소는 제대로 명시되지만 MVC 특성상 servlet이 먼저 호출되어야되기 때문에 클라이언트의 직접호출을 막아둠. index.jsp에서 실행해야된다.
SQL연결
MVC모델 패턴
순서 index.jsp => ActionMap.properties => kr.board.action(ex:WriteAction.java) => views(ex:write.jsp)
kr.board.vo => BoardVO
package kr.board.vo;
import java.sql.Date;
public class BoardVO {
private int num;
private String title;
private String name;
private String passwd;
private String email;
private String content;
private String ip;
private Date reg_date;
//비밀번호 일치 여부 체크
public boolean isCheckedPassword(String userPasswd) {
if(passwd.equals(userPasswd)) {
return true; //비밀번호 일치
}
return false;//비밀번호 불일치
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
}
kr.util => ch03_JSP에 있던 DBUtil.java 과 PagingUtil.java 를 copy
META-INF => ch03_JSP에 있던 MANIFEST.MF와 context.xml 을 copy
kr.board.dao => BoardDAO
package kr.board.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import kr.board.vo.BoardVO;
import kr.util.DBUtil;
public class BoardDAO {
//싱글턴패턴
private static BoardDAO instance = new BoardDAO();
public static BoardDAO getInstance() {
return instance;
}
private BoardDAO() {}
//글저장
public void insert(BoardVO boardVO) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
//SQL문 작성
sql = "INSERT INTO svboard (num,title,name,passwd,email,content,ip)"
+ "VALUES (svboard_seq.nextval,?,?,?,?,?,?)";
//prepareStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//?에데이터 바인딩
pstmt.setString(1, boardVO.getTitle());
pstmt.setString(2, boardVO.getName());
pstmt.setString(3, boardVO.getPasswd());
pstmt.setString(4, boardVO.getEmail());
pstmt.setString(5, boardVO.getContent());
pstmt.setString(6, boardVO.getIp());
//SQL문 실행
pstmt.executeUpdate();
}catch(Exception e) {
throw new Exception(e);
}finally {
//자원정리
DBUtil.executeClose(null, pstmt, conn);
}
}
//글의 총 개수
public int getCount() throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
int count = 0;
try {
//커넥션풀로부터 커넥션 할당
conn=DBUtil.getConnection();
sql = "SELECT COUNT(*) FROM svboard";
//prepareStatement 객체 생성
pstmt = conn.prepareStatement(sql);
//SQL문 실행
rs= pstmt.executeQuery();
if(rs.next()) {
count =rs.getInt(1); //컬럼 인덱스
}
}catch(Exception e) {
throw new Exception(e);
}finally {
//자원정리
DBUtil.executeClose(null, pstmt, conn);
}
return count;
}
//글 목록
public List<BoardVO> getList(int startRow,int endRow) throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
List<BoardVO> list = null;
try {
conn = DBUtil.getConnection();
//rnum 과 ORDER BY 뒤에는 공백이 있어야된다
sql="SELECT * FROM (SELECT a.*,rownum rnum "
+ "FROM(SELECT * FROM svboard ORDER BY "
+ "num DESC)a) WHERE rnum >=? and rnum <=?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, startRow);
pstmt.setInt(2, endRow);
rs = pstmt.executeQuery();
list = new ArrayList<BoardVO>();
while(rs.next()) {
//자바빈 생성
BoardVO boardVO = new BoardVO();
boardVO.setNum(rs.getInt("num"));
boardVO.setTitle(rs.getString("Title"));
boardVO.setName(rs.getString("name"));
boardVO.setReg_date(rs.getDate("reg_date"));
//자바빈을 ArrayList에 저장
list.add(boardVO);
}
}catch(Exception e) {
throw new Exception(e);
}finally {
//자원정리
DBUtil.executeClose(rs, pstmt, conn);
}
return list;
}
//글 상세
public BoardVO getBoard(int num)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
BoardVO board = null;
try {
conn = DBUtil.getConnection();
sql="SELECT * FROM svboard WHERE num=?";
//PreparedStatement객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, num);
rs = pstmt.executeQuery();
while(rs.next()) {
board = new BoardVO();
board.setNum(rs.getInt("num"));
board.setTitle(rs.getString("title"));
board.setName(rs.getString("name"));
board.setPasswd(rs.getString("passwd"));
board.setEmail(rs.getString("email"));
board.setContent(rs.getString("content"));
board.setReg_date(rs.getDate("reg_date"));
}
}catch(Exception e) {
throw new Exception(e);
}finally {
//자원정리
DBUtil.executeClose(null, pstmt, conn);
}
return board;
}
//글 수정
public void update(BoardVO boardVO)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
sql = "UPDATE svboard SET title=?,name=?,email=?,"
+ "content=?,ip=? WHERE num=?";
//PreparedStatement객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setString(1,boardVO.getTitle());
pstmt.setString(2,boardVO.getName());
pstmt.setString(3,boardVO.getEmail());
pstmt.setString(4,boardVO.getContent());
pstmt.setString(5,boardVO.getIp());
pstmt.setInt(6,boardVO.getNum());
//SQL문 실행
pstmt.executeUpdate();
}catch(Exception e) {
throw new Exception(e);
}finally {
//자원정리
DBUtil.executeClose(null, pstmt, conn);
}
}
//글 삭제
public void delete(int num)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
//커넥션풀로부터 커넥션 할당
conn = DBUtil.getConnection();
sql="DELETE FROM svboard WHERE num=?";
//PreparedStatement객체 생성
pstmt = conn.prepareStatement(sql);
//?에 데이터 바인딩
pstmt.setInt(1, num);
//SQL문 실행
pstmt.executeUpdate();
}catch(Exception e) {
throw new Exception(e);
}finally {
//자원정리
DBUtil.executeClose(null, pstmt, conn);
}
}
}
kr.board.action => WriteFormAction.java
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.controller.Action;
public class WriteFormAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
//JSP 경로 반환
return "/WEB-INF/views/writeForm.jsp";
}
}
/WEB-INF/views/ => writeForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글쓰기</title>
<link rel ="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
<script type="text/javascript">
window.onload=function(){
const myForm = document.getElementById('register_form');
//이벤트 연결
myForm.onsubmit = function(){
const items = document.querySelectorAll('input[type="text"],input[type="password"],input[type="email"],textarea');
for(let i=0;i<items.length;i++){
if(items[i].value.trim()==''){
const label = document.querySelector('label[for="'+items[i].id+'"]');
alert(label.textContent + '항목은 필수 입력');
items[i].value='';
items[i].focus();
return false;
}
}
};
};
</script>
</head>
<body>
<div class="page-main">
<h2>글쓰기</h2>
<form id="register_form" action="write.do" method="post">
<ul>
<li>
<label for="title">제목</label>
<input type="text" name="title" id="title" size="10" maxlength="50">
</li>
<li>
<label for="name">이름</label>
<input type="text" name="name" id="name" size="10" maxlength="10">
</li>
<li>
<label for="passwd">비밀번호</label>
<input type="password" name="passwd" id="passwd" size="12" maxlength="12">
</li>
<li>
<label for="email">이메일</label>
<input type="email" name="email" id="email" size="20" maxlength="50">
</li>
<li>
<label for="content">내용</label>
<textarea rows="5" cols="40" name="content" id="content"></textarea>
</li>
</ul>
<div class="align-center">
<input type="submit" value="글쓰기">
<input type="button" value="목록" onclick="location.href='list.do'">
</div>
</form>
</div>
</body>
</html>
ActionMap.properties
#DispatcherServlet에서 읽어갈 정보를
#key와 value의 쌍으로 명시
#요청 URL = 모델클래스
/list.do = kr.board.action.ListAction
/write.do = kr.board.action.WriteFormAction
kr.board.action => WriteAction
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
public class WriteAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
//전송된 데이터 인코딩 타입 지정
request.setCharacterEncoding("utf-8");
//자바빈(VO) 객체 생성
BoardVO boardVO = new BoardVO();
boardVO.setTitle(request.getParameter("title"));
boardVO.setName(request.getParameter("name"));
boardVO.setPasswd(request.getParameter("passwd"));
boardVO.setEmail(request.getParameter("email"));
boardVO.setContent(request.getParameter("content"));
boardVO.setIp(request.getRemoteAddr());
BoardDAO dao = BoardDAO.getInstance();
dao.insert(boardVO);
//JSP 경로 반환
return "/WEB-INF/views/write.jsp";
}
}
views=>write.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글쓰기 완료</title>
<link rel ="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
</head>
<body>
<div class="page-main">
<h2>글쓰기 완로</h2>
<div class="result-display">
<div class="align-center">
게시판에 글 등록을 완료했습니다.<p>
<button onclick="location.href='list.do'">목록</button>
</div>
</div>
</div>
</body>
</html>
ActionMap.properties
#DispatcherServlet에서 읽어갈 정보를
#key와 value의 쌍으로 명시
#요청 URL = 모델클래스
/list.do = kr.board.action.ListAction
/writeForm.do = kr.board.action.WriteFormAction
/write.do = kr.board.action.WriteAction
MEB-INF/lib => ch03_JSP에 있던 lstl-1.2.jar와 ofdbc8.jar 를 copy
ListAction.java 수정
package kr.board.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
import kr.util.PagingUtil;
public class ListAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
//선택한 페이지 반환
String pageNum = request.getParameter("pageNum");
if(pageNum ==null) pageNum = "1";
BoardDAO dao = BoardDAO.getInstance();
int count = dao.getCount();
PagingUtil page =
//ch03에서 썼을 떄는 list.jsp에 변수를 하나하나 만들어서 한 걸 여기선 한줄로끝냄
new PagingUtil(Integer.parseInt(pageNum),count,20,10,"list.do");
List<BoardVO> list = null;
if(count > 0) {
list = dao.getList(page.getStartRow(),page.getEndRow());
}
//jsp에서 사용할 수 있도록
request.setAttribute("count", count);
request.setAttribute("list", list);
request.setAttribute("page", page.getPage());
//JSP경로반환
return "/WEB-INF/views/list.jsp";
}
}
list.jsp 수정
목록이 나열되도록 명시해줘야됨.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix = "c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>목록</title>
<%-- <link rel ="stylesheet" href="<%=request.getContextPath()%>/css/style.css"> --%>
<link rel ="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
</head>
<body>
<div class="page-main">
<h2>게시판 목록</h2>
<div class="align-right">
<input type="button" value="글쓰기" onclick="location.href='writeForm.do'">
</div>
<c:if test="${count==0}">
<div class="result-display">
표시할 게시물이 없습니다.
</div>
</c:if>
<c:if test="${count > 0}">
<table>
<tr>
<th>글번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
</tr>
<c:forEach var="board" items="${list}" >
<tr>
<td>${board.num}</td>
<td><a href="detail.do?num=${board.num}">${board.title}</a></td>
<td>${board.name}</td>
<td>${board.reg_date}</td>
</tr>
</c:forEach>
</table>
<div class="align-center">
${page}
</div>
</c:if>
</div>
</body>
</html>
kr.board.action => DetailAction.java(56일차 시작)
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
public class DetailAction implements Action {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
int num = Integer.parseInt(request.getParameter("num"));
BoardDAO dao = BoardDAO.getInstance();
BoardVO boardVO = dao.getBoard(num);
request.setAttribute("boardVO", boardVO);
//JSP 경로 반환
return "/WEB-INF/views/detail.jsp";
}
}
views => detail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 상세</title>
<link rel ="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
</head>
<body>
<div class="page-main">
<h2>글 상세</h2>
<ul>
<li>글번호 : ${boardVO.num}</li>
<li>제목 : ${boardVO.title}</li>
<li>작성자 : ${boardVO.name}</li>
<li>이메일 : ${boardVO.email}</li>
</ul>
<hr size="1" noshade="noshade" width="100%">
<p>
${boardVO.content}
</p>
<hr size="1" noshade="noshade" width="100%">
<div class="align-right">
작성일 : ${boardVO.reg_date}
<input type="button" value="수정" onclick="location.href='modifyForm.do?num=${boardVO.num}'">
<input type="button" value="삭제" onclick="location.href='deleteForm.do?num=${boardVO.num}'">
<input type="button" value="목록" onclick="location.href='list.do'">
</div>
</div>
</body>
</html>
ActionMap.properties(마지막에만 명시하도록 하자)
#DispatcherServlet\uC5D0\uC11C \uC77D\uC5B4\uAC08 \uC815\uBCF4\uB97C
#key\uC640 value\uC758 \uC30D\uC73C\uB85C \uBA85\uC2DC
#\uC694\uCCAD URL = \uBAA8\uB378\uD074\uB798\uC2A4
/list.do = kr.board.action.ListAction
/writeForm.do = kr.board.action.WriteFormAction
/write.do = kr.board.action.WriteAction
/detail.do = kr.board.action.DetailAction
ModifyFormAction.java
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
public class ModifyFormAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
int num = Integer.parseInt(request.getParameter("num"));
BoardDAO dao = BoardDAO.getInstance();
BoardVO boardVO = dao.getBoard(num);
request.setAttribute("boardVO", boardVO);
//JSP경로반환
return "/WEB-INF/views/modifyForm.jsp";
}
}
modifyForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글수정</title>
<link rel ="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
<script type="text/javascript">
window.onload=function(){
const myForm = document.getElementById('modify_form');
//이벤트 연결
myForm.onsubmit = function(){
const items = document.querySelectorAll('input[type="text"],input[type="password"],input[type="email"],textarea');
for(let i=0;i<items.length;i++){
if(items[i].value.trim()==''){
const label = document.querySelector('label[for="'+items[i].id+'"]');
alert(label.textContent + '항목은 필수 입력');
items[i].value='';
items[i].focus();
return false;
}
}
};
};
</script>
</head>
<body>
<div class="page-main">
<h2>글수정</h2>
<form id="modify_form" action="modify.do" method="post">
<input type="hidden" name="num" value="${boardVO.num}">
<ul>
<li>
<label for="title">제목</label>
<input type="text" name="title" id="title"
value="${boardVO.title}" size="10" maxlength="50">
</li>
<li>
<label for="name">이름</label>
<input type="text" name="name" id="name"
value="${boardVO.name}" size="10" maxlength="10">
</li>
<li>
<label for="passwd">비밀번호</label>
<input type="password" name="passwd" id="passwd" size="12" maxlength="12">
</li>
<li>
<label for="email">이메일</label>
<input type="email" name="email" id="email"
value="${boardVO.email}" size="20" maxlength="50">
</li>
<li>
<label for="content">내용</label>
<textarea rows="5" cols="40" name="content" id="content" >${boardVO.content}</textarea>
</li>
</ul>
<div class="align-center">
<input type="submit" value="글수정">
<input type="button" value="목록" onclick="location.href='list.do'">
</div>
</form>
</div>
</body>
</html>
ModifyAction.java
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
public class ModifyAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
//전송된 데이터 인코딩 타입 지정
request.setCharacterEncoding("utf-8");
//자바빈(VO) 생성
BoardVO boardVO = new BoardVO();
boardVO.setNum(Integer.parseInt(request.getParameter("num")));
boardVO.setTitle(request.getParameter("title"));
boardVO.setName(request.getParameter("name"));
boardVO.setPasswd(request.getParameter("passwd"));
boardVO.setEmail(request.getParameter("email"));
boardVO.setContent(request.getParameter("content"));
boardVO.setIp(request.getRemoteAddr());
BoardDAO dao = BoardDAO.getInstance();
//비밀번호 인증을 위해 한 건의 레코드를 자바빈(VO)에 담아서 반환
BoardVO db_board = dao.getBoard(boardVO.getNum());
boolean check = false;
if(db_board!=null) {
//비밀번호 일치 여부 체크
check = db_board.isCheckedPassword(boardVO.getPasswd());
}
if(check) {//비밀번호 일치
dao.update(boardVO);//글수정
//상세페이지로 이동하기위해 글번호 저장
request.setAttribute("num", boardVO.getNum());
}
request.setAttribute("check", check);
//JSP 경로 반환
return "/WEB-INF/views/modify.jsp";
}
}
modify.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${check}">
<script>
alert('글 수정을 완료했습니다.');
location.href='detail.do?num=${num}';
</script>
</c:if>
<c:if test="${!check}">
<script>
alert('비밀번호 불일치');
history.go(-1);
</script>
</c:if>
DeleteFormAction.java
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.controller.Action;
public class DeleteFormAction implements Action {
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
int num = Integer.parseInt(request.getParameter("num"));
request.setAttribute("num", num);
//JSP 경로 반환
return "/WEB-INF/views/deleteForm.jsp";
}
}
deleteForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글삭제</title>
<link rel ="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
<script type="text/javascript">
window.onload = function(){
const myForm = document.getElementById('delete_form');
//이벤트연결
myForm.onsubmit = function(){
const passwd = document.getElementById('passwd');
if(passwd.value.trim()==''){
alert('비밀번호를 입력하세요');
passwd.value='';
passwd.focus();
return false;
}
};
};
</script>
</head>
<body>
<div class="page-main">
<h2>글 삭제</h2>
<form id="delete_form" action="delete.do" method="post">
<input type="hidden" name="num" value="${num}">
<ul>
<li>
<label for="passwd">비밀번호</label>
<input type="password" name="passwd" id="passwd" size="12" maxlength="12">
</li>
</ul>
<div class="align-center">
<input type="submit" value="글 삭제">
<input type="button" value="목록" onclick="location.href='list.do'">
</div>
</form>
</div>
</body>
</html>
DeleteAction.java
package kr.board.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.board.dao.BoardDAO;
import kr.board.vo.BoardVO;
import kr.controller.Action;
public class DeleteAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
//전송된 데이터 인코딩 타입 지정
int num = Integer.parseInt(request.getParameter("num"));
String passwd = request.getParameter("passwd");
BoardDAO dao = BoardDAO.getInstance();
BoardVO db_board = dao.getBoard(num);
boolean check = false;
if(db_board!=null) {
//비밀번호 일치여부 체크
check = db_board.isCheckedPassword(passwd);
}
if(check) {
dao.delete(num);//글 삭제
}
request.setAttribute("check", check);
//JSP 경로 반환
return "/WEB-INF/views/delete.jsp";
}
}
delete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:if test="${check}">
<script>
alert('글 삭제를 완료했습니다.');
location.href="list.do";
</script>
</c:if>
<c:if test="${!check}">
<script>
alert('비밀번호 불일치');
history.go(-1);
</script>
</c:if>
ActionMap.properties
#DispatcherServlet에서 읽어갈 정보를
#key와 value의 쌍으로 명시
#요청 URL = 모델클래스
/list.do = kr.board.action.ListAction
/writeForm.do = kr.board.action.WriteFormAction
/write.do = kr.board.action.WriteAction
/detail.do = kr.board.action.DetailAction
/modifyForm.do = kr.board.action.ModifyFormAction
/modify.do = kr.board.action.ModifyAction
/deleteForm.do= kr.board.action.DeleteFormAction
/delete.do = kr.board.action.DeleteAction