View단
- 시작 페이지 : index.jsp
- 게시판 목록 : list.jsp
- 글쓰기 페이지 : write.jsp
- 댓글 목록 : comment_list.jsp
- 수정,삭제 기능 : edit.jsp
- 답변 달기 : reply.jsp
- 검색 페이지 : search.jsp
게시판 목록 구현
1) 어노테이션이 아니라 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_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>jsp00</display-name>
<!-- 서블릿 등록 -->
<servlet>
<servlet-name>board</servlet-name>
<servlet-class>board.BoardController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>board</servlet-name>
<url-pattern>/board_servlet/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
2) index.jsp 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시작 페이지</title>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<c:redirect url="/board_servlet/list.do"></c:redirect>
<%-- <%
response.sendRedirect(request.getContextPath()+"/board_servlet/list.do");
%> --%>
</body>
</html>
3) 요청이 들어왔으므로, 이를 처리해줄 Controller의 틀을 잡기
- URL,컨텍스트 패스값
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//@WebServlet("/BoardController") (web.xml에서 매핑처리하면 반드시 어노테이션은 지워야함)
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//클라이언트에서 요청한 주소 처리
String url = request.getRequestURL().toString();
//url은 StringBuffer를 쓰므로 toString()작업
//컨텍스트 패스
String contextPath=request.getContextPath();
if(url.indexOf("list.do")!=-1) {
System.out.println("list.do 호출");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
4) Constants.java(상수값 처리) - common 패키지 아래에 만들기
이 때는 파일의 업로드 패스값과 최대 업로드 용량을 정해놓는다.
package common;
public class Constants {
//파일이 업로드되고 관리되는 디렉토리
public static final String UPLOAD_PATH = "c:\\upload\\";
//파일 업로드 용량 제한(10MB)
public static final int MAX_UPLOAD = 10*1024*1024;
}
5) DTO,DAO 만들어 놓기
package board.dto;
import java.sql.Date;
public class BoardDTO {
private int num; //게시물번호
private String writer; //작성자
private String subject; //제목
private String passwd; //수정,삭제 비밀번호
private Date reg_date; //작성일자
private int readcount; //조회수
private int ref; //게시물 그룹
private int re_step; //게시물 그룹 순번
private int re_level;//답변 단계
private String content; //본문
private String ip; //작성자 ip
private int comment_count; //댓글 갯수처리(테이블에 없음)
private String filename; //파일네임
private int filesize; //파일사이즈
private int down; //다운로드 횟수
private String ext; //첨부파일의 확장자(테이블에 없음)
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
public int getReadcount() {
return readcount;
}
public void setReadcount(int readcount) {
this.readcount = readcount;
}
public int getRef() {
return ref;
}
public void setRef(int ref) {
this.ref = ref;
}
public int getRe_step() {
return re_step;
}
public void setRe_step(int re_step) {
this.re_step = re_step;
}
public int getRe_level() {
return re_level;
}
public void setRe_level(int re_level) {
this.re_level = re_level;
}
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 int getComment_count() {
return comment_count;
}
public void setComment_count(int comment_count) {
this.comment_count = comment_count;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public int getFilesize() {
return filesize;
}
public void setFilesize(int filesize) {
this.filesize = filesize;
}
public int getDown() {
return down;
}
public void setDown(int down) {
this.down = down;
}
public String getExt() {
return ext;
}
public void setExt(String ext) {
this.ext = ext;
}
@Override
public String toString() {
return "BoardDTO [num=" + num + ", writer=" + writer + ", subject=" + subject + ", passwd=" + passwd
+ ", reg_date=" + reg_date + ", readcount=" + readcount + ", ref=" + ref + ", re_step=" + re_step
+ ", re_level=" + re_level + ", content=" + content + ", ip=" + ip + ", comment_count=" + comment_count
+ ", filename=" + filename + ", filesize=" + filesize + ", down=" + down + ", ext=" + ext + "]";
}
}
package board.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import board.dto.BoardDTO;
import sqlmap.MybatisManager;
public class BoardDAO {
//게시물 목록 리스트
public List<BoardDTO> list(){
List<BoardDTO> list = null;
SqlSession session = null;
try {
session = MybatisManager.getInstance().openSession();
list = session.selectList("board.list");//네임스페이스.아이디
} catch (Exception e) {
e.printStackTrace();
} finally {
if(session!=null) session.close();
}
return list;
}
}
6) xml에서 스페이스/아이디 등록
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="board">
<select id="list" resultType="board.dto.BoardDTO">
select num,writer,subject,reg_date,readcount,filename,filesize,down,ip
from board
order by num desc </select>
</mapper>
7) 등록한 뒤 sqlMapConfig에서 매퍼파일 등록해주기
<mappers>
<mapper resource="/memo/mapper/memo.xml"/>
<mapper resource="/board/mapper/board.xml"/>
</mappers>
8) 서블릿에서 list 메소드로 List를 받아 웹 영역에 저장한 뒤 list.jsp로 포워딩 시키기
package board;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import board.dao.BoardDAO;
import board.dto.BoardDTO;
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = request.getRequestURL().toString();
String contextPath = request.getContextPath();
BoardDAO dao = new BoardDAO();
if(url.indexOf("list.do")!=-1) {
List<BoardDTO> list=dao.list();
request.setAttribute("list", list);
String page="/board/list.jsp";
RequestDispatcher rd=request.getRequestDispatcher(page);
rd.forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
9) list.jsp 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Insert title here</title>
<%@ include file="../include/header.jsp" %>
</head>
<body>
<h2>게시판</h2>
<button id="btnWrite">글쓰기</button>
<table border="1" style="width: 100%;">
<tr>
<th>번호</th>
<th>이름</th>
<th>제목</th>
<th>날짜</th>
<th>조회수</th>
<th>첨부파일</th>
<th>파일사이즈</th>
<th>다운로드</th>
<th>IP주소</th>
</tr>
<c:forEach var="dto" items="${list}">
<tr>
<td>${dto.num}</td>
<td>${dto.writer}</td>
<td>${dto.subject}</td>
<td>${dto.reg_date}</td>
<td>${dto.readcount}</td>
<td>${dto.filename}</td>
<td>${dto.filesize}</td>
<td>${dto.down}</td>
<td>${dto.ip}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
index.jsp를 실행시켜보면,
'WEB > JSP' 카테고리의 다른 글
< myBatis + MVC + CRUD를 활용한 한 줄 메모장 만들기 - 01. 환경설정과 list출력 (0) | 2022.08.10 |
---|---|
쿠키와 세션 (0) | 2022.08.03 |
트랜잭션 처리, 배치 처리 (0) | 2022.07.22 |
JDBC - DB연결해서 멤버 리스트 출력, 삽입, 삭제하기 (0) | 2022.07.22 |
Session 객체 (0) | 2022.07.18 |