2016년 10월 16일 일요일
2016년 10월 14일 금요일
2016년 10월 13일 목요일
2016년 10월 12일 수요일
2016년 10월 11일 화요일
2016년 10월 10일 월요일
2016년 10월 7일 금요일
2016년 10월 6일 목요일
52day / DB / Subquery
www.c-sharpcorner.com |
Subquery
: Praent Query에 종속되어있는 Inner Query
- 게시판을 만들다가 Subquery를 배워야하는 이유?
게시판에 글 목록을 보통 10개씩 지정해 놓는다.
만약 그러지 못할 경우?? Subquery를 쓰지 못할 경우??
DB에 게시판의 글이 100개 1000개 10000개가 있을 경우에
비주얼적으로 수많은 글을 한 페이지에 담을 사람은 없을 것이다.
하지만 편법을 쓴다면 일단 DB에서 모든 게시글을 가져온 다음에
Controll이나 View에서 원하는 만큼만 보여줄 수 있다.
이렇게 한다면 당연히 DB에 좋지 않을 것이며 굉장히 무거운 웹사이트가 될 것이 분명하다.
그래서 Subquery로 어떻게?
View -> 원하는 만큼만!! 요청하도록 한다.
Controll -> 원하는 만큼만 전달하도록 한다.
DB -> 당연히 요청한 부분만 조회해온다.
budget 의 최고액을 조회
SELECT max(amount) FROM budget;
가장 높은 액수(amount)로 지출된 내역(contents)은?
SELECT contents FROM budget WHERE amount = 25000;
subquery를 이용해서 조회한다
평균액수(amount)보다 많은 금액과 내역을 조회
SELECT avg(amount) FROM budget;
SELECT amount,contents FROM budget WHERE amount>17600;
위 두 sql을 Subquery를 이용해 한번에 정의 ( 내림차순 정렬 )
SELECT amount,contents FROM budget
WHERE amount > (SELECT avg(amount) FROM budget)
ORDER BY amount DESC;
연습) 전체 내역의 평균액수보다 낮은 내역 중 가장 높은 액수의 내역은?
SELECT contents,amount FROM budget ORDER BY amount DESC;
1) 평균금액 조회
SELECT AVG(amount) FROM budget; -- 17600
2) 평균금액보다 작은 내역의 최고액을 조회
SELECT MAX(amount) FROM budget
WHERE amount < 17600; -- 15000
그 금액에 해당하는 내역을 조회
SELECT contents FROM budget
WHERE amount = 15000;
위 sql을 Subquery를 이용해 한번에 정의
SELECT contents FROM budget
WHERE amount = (
SELECT MAX(amount) FROM budget
WHERE amount < (
SELECT AVG(amount) FROM budget
)
)
| cs |
2016년 10월 5일 수요일
51day / WEB / Model2 게시판 만들기
# 주위 : 개인적인 낙서판 같은 블로그이지만 어쩌다가 들어오셔서 참고하시게 된다면
참고만 하시길 바랍니다. 기초가 많이 부족한 쓰레기 코드입니다.
- 구동화면
초기화면 |
글 목록 글 제목을 클릭하면 NO 컬럼의 PK값과 함께 상세글보기로 이동한다 |
글쓰기 글 작성이 완료되면 작성한 글을 상세글 보기로 바로 이동시켜서 확인시킨다 |
상세글보기 1. 목록에서 제목을 클릭 2. 글 작성 후 3. 수정 후 볼 수 있으며 목록 / 삭제 / 수정 3가지의 버튼을 제공한다. |
수정 or 삭제 전 비밀번호 체크 수정을 하거나 삭제를 할 때는 비밀번호를 필히 체크한다. |
수정여부 체크 팝업 만약 비밀번호가 일치한다면. 삭제 -> 글 삭제 후 글 목록으로 이동한다. 수정 - > 수정 폼으로 이동시켜준다. |
수정 폼 제공 글번호는 수정을 못하도록 막는다. |
수정 or 글작성 후 확인은 상세글보기를 통함 수정화면 체크 |
- Controll
Factory Pattern 적용
public class HandlerMapping {
private static HandlerMapping instance = new HandlerMapping();
private HandlerMapping() {
}
public static HandlerMapping getInstance() {
return instance;
}
public Controller create(String command) {
Controller c = null;
if (command.equals("write")) {
c = new WriterController();
} else if (command.equals("list")) {
c = new ListController();
} else if (command.equals("detail")) {
c = new DetailController();
} else if (command.equals("update")) {
c = new UpdateController();
} else if (command.equals("updateCheck")) {
c = new UpdateCheckController();
} else if (command.equals("updateAccept")) {
c = new UpdateAcceptController();
} else if (command.equals("delete")) {
c = new DeleteController();
} else if (command.equals("deleteCheck")) {
c = new DeleteCheckController();
}
return c;
}
}
| cs |
ModelAndView 적용
public class ModelAndView {
private String viewName;//응답할 View url 할당
//Model 계층과 연동하여 View에 공유할 정보를 할당
//request.setAttribute(name,value) 할 정보가 저장된다
//다수의 정보가 request에 저장될 수 있으므로 Map에 저장한다
private HashMap<String,Object> map
=new HashMap<String,Object>();
public ModelAndView(){}
public ModelAndView(String viewName){
this.viewName=viewName;
}
public ModelAndView(String viewName,String name,Object value){
this.viewName=viewName;
map.put(name, value);
}
public ModelAndView(String viewName,HashMap<String, Object> map) {
super();
this.viewName = viewName;
this.map = map;
}
//request.setAttribute(name,value) 할 정보가 저장된다
public void addObject(String name,Object value){
map.put(name, value);
}
public String getViewName() {
return viewName;
}
public void setViewName(String viewName) {
this.viewName = viewName;
}
public HashMap<String, Object> getMap() {
return map;
}
public void setMap(HashMap<String, Object> map) {
this.map = map;
}
@Override
public String toString() {
return "ModelAndView [viewName=" + viewName + ", map=" + map + "]";
}
}
| cs |
글 목록을 보여준다
public class ListController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
return new ModelAndView("board/list.jsp", "list", BoardDAO.getInstance().getAllList());
}
}
| cs |
상세글보기
public class DetailController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 상세정보가 조회될 글의 number
int no = Integer.parseInt(request.getParameter("no"));
BoardVO vo = BoardDAO.getInstance().getDetailByNo(no);
return new ModelAndView("board/detail.jsp", "vo", vo);
}
}
| cs |
정보수정 Controller 구성
public class UpdateController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 수정 될 글의 number
int no = Integer.parseInt(request.getParameter("no"));
// number의 password를 가져온다
BoardVO vo = BoardDAO.getInstance().getPasswordByNO(no);
// 비밀번호 체크 팝업으로 보낸다
return new ModelAndView("board/update_before.jsp", "vo", vo);
}
}
비밀번호가 체크된 후 정보수정 폼으로 보내준다.
public class UpdateCheckController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
int no = Integer.parseInt(request.getParameter("no"));
BoardVO vo = BoardDAO.getInstance().getDetailByNo(no);
return new ModelAndView("board/update.jsp", "vo", vo);
}
}
수정된 정보를 DB에 반영시킨 후 결과를 보여준다.
public class UpdateAcceptController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 수정될 정보를 폼에서 가져온다
int no = Integer.parseInt(request.getParameter("no"));
String title = request.getParameter("title");
String writer = request.getParameter("writer");
String content = request.getParameter("content");
BoardDAO.getInstance().update(new BoardVO(no, title, writer, content));
// 수정완료가 된 후에 바로 수정된 정보를 확인한다
return new ModelAndView("redirect:dispatcher?command=detail&no=" + no);
}
}
| cs |
글 삭제 Controller 구성
public class DeleteController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 삭제 될 글의 number
int no = Integer.parseInt(request.getParameter("no"));
// 글 number의 비밀번호를 가져온다
BoardVO vo = BoardDAO.getInstance().getPasswordByNO(no);
return new ModelAndView("board/delete_popup.jsp", "vo", vo);
}
}
글 삭제를 한 후 글 목록으로 보내준다.
public class DeleteCheckController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 삭제 될 글의 number
int no = Integer.parseInt(request.getParameter("no"));
BoardDAO.getInstance().delete(no);
return new ModelAndView("board/list.jsp","list", BoardDAO.getInstance().getAllList());
}
}
| cs |
글 작성 폼을 DB에 반영한 후 상세글보기를 통하여 결과조회
public class WriterController implements Controller {
@Override
public ModelAndView execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
int no = BoardDAO.getInstance().seqCreate();
String title = request.getParameter("title");
String writer = request.getParameter("writer");
String password = request.getParameter("password");
String content = request.getParameter("content");
BoardDAO.getInstance().write(new BoardVO(no, title, writer, password, content));
return new ModelAndView("redirect:dispatcher?command=detail&no="+no);
}
}
| cs |
- Model
public class BoardDAO {
/**
* 싱글톤 선언과 DB접속을 준비한다.
*/
private static BoardDAO instance;
private DataSource dataSource;
private BoardDAO() {
dataSource = DataSourceManager.getInstance().getDataSource();
}
public static BoardDAO getInstance() {
if (instance == null)
instance = new BoardDAO();
return instance;
}
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
/**
* 글 쓰기 후 먼저 시퀀스번호부터 생성한다.
*
* @return Sequence Number
* @throws SQLException
*/
public int seqCreate() throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
int num = 0;
try {
con = getConnection();
String sql = "SELECT board_seq.NEXTVAL FROM dual";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if (rs.next()) {
num = rs.getInt(1);
}
} finally {
closeAll(rs, pstmt, con);
}
return num;
}
/**
* 글 작성을 위하여 DB에 Insert 하여 update한다.
*
* @param vo(폼에서 작성된 정보)
* @throws SQLException
*/
public void write(BoardVO vo) throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection();
String sql = "INSERT INTO board(no,title,writer,password,content,time_posted)"
+ "VALUES(?,?,?,?,?,SYSDATE)";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, vo.getNo());
pstmt.setString(2, vo.getTitle());
pstmt.setString(3, vo.getWriter());
pstmt.setString(4, vo.getPassword());
pstmt.setString(5, vo.getContent());
pstmt.executeUpdate();
} finally {
closeAll(pstmt, con);
}
}
/**
* 물고온 PK number를 통하여 글을 삭제한다.
*
* @param no (Sequence number or Primary key)
* @throws SQLException
*/
public void delete(int no) throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection();
String sql = "DELETE FROM board WHERE no = ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, no);
pstmt.executeUpdate();
} finally {
closeAll(pstmt, con);
}
}
/**
* 필요한 컬럼만 가져와서 게시판 리스트를 구성한다.
*
* @return list(글 목록)
* @throws SQLException
*/
public ArrayList<BoardVO> getAllList() throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
ArrayList<BoardVO> list = new ArrayList<BoardVO>();
try {
con = getConnection();
String sql = "SELECT no,title,writer,hits,TO_CHAR(time_posted,'YYYY.MM.DD')"
+ "FROM board ORDER BY no DESC";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
BoardVO vo = new BoardVO(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getString(5));
list.add(vo);
}
} finally {
closeAll(rs, pstmt, con);
}
return list;
}
/**
* 글 삭제 or 수정을 비밀번호 체크를 위해
* 해당 서비스를 원하는 글의 비밀번호를 가져온다.
*
* @param no (Sequence number or Primary key)
* @return vo (no의 password를 가져온다)
* @throws SQLException
*/
public BoardVO getPasswordByNO(int no) throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
BoardVO vo = null;
try {
con = getConnection();
String sql = "select password from board where no = ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, no);
rs = pstmt.executeQuery();
if (rs.next())
vo = new BoardVO(no, rs.getString(1));
} finally {
closeAll(rs, pstmt, con);
}
return vo;
}
/**
* 상세글 보기
* 조회수도 1 증가 시킨다.
*
* @param no (Sequence number or Primary key)
* @return vo (상세글보기에서 필요한 정보만 가져온다)
* @throws SQLException
*/
public BoardVO getDetailByNo(int no) throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
BoardVO vo = null;
try {
con = getConnection();
String hit = "UPDATE board SET hits = hits + 1 WHERE no = ?";
String sql = "SELECT title,writer,content,hits,to_char(time_posted,'YYYY/MM/DD HH24:MI:SS') FROM board WHERE no=?";
pstmt = con.prepareStatement(hit);
pstmt.setInt(1, no);
pstmt.executeUpdate();
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, no);
rs = pstmt.executeQuery();
if (rs.next())
vo = new BoardVO(no, rs.getString(1), rs.getString(2), rs.getString(3), rs.getInt(4),
rs.getString(5));
} finally {
closeAll(rs, pstmt, con);
}
return vo;
}
/**
*
* @param vo(수정 폼에서 제공받은 수정될 정보)
* @throws SQLException
*/
public void update(BoardVO vo) throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection();
String sql = "update board set title=?, writer=?, content=? where no = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, vo.getTitle());
pstmt.setString(2, vo.getWriter());
pstmt.setString(3, vo.getContent());
pstmt.setInt(4, vo.getNo());
pstmt.executeUpdate();
} finally {
closeAll(pstmt, con);
}
}
/**
* PreparedStatement AND Connection 연결을 끊어준다.
*
* @param pstmt
* @param con
*/
public void closeAll(PreparedStatement pstmt, Connection con) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
*
* ResultSet AND PreparedStatement AND Connection
* 연결을 끊어준다.
*
* @param rs
* @param pstmt
* @param con
*/
public void closeAll(ResultSet rs, PreparedStatement pstmt, Connection con) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
closeAll(pstmt, con);
}
}
| cs |
public class BoardVO {
// 글 Number 유일값
private int no;
// 제목
private String title;
// 작성자
private String writer;
// 비밀번호
private String password;
// 글 내용
private String content;
// 조회수
private int hits;
// 작성날짜
private String time_posted;
public BoardVO() {
super();
}
public BoardVO(int no) {
super();
this.no = no;
}
// 비밀번호 겟! 생성자
public BoardVO(int no, String password) {
super();
this.no = no;
this.password = password;
}
// 수정 생성자!
public BoardVO(int no, String title, String writer, String content) {
super();
this.no = no;
this.title = title;
this.writer = writer;
this.content = content;
}
// 글 작성 생성자
public BoardVO(int no, String title, String writer, String password, String content, String time_posted) {
super();
this.no = no;
this.title = title;
this.writer = writer;
this.password = password;
this.content = content;
this.time_posted = time_posted;
}
// 글 작성 생성자
public BoardVO(int no, String title, String writer, String password, String content) {
super();
this.no = no;
this.title = title;
this.writer = writer;
this.password = password;
this.content = content;
}
// 글 목록 생성자
public BoardVO(int no, String title, String writer, int hits, String time_posted) {
super();
this.no = no;
this.title = title;
this.writer = writer;
this.hits = hits;
this.time_posted = time_posted;
}
// 글 Detail 생성자
public BoardVO(int no, String title, String writer, String content, int hits, String time_posted) {
super();
this.no = no;
this.title = title;
this.writer = writer;
this.content = content;
this.hits = hits;
this.time_posted = time_posted;
}
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 getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getHits() {
return hits;
}
public void setHits(int hits) {
this.hits = hits;
}
public String getTime_posted() {
return time_posted;
}
public void setTime_posted(String time_posted) {
this.time_posted = time_posted;
}
@Override
public String toString() {
return "BoardVO [no=" + no + ", title=" + title + ", writer=" + writer + ", password=" + password + ", content="
+ content + ", hits=" + hits + ", time_posted=" + time_posted + "]";
}
}
| cs |
- View(역할은 title참조)
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>초기화면</title>
<link rel="stylesheet" href="${initParam.root}css/board.css" type="text/css">
</head>
<body>
<c:import url="/template/header.jsp"></c:import>
<hr>
<h1>Model2 MVC Board</h1>
</body>
</html>
| cs |
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>글목록</title>
<link rel="stylesheet" href="${initParam.root}css/board.css" type="text/css">
<script type="text/javascript">
</script>
</head>
<body>
<c:import url="/template/header.jsp"></c:import>
<hr>
<table class="list">
<caption>목 록</caption>
<thead>
<tr>
<th class="no">NO</th>
<th class="title">제목</th>
<th class="name">이름</th>
<th class="date">작성일</th>
<th class="hit">조회수</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestScope.list}" var="board">
<tr>
<td>${board.no}</td>
<td><a href="${initParam.root}dispatcher?command=detail&no=${board.no}">
${board.title}</a></td>
<td>${board.writer}</td>
<td>${board.time_posted}</td>
<td>${board.hits}</td>
</tr>
</c:forEach>
</tbody>
</table><br></br>
<a href="${initParam.root}board/write.jsp"><img src="글쓰기버튼" border="0"></a>
<br><br>
</body>
</html>
| cs |
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>상세정보</title>
<link rel="stylesheet" href="${initParam.root}css/board.css" type="text/css">
<script type="text/javascript">
function sendList(){
location.href = "${initParam.root}dispatcher?command=list";
}
function winOpen(url, no){
window.open("${initParam.root}dispatcher?command="+url+"&no="+no, "popup",
"width = 550, height = 350, top = 150, left = 200");
}
</script>
</head>
<body>
<p>
<c:import url="/template/header.jsp"></c:import>
</p>
<table class="content">
<tr>
<td>NO : ${requestScope.vo.no}</td>
<td colspan="2">제목 : ${requestScope.vo.title}</td>
</tr>
<tr>
<td>작성자 : ${requestScope.vo.writer}</td>
<td>${requestScope.vo.time_posted}</td>
<td>조회수 : ${requestScope.vo.hits}</td>
</tr>
<tr>
<td colspan="3">
<pre>${requestScope.vo.content}</pre>
</td>
</tr>
<tr>
<td valign="middle" align="center" colspan="3">
<img class="action" src="${initParam.root}img/list_btn.jpg" onclick="sendList()" >
<img class="action" onclick="winOpen('delete','${requestScope.vo.no}')" src="${initParam.root}img/delete_btn.jpg" >
<img class="action" onclick="winOpen('update','${requestScope.vo.no}')" src="${initParam.root}img/modify_btn.jpg" ></td>
</tr>
</table>
</body>
</html>
| cs |
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>게시글쓰기</title>
<link rel="stylesheet" href="${initParam.root}css/board.css" type="text/css">
<script type="text/javascript">
function formCheck(){
var title = document.write_form.title.value;
var writer = document.write_form.writer.value;
var pw = document.write_form.password.value;
var content = document.write_form.content.value;
if(title == ""){
alert("제목을 입력하세요");
return false;
}
if(writer == ""){
alert("작성자를 입력하세요");
return false;
}
if(pw == ""){
alert("비밀번호를 입력하세요");
return false;
}
if(content == ""){
alert("내용을 입력하세요");
return false;
}
}
function cancel() {
document.write_form.reset();
}
</script>
</head>
<body>
<c:import url="/template/header.jsp"></c:import>
<hr>
<br>
<form action="${initParam.root}dispatcher" method="post" name="write_form" onsubmit="return formCheck()">
<table class="inputForm">
<caption>글쓰기</caption>
<tbody>
<tr>
<td>제목</td>
<td colspan="3">
<input type="text" name="title" size="48">
</td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="writer" size="20"></td>
<td>비밀번호</td>
<td>
<input type="password" name="password" size="5">
</td>
</tr>
<tr>
<td colspan="4" align="left">
<textarea cols="53" rows="15" name="content"></textarea>
</td>
</tr>
<tr>
<td colspan="4" align="center" >
<input type="hidden" name="command" value="write">
<input type="image" class="action" src="${initParam.root}img/write_btn.jpg" alt="글입력">
<img class="action" src="${initParam.root}img/cancel.gif" onclick="cancel()">
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
| cs |
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script>
function deleteCk(vopw){
var pw = document.checkForm.pw.value;
if(pw!=vopw){
alert("비밀번호가 일치하지 않습니다");
return false;
}else{
if(confirm("삭제하시겠습니까?")){
window.opener.location.href="${initParam.root}dispatcher?command=deleteCheck&no=${requestScope.vo.no}";
self.close();
}
}
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>delete_popup</title>
<link rel="stylesheet" href="${initParam.root}css/board.css" type="text/css">
</head>
<body>
<hr>
<form name = "checkForm" method = "post" action = "${initParam.root}dispatcher" onsubmit="return deleteCk()">
<table class = "content">
<tr>
<td colspan = "2">비밀번호</td>
</tr>
<tr><td colspan = "2">
<input type = "password" name= "pw"></td>
</tr>
<tr>
<td colspan = "2">
<input type = "hidden" name = "command" value = "deleteCheck">
<input type = "hidden" name= "no" value = "${requestScope.vo.no}">
<input type="button" value="삭제" class="action" onclick="deleteCk('${requestScope.vo.password}')">
<input type="button" value="창끄기" onclick="javascript:self.close()">
</td></tr>
</table>
</form>
</body>
</html>
| cs |
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script>
function deleteCk(vopw){
var pw = document.checkForm.pw.value;
if(pw!=vopw){
alert("비밀번호가 일치하지 않습니다");
return false;
}else{
if(confirm("수정페이지로 이동하시겠습니까?")){
window.opener.location.href="${initParam.root}dispatcher?command=updateCheck&no=${requestScope.vo.no}"
self.close();
}
}
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>delete_popup(비밀번호체크)</title>
<link rel="stylesheet" href="${initParam.root}css/board.css" type="text/css">
</head>
<body>
<hr>
<form name = "checkForm" method = "post" action = "${initParam.root}dispatcher" onsubmit="return deleteCk()">
<table class = "content">
<tr>
<td colspan = "2">비밀번호</td>
</tr>
<tr><td colspan = "2">
<input type = "password" name= "pw"></td>
</tr>
<tr>
<td colspan = "2">
<input type = "hidden" name = "command" value = "deleteCheck">
<input type = "hidden" name= "no" value = "${requestScope.vo.no}">
<input type="button" value="수정페이지로" class="action" onclick="deleteCk('${requestScope.vo.password}')">
</td></tr>
</table>
</form>
</body>
</html>
| cs |
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Update Form</title>
<link rel="stylesheet" href="${initParam.root}css/board.css" type="text/css">
<script>
function formCheck(){
var title = document.update_form.title.value;
var writer = document.update_form.writer.value;
var content = document.update_form.content.value;
if(title == ""){
alert("제목을 입력하세요");
return false;
}
if(writer == ""){
alert("작성자를 입력하세요");
return false;
}
if(content == ""){
alert("내용을 입력하세요");
return false;
}
}
</script>
</head>
<body>
<c:import url="/template/header.jsp"></c:import>
<hr>
<form action="dispatcher" name = "update_form" method = "post" onsubmit="return formCheck()">
<table class="content">
<tr>
<td>
<table>
<tr>
<td>
글번호: <input type=text name=no value="${requestScope.vo.no}" readonly></input>
타이틀: <input type=text name= title value="${requestScope.vo.title}">
</td>
</tr>
<tr>
<td>
<font size="2">작성자: <input type=text name = writer value="${requestScope.vo.writer}">
| ${requestScope.vo.time_posted} </font>
</td>
</tr>
<tr>
<td>
<textarea rows="15" cols="75" name="content" >${requestScope.vo.content}</textarea>
</td>
</tr>
<tr>
<td valign="middle">
<input type="hidden" name="command" value="updateAccept">
<input type="submit" value="수정하기" class="action">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
| cs |