Delete 시 아이디 체크, url 로 입장 막기
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 글 삭제하기 / 로그인 한 사용자, 자신의 글 체크하기 추가
HttpSession session = request.getSession();
// no 값이 숫자면 삭제, 로그인 여부 체크, 아니면 다른 페이지 이동
if (Util.intCheck(request.getParameter("no")) && session.getAttribute("mid") != null) {
System.out.println("숫자");
// 번호 잡기
int no = Util.str2Int(request.getParameter("no"));
// DAO 에 일 시키기
BoardDAO dao = new BoardDAO();
// board_no, mid 가 같이 있는 DTO 는 boardDTO
// DTO 에 값 추가하여 던지기
BoardDTO dto = new BoardDTO();
dto.setNo(no);
dto.setMid((String) session.getAttribute("mid"));
int result = dao.delete(dto);
// int result = dao.delete(no);
// 잘 삭제되었는지 값 받기
System.out.println("삭제 여부 : " + result);
if (result == 1) {
// 삭제가 잘 됐을 경우
response.sendRedirect("./board");
} else {
// 삭제가 안 됐을 경우
response.sendRedirect("./error.jsp");
}
} else {
System.out.println("문자");
response.sendRedirect("./error.jsp");
}
}
Delete DAO 에도 member 의 id 를 체크하는 값 추가
public int delete(BoardDTO dto) {
Connection conn = DBConnection.getInstance().getConn();
PreparedStatement pstmt = null;
String sql = "DELETE FROM board WHERE board_no=? AND mno=(SELECT mno FROM c23c_26.member WHERE mid=?)";
int result = 0;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, dto.getNo());
pstmt.setString(2, dto.getMid());
result = pstmt.executeUpdate();
// pstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt, null);
}
return result;
Update 시 아이디 체크, url 입장 막기
package com.poseidon.web;
import java.io.IOException;
@WebServlet("/update")
public class Update extends HttpServlet {
private static final long serialVersionUID = 1L;
public Update() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if (session.getAttribute("mid") != null) {
// 세션이 있으면 정상 작업
int no = Util.str2Int(request.getParameter("no"));
BoardDAO dao = new BoardDAO();
BoardDTO dto = dao.detail(no);
System.out.println(dto.getMid());
if (session.getAttribute("mid").equals(dto.getMid())) {
request.setAttribute("update", dto);
RequestDispatcher rd = request.getRequestDispatcher("update.jsp");
rd.forward(request, response);
} else {
System.out.println("update.java 에러");
response.sendRedirect("./error.jsp");
}
} else {
// 세션이 없으면 로그인 시키기
response.sendRedirect("./login?noLogin");
}
/*
* if (Util.intCheck(request.getParameter("no"))) { // no 잡기 int no =
* Util.str2Int(request.getParameter("no")); // DAO 에 넘기기 BoardDAO dao = new
* BoardDAO(); BoardDTO dto = dao.detail(no); if (!(no == 0) || !(dto.getTitle()
* == null)) { // JSP 로 넘기기 request.setAttribute("update", dto); //
* System.out.println("request.setAttribute(\"update\", dto) 완료");
* RequestDispatcher rd = request.getRequestDispatcher("update.jsp"); //
* System.out.println("request.getRequestDispatcher(\"update.jsp\") 완료");
* rd.forward(request, response); // System.out.println("rd.forward 완료"); } else
* { System.out.println("update.java 에러"); response.sendRedirect("./error.jsp");
* } }
*/
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
HttpSession session = request.getSession();
if ((request.getParameter("title") != null) && (request.getParameter("content") != null)
&& Util.intCheck(request.getParameter("no")) && session.getAttribute("mid") != null) {
// 수정하기
BoardDTO dto = new BoardDTO();
BoardDAO dao = new BoardDAO();
dto.setContent(request.getParameter("content"));
dto.setTitle(request.getParameter("title"));
dto.setNo(Util.str2Int(request.getParameter("no")));
dto.setMid((String) session.getAttribute("mid"));
int result = dao.update(dto);
/*
* String title = request.getParameter("title"); String content =
* request.getParameter("content"); int no =
* Util.str2Int(request.getParameter("no"));
*
* int result = dao.update(title, content, no);
*/
if (result == 1) {
response.sendRedirect("./detail?no=" + request.getParameter("no"));
} else {
response.sendRedirect("./error.jsp");
}
} else {
response.sendRedirect("./error.jsp");
}
}
}
Update DAO 에서 게시글의 정보를 받아와 저장
게시글 UPDATE SET 을 실행하고 실행이 정상적으로 됐으면 게시글로 이동
아니면 error 페이지로 이동
public BoardDTO detail(int no) {
BoardDTO dto = new BoardDTO();
Connection conn = DBConnection.getInstance().getConn();
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT b.board_no, b.board_title, b.board_content, m.mname, m.mid,"
+ "b.board_date, b.board_count "
+ "FROM board b JOIN member m "
+ "ON b.mno = m.mno WHERE board_no=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, no);
rs = pstmt.executeQuery();
if (rs.next()) {
dto.setNo(rs.getInt("board_no"));
dto.setTitle(rs.getString("board_title"));
dto.setContent(rs.getString("board_content"));
dto.setDate(rs.getString("board_date"));
dto.setCount(rs.getInt("board_count"));
// dto.setWrite(rs.getString("board_write"));
dto.setWrite(rs.getString("mname"));
dto.setMid(rs.getString("mid"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt, rs);
}
return dto;
}
수정 후 저장 버튼 클릭 시 한번 더 체크하기
-> 상단의 dopost 에서 다시 한번 더 session 의 id 가 있는 지 여부 체크
내 정보보기 페이지 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내정보</title>
<link href="./css/index.css" rel="stylesheet" />
</head>
<body>
<%
if (session.getAttribute("mid") == null) {
response.sendRedirect("./login");
}
%>
<div class="container">
<header>
<jsp:include page="menu.jsp"></jsp:include>
</header>
<div class="main">
<div class="mainStyle">
<article>
<h1>내 정보 보기</h1>
${myInfo.mname } / ${myInfo.mid } / ${myInfo.mpw } <br>
${myInfo.mno } / ${myInfo.mgrade } / ${myInfo.mdate }
<div>
<form action="./myInfo" method="post" onsubmit="return check()">
<input type="password" name="newPW" id="newPW"
placeholder="변경할 암호 입력" value="${myInfo.mpw }" required />
<button type="submit">수정</button>
</form>
</div>
</article>
</div>
</div>
</div>
<script type="text/javascript">
function check() {
var pw = document.querySelector("#newPW");
// alert(pw.value);
// 비밀번호 특수문자 체크하는 정규식
// let reg = /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,15}$/
if (pw.value.length < 5) {
alert("암호는 5자 이상");
return false;
}
}
</script>
</body>
<footer>
<c:import url="./footer.jsp" />
</footer>
</html>
내 정보 보기 서블릿 만들기, 비밀번호 변경도 실행
package com.poseidon.web;
import com.poseidon.dao.MemberDAO;
import com.poseidon.dto.MemberDTO;
@WebServlet("/myInfo")
public class MyInfo extends HttpServlet {
private static final long serialVersionUID = 1L;
public MyInfo() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if (session.getAttribute("mid") != null) {
// mid 를 데이터베이스에 질의
MemberDTO dto = new MemberDTO();
dto.setMid((String) session.getAttribute("mid"));
MemberDAO dao = new MemberDAO();
// DTO 에 담음
dto = dao.myInfo(dto);
// myInfo.jsp 으로 넘겨 출력하기
request.setAttribute("myInfo", dto);
RequestDispatcher rd = request.getRequestDispatcher("myInfo.jsp");
rd.forward(request, response);
} else {
response.sendRedirect("./login");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if (session.getAttribute("mid") != null) {
MemberDAO dao = new MemberDAO();
MemberDTO dto = new MemberDTO();
// 로그인 한 세션의 mid 값 가져오기
dto.setMid((String) session.getAttribute("mid"));
// 로그인 한 세션의 mno 값 가져오기
dto.setMno((int) session.getAttribute("mno"));
// jsp 에서 보내온 값 받기, Attribute 와 Parameter 의 차이점 인식하기
dto.setMpw((String) request.getParameter("newPW"));
int result = dao.pwUpdate(dto);
if (result == 1) {
System.out.println("비밀번호 변경 성공 : " + dto.getMid());
response.sendRedirect("./index");
} else {
System.out.println("비밀번호 변경 실패 : " + dto.getMid());
response.sendRedirect("./error.jsp?pwChange=error");
}
}
}
}
내 정보 보기와 비밀번호 업데이트하는 DAO
mno 는 필요가 없긴 한데 굳이굳이 한번 더 넣어보았음 혹시나 하는 마음
public MemberDTO myInfo(MemberDTO dto) {
// MemberDTO dto = new MemberDTO();
Connection conn = dbConn.getConn();
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT mno, mname, mpw, mdate, mgrade FROM c23c_26.member WHERE mid=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getMid());
rs = pstmt.executeQuery();
if (rs.next()) {
dto.setMno(rs.getInt("mno"));
dto.setMname(rs.getString("mname"));
dto.setMpw(rs.getString("mpw"));
dto.setMdate(rs.getString("mdate"));
dto.setMgrade(rs.getInt("mgrade"));
// dto.setMid(rs.getString("mid"));
}
} catch (SQLException e) {
System.out.println("MemberDAO, info 오류");
} finally {
close(conn, pstmt, rs);
}
return dto;
}
public int pwUpdate(MemberDTO dto) {
int result = 0;
Connection conn = dbConn.getConn();
PreparedStatement pstmt = null;
String sql = "UPDATE c23c_26.member SET mpw=? WHERE mid=? AND mno=?";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getMpw());
pstmt.setString(2, dto.getMid());
pstmt.setInt(3, dto.getMno());
result = pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("MemberDAO - pwUpdate 오류");
e.printStackTrace();
}
return result;
}
getAttribute 와 getParameter 의 차이점
Attribute 는 미리 setAttribute 로 세팅을 해야만 get 이가능
getParameter 는 페이지에서 보낸 값을 받아 사용
페이지 만들기
기존 board 화면에 게시글 페이지를 만듦, 게시글의 개수를 체크하여 페이지 버튼 갯수 만들기
자바스크립트를 이용하여 url 에 페이지를 추가
${totalCount } 개가 있음 <br>
페이지 수 : <c:set var="totalPage" value="${totalCount / 10 }" />
<fmt:parseNumber integerOnly="true" value="${totalPage }"
var="totalPage" />
<c:if test="${totalCount % 10 gt 0 }">
<c:set var="totalPage" value="${totalPage + 1 }" />
</c:if>
<c:out value=" ${totalPage }" />
<div class="paging">
<c:forEach begin="1" end="${totalPage }" var="p">
<button onclick="paging(${p})" class="pageBtn">${p}</button>
</c:forEach>
</div>
<script type="text/javascript">
function paging(no) {
location.href="./board?page=" + no;
}
</script>
기존 board 에 page 값을 넘겨받아 해당 값을 넘김
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int page;
page = request.getParameter("page") == null ? 1 : Util.str2Int2(request.getParameter("page"));
// if (request.getParameter("page") == null) {
// page = 1;
// } else {
// page = Util.str2Int2(request.getParameter("page"));
// }
// DAO 와 연결
BoardDAO dao = new BoardDAO();
List<BoardDTO> list = dao.boardList(page);
int totalCount = dao.totalCount();
request.setAttribute("list", list);
request.setAttribute("totalCount", totalCount);
// int totalPage;
// if (totalCount % 10 == 0) {
// totalPage = totalCount / 10;
// } else {
// totalPage = totalCount / 10 + 1;
// }
// request.setAttribute("totalPage", totalPage);
// url 은 그대로 있지만 화면만 변경
// sendrequest 는 url 을 새로 변경하여 새로고침
RequestDispatcher rd = request.getRequestDispatcher("board.jsp");
rd.forward(request, response);
}
게시글 목록을 가져오는 DAO
기존 DAO 에서 page 값을 추가하여 LIMIT 값을 변경, page 의 값마다 보여지는 게시글이 바뀜
public List<BoardDTO> boardList(int page) {
List<BoardDTO> list = null;
// DB 정보
DBConnection dbConn = DBConnection.getInstance();
// Conn 객체
Connection conn = null;
// pstmt
// Statement 를 사용하면 SQL 인젝션 공격에 통할 수 있음
PreparedStatement pstmt = null;
// rs
ResultSet rs = null;
// sql
String sql = "SELECT * FROM boardview LIMIT ?, 10";
conn = dbConn.getConn();
try {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, (page - 1) * 10);
rs = pstmt.executeQuery();
list = new ArrayList<BoardDTO>();
// rs 에 받은 값을 list 에 저장
while (rs.next()) {
BoardDTO dto = new BoardDTO();
dto.setNo(rs.getInt("board_no"));
dto.setTitle(rs.getString("board_title"));
// dto.setWrite(rs.getString("board_write"));
dto.setWrite(rs.getString("mname"));
dto.setDate(rs.getString("board_date"));
dto.setCount(rs.getInt("board_count"));
list.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(conn, pstmt, rs);
}
return list;
}
'HTML' 카테고리의 다른 글
240119 HTML 홈페이지 이어 만들기 (0) | 2024.01.19 |
---|---|
240118 홈페이지 만들기 (0) | 2024.01.18 |
240115 홈페이지 만들기 (0) | 2024.01.15 |
240112 HTML 홈페이지 만들기 (0) | 2024.01.12 |
240109 HTML (0) | 2024.01.09 |