com.demo.domin์์ฑ
BoardInfoVO์์ฑ
package com.demo.domain;
public class BoardinfoVO {
//
// -- ๋ณด๋์ ๋ณด ํ
์ด๋ธ(๋ฒํธ, ๊ฒ์ํ ์ด๋ฆ)
//
// create table board_info(
// info_idx int AUTO_INCREMENT, -- ๊ฒ์ํ ์ ๋ณด ๋ฒํธ
// board_name varchar(500) not null, -- ๊ฒ์ํ ์ด๋ฆ
// primary key(info_idx)
// );
private int info_idx;
private String board_name;
//๊ฒํฐ ์ธํฐ ์์ฑ
public int getInfo_idx() {
return info_idx;
}
public void setInfo_idx(int info_idx) {
this.info_idx = info_idx;
}
public String getBoard_name() {
return board_name;
}
public void setBoard_name(String board_name) {
this.board_name = board_name;
}
}
UserVO ์์ฑ
package com.demo.domain;
public class UserVO {
// -- ์ฌ์ฉ์ ํ
์ด๋ธ
// create table user(
// user_idx int AUTO_INCREMENT,
// name varchar(50) not null,
// user_id varchar(100) not null,
// user_pw varchar(100) not null,
// primary key(user_idx)
// );
//
private int user_idx;
private String name;
private String user_id;
private String user_pw;
//๊ฒํฐ ์ธํฐ ์์ฑ
public int getUser_idx() {
return user_idx;
}
public void setUser_idx(int user_idx) {
this.user_idx = user_idx;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getUser_pw() {
return user_pw;
}
public void setUser_pw(String user_pw) {
this.user_pw = user_pw;
}
}
BoardVO์์ฑ
package com.demo.domain;
import java.util.Date;
public class BoardVO {
//
// -- ๋ณด๋ ํ
์ด๋ธ
// create table board(
// board_idx int AUTO_INCREMENT,
// title varchar(500) not null,
// content text not null,
// content_file varchar(500) not null,
// writer_idx int , -- user_idx ์ฐธ์กฐ (์ธ๋ํค)
// info_idx int, -- info_idx ์ฐธ์กฐ (์ธ๋ํค)
// regDate datetime,
// primary key(board_idx)
// );
private int board_idx; //๊ธ๋ฒํธ
private String title; //์ ๋ชฉ
private String content; //๊ธ๋ด์ฉ
private String content_file; //์ด๋ฏธ์ง ํ์ผ ์ด๋ฆ
private int writer_idx; //๊ธ์ด์ด
private int info_idx; //๊ฒ์ํ์ด๋ฆ
private Date regDate; //์์ฑ๋ ์ง
//๊ฒํฐ ์ธํฐ ์์ฑ
public int getBoard_idx() {
return board_idx;
}
public void setBoard_idx(int board_idx) {
this.board_idx = board_idx;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getContent_file() {
return content_file;
}
public void setContent_file(String content_file) {
this.content_file = content_file;
}
public int getWriter_idx() {
return writer_idx;
}
public void setWriter_idx(int writer_idx) {
this.writer_idx = writer_idx;
}
public int getInfo_idx() {
return info_idx;
}
public void setInfo_idx(int info_idx) {
this.info_idx = info_idx;
}
public Date getRegDate() {
return regDate;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
}
pom.xml์์ db์ฐ๊ฒฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ(testํ๋จ์ ์ถ๊ฐ)
<!-- database -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- commons-dbcp2 : ์ปค๋ฅ์
ํ -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- log4jdbc-log4j2-jdbc4 : SQL ์คํ ์ ๋ก๊ทธ -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
<!-- mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
root-context.xml ์ถ๊ฐ
<!-- ๋ฐ์ดํฐ์์ค์ DB์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์
๋ ฅ -->
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mini?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean>
<!-- MyBatis sql์ธ์
ํฉํ ๋ฆฌ ๊ฐ์ฒด(๋ฐ์ดํฐ ์์ค ์ฃผ์
) ์์ datasource๊ฐ ์ฃผ์
๋จ -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations"
value="classpath:/mappers/**/*.xml" />
</bean>
<!-- sqlํฉํ ๋ฆฌ ์ฃผ์
ํ์ฌ sql๋ฉ์๋ ์คํ ๊ฐ์ฒด -->
<bean id="sqlSessionTemplate"
class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์์ฑํ์ผ๋ฏ๋ก ์ด๋ฆ ๋ณ๊ฒฝ์ด ํ์ํจ -> mini

mappers ํด๋

์ค์ ํ๊ณ ์คํํด๋ณธ๋ค. ์ค๋ฅ๋๋์ง?
boardMapper.xml ๋ณต์ฌํด์ menuMapper.xml์์ฑ

<!-- ์ ์ฒด ๋ฉ๋ด ๋ฆฌ์คํธ ์ถ๋ ฅ -->
<select id="menuList" resultType="com.demo.domain.BoardinfoVO">
SELECT info_idx,board_name
FROM board_info
ORDER BY info_idx
</select>
menuDAO์์ฑ
package com.demo.dao;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.demo.domain.BoardinfoVO;
@Repository
public class MenuDAO {
@Autowired
private SqlSessionTemplate sqlTemplate;
//์ ์ฒด ๋ฉ๋ด ๋ฆฌ์คํธ
public List<BoardinfoVO> getMenuList() {
return sqlTemplate.selectList("menu.menuList");
}
}
menuService
package com.demo.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.demo.dao.MenuDAO;
import com.demo.domain.BoardinfoVO;
@Service
public class MenuService {
@Autowired
private MenuDAO menuDao;
//์ ์ฒด ๋ฉ๋ด ๋ฆฌ์คํธ
public List<BoardinfoVO> getMenuList(){
return menuDao.getMenuList();
}
}
servlet-context.xml ์ ์ด๋ ธํ ์ด์ ์ธ์์ ์ํ ์ถ๊ฐ ์ค์

์๋ฌ๋๋์ง ํ์ธํ๊ธฐ
com.demo.interceptor



package com.demo.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import com.demo.service.MenuService;
public class MenuInterceptor implements HandlerInterceptor{
//@AutoWired ๋ ํ๋ ์ฃผ์
๋ฐฉ๋ฒ์
private MenuService menuService;
// ์ข ๋ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ด๊ธดํจ
//์์ฑ์ ์ฃผ์
() ์๋ฌด๊ฒ๋ ์์ ์ด๋ ์คํ๋ง ํ๋ ์ ์ํฌ์์ ์๋์ผ๋ก ์
๋ ฅ๋จ
public MenuInterceptor(MenuService menuService) {
this.menuService = menuService;
}
//prehandle override
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// ์ธํฐ์
ํฐ๋ ์์ฒญ์ ๋จผ์ ์คํ๋์ด ์์
์ ํ๊ณ ๋ง์ฝ ๋ฆฌํด์ด false๊ฐ ๋๋ฉด ์์ฒญ์ ์ทจ์ํ๋ค.
request.setAttribute("topMenuList", menuService.getMenuList());//๋ฉ๋ด๋ฆฌ์คํธ๋ฅผ topmenulist์ ๋ด์์ค
return true;
}
}
preHandle์ ์คํ๋๊ธฐ ์ ์ ์์ ์ ํ๋ค.
menulist๋ฅผ ๊ฐ์ ธ์์ request์ ๋ด์์ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค.
์ด ์์ ์ ํ๋ ์ธํฐ์ ํฐ๋ฅผ ๋ง๋ค์๊ณ , ํด๋น ์ธํฐ์ ํฐ๋ฅผ ๋ฑ๋กํด์ผํ๋๋ฐ
๋ฑ๋ก์ servlet -context์ ๋ฑ๋กํ๋ค.
servlet-context.xml ํ๋จ์ ์๋์ ๋ด์ฉ ์ถ๊ฐ
<!--์ธํฐ์
ํฐ ๊ฐ์ฒด ๋ฑ๋ก-->
<beans:bean id="MenuInterceptor" class="com.demo.interceptor.MenuInterceptor">
<beans:constructor-arg>
<beans:bean class="com.demo.service.MenuService"></beans:bean>
</beans:constructor-arg>
</beans:bean>
<!--์ธํฐ์
ํฐ ์ค์ -->
<interceptors>
<interceptor>
<mapping path="/**"/>
<beans:ref bean="MenuInterceptor"/>
</interceptor>
</interceptors>
๋๋ ์์ธํ๊ฒ
<!--์ธํฐ์
ํฐ ์ค์ -->
<interceptors>
<interceptor>
<mapping path="/"/>
<mapping path="/board/*"/>
<mapping path="/user/*"/>
<beans:ref bean="MenuInterceptor"/>
</interceptor>
</interceptors>
ํด๋น ์ธํฐ์ ํฐ๋ service๊ฐ์ฒด๊ฐ ํ์ํ๋ค.
๊ทธ๋์ bean service ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ ์์ฑ์์ ๋ฃ์ด์ ๋ฑ๋ก์ ํ์.
mapping ์ฃผ์
/**/ ๋ชจ๋ ์ฃผ์์ MenuInterceptor๋ฅผ ์คํํ๋ผ๋ ๋ป์
์ธํฐ์ ํฐ๋? https://popo015.tistory.com/115
[Spring] ์คํ๋ง ์ธํฐ์ ํฐ(Interceptor)๋ ?
๋ชฉํ Interceptor ๋ ๋ฌด์์ธ์ง ์์๋ณธ๋ค. Interceptor ๋ฅผ ์ง์ ๊ตฌํํด๋ณธ๋ค. ์์ 1. ์ธํฐ์ ํฐ(Interceptor) 1.1 ์ธํฐ์ ํฐ๋? 1.2 ์ ์ฌ์ฉํ๋๊ฐ? 1.3 ๊ตฌํ์๋จ 1.4 ์ด๋ค ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋๊ฐ? 2. ์ธํฐ์ ํฐ ๋์
popo015.tistory.com
menu.jsp
๋ฐ๋ณต๋ฌธ ์ฌ์ฉ์ผ๋ก ๋ฉ๋ด ๋ถ๋ฌ์ค๊ธฐ
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="root" value="${pageContext.request.contextPath}"/>
<!-- ์๋จ ๋ฉ๋ด ๋ถ๋ถ -->
<nav
class="navbar navbar-expand-md bg-dark navbar-dark fixed-top shadow-lg">
<a class="navbar-brand" href="${root}/">๐busanIT</a>
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navMenu">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navMenu">
<ul class="navbar-nav">
<c:forEach var="menu" items="${topMenuList}">
<li class="nav-item"><a href="${root}/board/main?info_idx=${menu.info_idx}" class="nav-link">${menu.board_name}</a>
</li>
</c:forEach>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item"><a href="${root}/user/login" class="nav-link">๋ก๊ทธ์ธ</a>
</li>
<li class="nav-item"><a href="${root}/user/join" class="nav-link">ํ์๊ฐ์
</a>
</li>
<li class="nav-item"><a href="${root}/user/modify" class="nav-link">์ ๋ณด์์ </a>
</li>
<li class="nav-item"><a href="${root}/user/logout" class="nav-link">๋ก๊ทธ์์</a>
</li>
</ul>
</div>
</nav>


'BACKEND > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ์์ด๋ ์ค๋ณต ๊ฒ์ฌ (0) | 2023.10.27 |
|---|---|
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ์ ํจ์ฑ ๊ฒ์ฌ (1) | 2023.10.27 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - ํ ์ด๋ธ ๋ง๋ค๊ธฐ(DB) (1) | 2023.10.26 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - BoardController, board(read,modify,write,delete.jsp)ํ์ด์ง ์์ฑ (1) | 2023.10.26 |
| ๊ฒ์ํ ๋ง๋ค๊ธฐ 2 - context path, user(login,logout,modify,join.jsp) (1) | 2023.10.26 |