참고영상 : https://youtu.be/Jc9UTY_lcrY
개발환경
언어 : JAVA (JDK 11)
서버 : Apache Tomcat 9.0
프레임워크 : Spring Framework 3.9.18, MyBatis 3.5.8, Bootstrap 5.2.3
DB : OracleXE 11gR2
IDE : sts-3.9.18.RELEASE, SQL Developler
구현내용
- 메인페이지 / 게시판 목록 구현
board.controller패키지 - IndexController클래스
package board.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
// http://localhost:8090/myapp/index.do
@Controller
public class IndexController {
public IndexController() {
// TODO Auto-generated constructor stub
}
@RequestMapping(value="/index.do")
public String home() {
return "/index";
}
}//class HomeController
WEB-INF - spring - appServlet폴더에 common-content.xml생성
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- controller -->
<bean class="board.controller.IndexController" />
<!-- viewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="WEB-INF/views"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/common-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
src="resources/images/mainphoto.png"
<body>
<div align="center">
<h2>게시판(click!)</h2>
<h1>↓</h1>
<a href="#">
<img src="resources/images/mainphoto.png" width="200" height="200"/>
</a>
</div>
</body>
--DROP TABLE boardBasic;
CREATE TABLE boardBasic(
num number CONSTRAINT boardBasic_num PRIMARY KEY,
writer varchar2(50),
title varchar2(50),
content varchar2(100),
regdate date,
readcount number default 0
);
--DROP SEQUENCE boardBasic_num_seq;
CREATE SEQUENCE boardBasic_num_seq
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
INSERT INTO boardBasic
VALUES(boardBasic_num_seq.nextval, '박재언','첫번째 게시글','첫번째 게시글의 내용입니다',sysdate,0);
select * from boardBasic;
commit;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace = "board">
</mapper>
${pageContext.request.contextPath}
: pageContext라는 객체에서 contextPath를 가져옴 (리턴값 : 현재 프로젝트 경로 /myapp) <div align="center">
<h2>게시판(click!)</h2>
<h1>↓</h1>
<a href="${pageContext.request.contextPath}/list.do">
<img src="resources/images/mainphoto.png" width="200" height="200"/>
</a>
</div>
<body>
<div align="center">
<h2>여기는 게시판 입니다!!!</h2>
<a href="#">글쓰기</a>
</div>
</body>
//http://localhost:8090/myapp/list.do
@RequestMapping(value="/list.do")
public ModelAndView listExecute(ModelAndView mav) {
mav.setViewName("/board/list");
return mav;
}
<select id="list" resultType="board.dto.BoardDTO">
SELECT * FROM board
ORDER BY num ASC
</select>
@Override
public List<BoardDTO> list() {
return sqlSession.selectList("board.list");
}
@Override
public List<BoardDTO> listProcess() {
return boardDao.list();
}
//http://localhost:8090/myapp/board/list.do
@RequestMapping(value="/board/list.do")
public ModelAndView listExecute(ModelAndView mav) {
mav.addObject("aList",boardService.listProcess());
mav.setViewName("board/list");
return mav;
}
<title>Board List</title>
<style>
tr, td {text-align:center;}
</style>
</head>
<body>
<h2>게시판 목록</h2>
<table>
<a href="#">글쓰기</a>
<thead>
<tr align="center">
<th>#</th>
<th width="40%">제목</th>
<th>작성자</th>
<th width="30%">작성일</th>
<th>조회수</th>
</tr>
</thead>
<tbody>
<c:forEach items="${aList}" var="dto">
<tr>
<td>${dto.num}</td>
<td>${dto.title}</td>
<td>${dto.writer}</td>
<td>${dto.regdate}</td>
<td>${dto.readcount}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>