KDT/WEB

231221 WEB - JSP15(MVC)

001cloudid 2023. 12. 21. 12:50
728x90

MVC

<%@page import="member.MemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="member.MemberDAO"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="com.mysql.cj.xdevapi.PreparableStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member/list.jsp</title>
</head>
<body>
<h1>member/list.jsp</h1>
<h1>회원 목록</h1>
<%
//로그인 표시 → 세션에서 "id"값을 가져와서 → String id 저장
String id = (String)session.getAttribute("id");

//로그인 표시값이 있으면 login.jsp이동, 있으면 로그인표시값이 "admin"이 아니면 main.jsp이동
if(id==null){
response.sendRedirect("02_login.jsp");
}else{
if(!id.equals("admin")){
response.sendRedirect("03_main.jsp");
}
}

request.setCharacterEncoding("utf-8");

//MemberDAO 객체생성
MemberDAO memberDAO = new MemberDAO();

//ArrayList 자바 내장객체
//→ 배열(같은 기억장소를 여러 개 사용)에 단점(초기기억장소가 고정)울 보완한 자바 내장객체 배열
//→ 기억장소 10개 할당 → 데이터가 10개가 넘어가면 추가로 10개가 추가되어짐
//→ java.util.ArrayList
// ArrayList 데이터 개수 : .size()
// ArrayList 배열에 데이터 저장(순서대로 값이 저장) : .add(memberDTO 주소값)
// ArrayList 배열에 데이터 가져오기 : .get(순서)
//ArrayList<MemberDTO> 리턴할 형 getMemberList() 메소드 정의
//ArrayList<MemberDTO> memberList = getMemberList() 메소드 호출
ArrayList<MemberDTO> memberList = memberDAO.getMemberList();
%>
<table border="1">
<tr><td>아이디</td><td>비밀번호</td><td>이름</td><td>가입날짜</td></tr>
<% for(int i = 0; i < memberList.size(); i++){ %>
<tr><td><%=memberList.get(i).getId() %></td>
<td><%=memberList.get(i).getPw() %></td>
<td><%=memberList.get(i).getName() %></td>
<td><%=memberList.get(i).getDate() %></td></tr>
<%}%>
</table>
</body>
</html>

 

BoardDAO

public ArrayList<MemberDTO> getMemberList() {
ArrayList<MemberDTO> memberList = new ArrayList<MemberDTO>();
try {
Connection con = getConnection();
String sql = "select * from members";
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
//한 사람의 정보를 저장할 바구니 MemberDTO 객체 생성
MemberDTO memberDTO = new MemberDTO();
System.out.println("memberDTO 주소 : " + memberDTO);
//MemberDTO 멤버변수에 열에 접근해서 가져온 데이터를 저장
memberDTO.setId(rs.getString("id"));
memberDTO.setPw(rs.getString("pw"));
memberDTO.setName(rs.getString("name"));
memberDTO.setDate(rs.getTimestamp("date"));
//배열 한 칸에 저장(0부터 순서대로 값이 저장)
memberList.add(memberDTO);
}
System.out.println("배열 " + memberList);
} catch (Exception e) {
e.printStackTrace();
}
return memberList;
}

 

 

게시판 만들기

번호, 글쓴이, 제목, 글내용, 조회수, 등록일

그림 1. 게시판 만들기

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board/01write.jsp</title>
</head>
<body>
<%
//로그인 표시값을 session에서 가져와서 변수에 저장
String id = (String)session.getAttribute("id");
%>
<h1>board/write.jsp</h1>
<h1>글쓰기</h1>
<form action="writePro.jsp" method="post">
<table border="1">
<tr><td>작성자</td><td><input type="text" name="name" value="<%=id %>" readonly></td></tr>
<tr><td>제목</td><td><input type="text" name="subject"></td></tr>
<tr><td>내용</td><td><textarea name="content" rows="10" cols="20"></textarea></td></tr>
<tr><td colspan="2"><input type="submit" value="글쓰기"></td></tr>
</table>
</form>
</body>
</html>

 

그림 2. write.jsp

 

BoardDTO

package board;

import java.sql.Timestamp;

public class BoardDTO {
	  private int num;
	  private String name;
	  private String subject;
	  private String content;
	  private int readcount;
	  private Timestamp date;
	  
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public int getReadcount() {
		return readcount;
	}
	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}
	public Timestamp getDate() {
		return date;
	}
	public void setDate(Timestamp date) {
		this.date = date;
	}
	  
}

 

<%@page import="board.BoardDAO"%>
<%@page import="board.BoardDTO"%>
<%@page import="java.sql.Timestamp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>board/01writePro.jsp</title>
</head>
<body>
<h1>board/writePro.jsp</h1>
<%
//사용자가 입력한 글 내용을 서버에 전달하면 request 저장
//requset 한글처리
request.setCharacterEncoding("utf-8");

//request에서 파라미터(태그)값(name, subject, content)을 가져와서 변수에 저장
String name = request.getParameter("name");
String subject = request.getParameter("subject");
String content = request.getParameter("content");

//num, readcount, date 구하기
int num = 1;
//조회수(readcount) 초기값은 0
int readcount = 0;
//날짜(date) 현 시스템 날짜 설정
Timestamp date = new Timestamp(System.currentTimeMillis());

//게시판내용을 저장하는 자바파일 준비
//폴더(패키지) board 파일이름 BoardDTO
//멤버변수 정의(private) 데이터 은닉 → 접근할 수 있는 setter, getter생성
//BoardDTO 객체생성(기억장소 할당)
//set메소드 호출(멤버 변수 기억장소에 파라미터(태그)값을 저장)
BoardDTO boardDTO = new BoardDTO();
System.out.println("BoardDTO 주소 : " + boardDTO);
boardDTO.setName(name);
boardDTO.setSubject(subject);
boardDTO.setContent(content);
boardDTO.setNum(num);
boardDTO.setReadcount(readcount);
boardDTO.setDate(date);

//게시판 데이터베이스 작업을 하는 자바파일준비
//폴더(패키지) board 파일이름 BoardDAO
//리턴값 없음 insertBoard(MemberDTO 변수) 메소드 정의()
//Board DAO 객체생성
//insertBoard(BoardDTO 주소) 메소드 호출
BoardDAO boardDAO = new BoardDAO();
System.out.println("BoardDAO 주소 : " + boardDAO);
boardDAO.insertBoard(boardDTO);
%>
</body>
</html>

 

package board;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import member.MemberDTO;

public class BoardDAO {

public Connection getConnection() {
Connection con = null;

try {
Class.forName("com.mysql.cj.jdbc.Driver");
String dbUrl = "jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPw = "1234";
con = DriverManager.getConnection(dbUrl, dbUser, dbPw);
} catch (Exception e) {
e.printStackTrace();
}return con;
}

public BoardDTO insertBoard(BoardDTO boardDTO) {
System.out.println(boardDTO.getName());
System.out.println(boardDTO.getSubject());
System.out.println(boardDTO.getContent());
System.out.println(boardDTO.getNum());
System.out.println(boardDTO.getReadcount());
System.out.println(boardDTO.getDate());

try {
Connection con = getConnection();

String sql = "insert into board(name,subject,content,num,readcount,date) values(?,?,?,?,?,?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, boardDTO.getContent());
ps.setString(2, boardDTO.getSubject());
ps.setString(3, boardDTO.getContent());
ps.setInt(4, boardDTO.getNum());
ps.setInt(5, boardDTO.getReadcount());
ps.setTimestamp(6, boardDTO.getDate());

ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return boardDTO;
}
}

 

728x90

'KDT > WEB' 카테고리의 다른 글

231228 WEB - JSP17(MVC)  (0) 2023.12.28
231226 WEB - JSP16(MVC)  (0) 2023.12.26
231219 WEB - JSP14(MVC)  (0) 2023.12.19
231218 WEB - JSP13(jar,war파일 Export,Import, MVC)  (0) 2023.12.18
231215 WEB - JSP12(데이터베이스 연결, MVC)  (0) 2023.12.15