728x90
CRUD 구성
RootAppContext
package kr.bit.config;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RootAppContext { //root-context.xml
}
ServletAppContext
package kr.bit.config;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
@PropertySource("/WEB-INF/views/properties/db.properties")
public class ServletAppContext implements WebMvcConfigurer {
@Value("${db.classname}")
private String db_classname;
@Value("${db.url}")
private String db_url;
@Value("${db.username}")
private String db_username;
@Value("${db.password}")
private String db_password;
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
WebMvcConfigurer.super.configureViewResolvers(registry);
registry.jsp("/WEB-INF/views/", ".jsp");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
WebMvcConfigurer.super.addResourceHandlers(registry);
registry.addResourceHandler("/**").addResourceLocations("/resources/");
}
}
SpringConfigClass
package kr.bit.config;
import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class SpringConfigClass extends AbstractAnnotationConfigDispatcherServletInitializer {
//DispatcherServlet에 매핑할 요청주소를 세팅
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] {"/"};
}
//MVC 설정을 위한 클래스 지정
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {ServletAppContext.class};
}
//웹에서 사용한 Bean들을 정의하기 위한 클래스 지정
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {RootAppContext.class};
}
@Override
protected Filter[] getServletFilters() {
// TODO Auto-generated method stub
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
return new Filter[] {encodingFilter};
}
}
HomeController
package kr.bit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
@RequestMapping(value="/", method=RequestMethod.GET)
public String home() {
return "main"; //main.jsp를 첫화면으로
}
}
MainController
package kr.bit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MainController {
@GetMapping("/main")
public String main() {
return "main";
}
}
Main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- Bootstrap CDN-->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery-3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<h3 class="card-title">Post Title</h3>
<table class="table table-hover" id="board_list">
<thead>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-center d-none d-md-table-cell">10</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Gildong. Hong</td>
<td class="text-center d-none d-md-table-cell">2024-05-14</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">11</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">ZzangGu. Shin</td>
<td class="text-center d-none d-md-table-cell">2024-05-15</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">12</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Zzang A. Shin</td>
<td class="text-center d-none d-md-table-cell">2024-05-16</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">13</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Melody. My</td>
<td class="text-center d-none d-md-table-cell">2024-05-17</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">14</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Gildong. Hong</td>
<td class="text-center d-none d-md-table-cell">2024-05-13</td>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
</tbody>
</table>
<div class="d-none d-md-block">
<ul class="pagination justify-content-center">
<li class="page-item">
<a class="page-link" href="#">Previous</a>
</li>
<li class="page-item">
<a class="page-link" href="#">1</a>
</li>
<li class="page-item">
<a class="page-link" href="#">2</a>
</li>
<li class="page-item">
<a class="page-link" href="#">3</a>
</li>
<li class="page-item">
<a class="page-link" href="#">4</a>
</li>
<li class="page-item">
<a class="page-link" href="#">5</a>
</li>
<li class="page-item">
<a class="page-link" href="#">6</a>
</li>
<li class="page-item">
<a class="page-link" href="#">7</a>
</li>
<li class="page-item">
<a class="page-link" href="#">8</a>
</li>
<li class="page-item">
<a class="page-link" href="#">9</a>
</li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</div>
<div class="d-none d-md-block">
<ul class="pagination justify-content-center">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
<div class="text-right">
<a href="${root }board/write" class="btn btn-dark">Write</a>
</div>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
절대경로 설정
<c:set var="root" value="${pageContext.request.contextPath }/"/>
머릿말 / 바닥글 설정법
머릿글
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url value='/' var="root"/>
<nav class="navbar navbar-expand-md bg-dark text-white fixed-up shadow-lg">
<a class=navbar-brand" href="${root }main">Board Project</a>
<div class="container-fluid">
<button class="navbar-toggler" type="button" data-toggle="collapse"
data-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav"></ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="${root }user/modify">Modify</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${root }user/logout">Log Out</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${root }user/login">Log In</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${root }user/join">Join Us</a>
</li>
</ul>
</div>
</div>
</nav>
바닥글
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<style>
.foot{
display: flex;
gap:15px;
}
.foot-box{
position: absolute;
top:100%;
right:18%;
transform:translate(0%,-100%);
}
</style>
<div class="container-fluid bg-white text-dark" style="margin-top: 50px; padding-top: 30px; padding-bottom: 30px">
<div class="container foot">
<p>미치겠다</p>
<p>이게 뭡니까 ..?</p>
<p>네클캠 10기 살려줘~</p>
</div>
</div>
<!-- 절대경로로 넣으면 새로운 요청이 발생했을 때 localhost:8080 주소만 남음
하위 경로(첫경로/main)가 어떻게 되어있던 상관없이 원하는 페이지를 직접 요청할 수 있다 -->
User
UserController
package kr.bit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/modify")
public String modify() {
return "user/modify";
}
@GetMapping("/logout")
public String logout() {
return "user/logout";
}
// @GetMapping("/login")
// public String login() {
// return "user/login";
// }
@PostMapping("/login")
public String login() {
return "user/login";
}
@GetMapping("/join")
public String join() { //상단메뉴 - 회원가입
return "user/join";
}
}
join.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>우리반 화이팅~~! 아쟉!♥</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery-3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="row">
<div class="col-sm-3"></div>
<!-- 부트스트랩 그리드 옵션 -->
<div class="col-sm-6">
<div class="card shadow">
<div class="card-body">
<form action="${root}user/login" method="post">
<div class="form-group">
<label for="user_name">Name</label>
<input type="text"
class="form-control" id="user_name"
name="user_name"/>
</div>
<div class="form-group">
<label for="user_id">ID</label>
<div class="input-group">
<input type="text" class="form-control" id="user_id"
name="user_id"/>
<div class="input-group-append">
<button type="button" class="btn btn-dark">
Duplicate Check
</button>
</div>
</div>
<div class="form-group">
<label for="user_pw">Password</label>
<input type="password"
class="form-control" id="user_pw"
name="user_pw"/>
</div>
<div class="form-group">
<label for="user_pw2">Password Check</label>
<input type="text"
class="form-control" id="user_pw"
name="user_pw2"/>
</div>
<div class="form-group">
<div class="text-right">
<button type="submit" class="btn btn-dark">Join</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery-3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="row">
<div class="col-sm-3"></div>
<!-- 부트스트랩 그리드 옵션 -->
<div class="col-sm-6">
<div class="card shadow">
<div class="card-body">
<div class="alert alert-danger">
<h2>login fail</h2>
<p>check your ID, Password</p>
</div>
<form action="${root}user/login" method="get">
<div class="form-group">
<label for="user_id">ID</label>
<input type="text"
class="form-control" id="user_id"
name="user_id"/>
</div>
<div class="form-group">
<label for="user_pw">Password</label>
<input type="password"
class="form-control" id="user_pw"
name="user_pw"/>
</div>
<div class="form-group">
<div class="text-right">
<button type="submit" class="btn btn-dark">Log In</button>
<a href="${root }user/join" class="btn btn-dark">Join</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
logout.jsp
modify.jsp
BoardController
package kr.bit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/board")
public class BoardController {
@GetMapping("/main")
public String main() {
return "board/main";
}
@GetMapping("/read")
public String read() {
return "board/read";
}
@GetMapping("/write")
public String write() {
return "board/write";
}
@GetMapping("/modify")
public String modify() {
return "board/modify";
}
@GetMapping("/delete")
public String delete() {
return "board/delete";
}
}
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- Bootstrap CDN-->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery-3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<h3 class="card-title">Post Title</h3>
<table class="table table-hover" id="board_list">
<thead>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-center d-none d-md-table-cell">10</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Gildong. Hong</td>
<td class="text-center d-none d-md-table-cell">2024-05-14</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">11</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">ZzangGu. Shin</td>
<td class="text-center d-none d-md-table-cell">2024-05-15</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">12</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Zzang A. Shin</td>
<td class="text-center d-none d-md-table-cell">2024-05-16</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">13</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Melody. My</td>
<td class="text-center d-none d-md-table-cell">2024-05-17</td>
</tr>
<tr>
<td class="text-center d-none d-md-table-cell">14</td>
<td class="w-50">Subject</td>
<td class="text-center d-none d-md-table-cell">Gildong. Hong</td>
<td class="text-center d-none d-md-table-cell">2024-05-13</td>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
<tr>
<th class="text-center d-none d-md-table-cell">Post No.</th>
<th class="w-50">Post Subject.</th>
<th class="text-center d-none d-md-table-cell">Post Writer.</th>
<th class="text-center d-none d-md-table-cell">Post Date.</th>
</tr>
</tbody>
</table>
<div class="d-none d-md-block">
<ul class="pagination justify-content-center">
<li class="page-item">
<a class="page-link" href="#">Previous</a>
</li>
<li class="page-item">
<a class="page-link" href="#">1</a>
</li>
<li class="page-item">
<a class="page-link" href="#">2</a>
</li>
<li class="page-item">
<a class="page-link" href="#">3</a>
</li>
<li class="page-item">
<a class="page-link" href="#">4</a>
</li>
<li class="page-item">
<a class="page-link" href="#">5</a>
</li>
<li class="page-item">
<a class="page-link" href="#">6</a>
</li>
<li class="page-item">
<a class="page-link" href="#">7</a>
</li>
<li class="page-item">
<a class="page-link" href="#">8</a>
</li>
<li class="page-item">
<a class="page-link" href="#">9</a>
</li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</div>
<div class="d-none d-md-block">
<ul class="pagination justify-content-center">
<li class="page-item"><a class="page-link" href="#">Previous</a></li>
<li class="page-item"><a class="page-link" href="#">Next</a></li>
</ul>
</div>
<div class="text-right">
<a href="${root }board/write" class="btn btn-dark">Write</a>
</div>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
write.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- Bootstrap CDN-->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery-3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<form action="${root}board/read" method="get">
<div class="form-group">
<label for="board_subject">Subject</label>
<input type="text"
class="form-control" id="board_subject" name="board_subject"/>
</div>
<div class="form-group">
<label for="board_content">Content</label>
<textarea class="form-control" id="board_content" name="board_content"
rows="10" style="resize:none"></textarea>
</div>
<div class="form-group">
<div class="text-right">
<button type="submit" class="btn btn-dark">Write</button>
</div>
</div>
</form>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
read.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- Bootstrap CDN-->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery-3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<div class="form-group">
<label for="board_writer_name">Writer</label>
<input type="text" value="Gildong.Hong" disabled="disabled"
class="form-control" id="board_writer_name" name="board_writer_name"/>
</div>
<div class="form-group">
<label for="board_date">Wrote Date</label>
<input type="text" value="2024-05-13" disabled="disabled"
class="form-control" id="board_date" name="board_date"/>
</div>
<div class="form-group">
<label for="board_subject">Subject</label>
<input type="text" value="Subject" disabled="disabled"
class="form-control" id="board_subject" name="board_subject"/>
</div>
<div class="form-group">
<label for="board_content">Content</label>
<textarea style="resize: none" rows="10" disabled="disabled"
class="form-control" id="board_content" name="board_content">Content</textarea>
</div>
<div class="form-group">
<div class="text-right">
<a href="${root }board/main" class="btn btn-dark">List</a>
<a href="${root }board/modify" class="btn btn-info">Modify</a>
<a href="${root }board/delete" class="btn btn-danger">Delete</a>
</div>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
modify.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- Bootstrap CDN-->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script
src="https://ajax.googleapis.com/ajax/libs/jquery-3.3.1/jquery.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<c:import url="/WEB-INF/views/include/top_menu.jsp"/>
<div class="container" style="margin-top: 100px">
<div class="card shadow">
<div class="card-body">
<form action="${root}board/read" method="get">
<div class="form-group">
<label for="board_writer_name">Writer</label>
<input type="text" value="Gildong.Hong" disabled="disabled"
class="form-control" id="board_writer_name" name="board_writer_name"/>
</div>
<div class="form-group">
<label for="board_date">Wrote Date</label>
<input type="text" value="2024-05-13" disabled="disabled"
class="form-control" id="board_date" name="board_date"/>
</div>
<div class="form-group">
<label for="board_subject">Subject</label>
<input type="text"
class="form-control" id="board_subject" name="board_subject"/>
</div>
<div class="form-group">
<label for="board_content">Content</label>
<textarea class="form-control" id="board_content" name="board_content"
rows="10" style="resize:none"></textarea>
</div>
<div class="form-group">
<div class="text-right">
<button type="submit" class="btn btn-dark">Modify Done</button>
<a href="${root }board/read" class="btn btn-info">Cancel</a>
</div>
</div>
</form>
</div>
</div>
<c:import url="/WEB-INF/views/include/bottom_menu.jsp"/>
</body>
</html>
delete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="root" value="${pageContext.request.contextPath }/"/>
<script>
alert("삭제되었습니다.");
location.href="${root }main";
</script>
My SQL Table Setting
use khw;
create table board_info_table(
board_info_idx int auto_increment primary key,
board_info_name varchar(500) not null);
insert into board_info_table values(1,'1팀');
insert into board_info_table values(2,'2팀');
insert into board_info_table values(3,'3팀');
insert into board_info_table values(4,'4팀');
create table user_table(
user_idx int auto_increment primary key,
user_name varchar(50) not null,
user_id varchar(100) not null,
user_pw varchar(100) not null);
create table content_table(
content_idx int auto_increment primary key,
content_subject varchar(500) not null,
content_text text not null,
content_writer_idx int not null,
content_board_idx int not null,
content_date date not null,
foreign key(content_writer_idx) references user_table(user_idx),
foreign key(content_board_idx) references board_info_table(board_info_idx));
desc content_table;
desc user_table;
desc board_info_table;
select *from mvc_table;
Getter & Setter 설정
BoardInfo.java
package kr.bit.beans;
public class Boardinfo {
private int board_info_idx;
private String board_info_name;
public int getBoard_info_idx() {
return board_info_idx;
}
public void setBoard_info_idx(int board_info_idx) {
this.board_info_idx = board_info_idx;
}
public String getBoard_info_name() {
return board_info_name;
}
public void setBoard_info_name(String board_info_name) {
this.board_info_name = board_info_name;
}
}
Content.java
package kr.bit.beans;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Content {
private int content_idx;
private String content_subject;
private String content_text;
private int content_writer_idx;
private int content_board_idx;
private String content_date;
}
User.java
package kr.bit.beans;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private int user_idx;
private String user_name;
private String user_id;
private String user_pw;
}
db.properties
db.classname=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/스키마이름
db.username=아이디
db.password=비번
ServletAppContext에 propertiesSource 추가
package kr.bit.config;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
@PropertySource("/WEB-INF/views/properties/db.properties")
public class ServletAppContext implements WebMvcConfigurer {
@Value("${db.classname}")
private String db_classname;
@Value("${db.url}")
private String db_url;
@Value("${db.username}")
private String db_username;
@Value("${db.password}")
private String db_password;
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
WebMvcConfigurer.super.configureViewResolvers(registry);
registry.jsp("/WEB-INF/views/", ".jsp");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
WebMvcConfigurer.super.addResourceHandlers(registry);
registry.addResourceHandler("/**").addResourceLocations("/resources/");
}
//mybatis setting
@Bean
public BasicDataSource dataSource() {
BasicDataSource source = new BasicDataSource();
source.setDriverClassName(db_classname);
//주소를 직접 치지않고, 위에서 주입받은 값 그대로!
source.setUrl(db_url);
source.setUsername(db_username);
source.setPassword(db_password);
return source;
}
@Bean
public SqlSessionFactory factory(BasicDataSource source) throws Exception {
SqlSessionFactoryBean fac = new SqlSessionFactoryBean();
fac.setDataSource(source);
SqlSessionFactory factory = fac.getObject();
return factory;
}
// @Bean
// public MapperFactoryBean<MapperInterface> test_mapper(SqlSessionFactory factory) throws Exception {
//
// MapperFactoryBean<MapperInterface> fac =
// new MapperFactoryBean<MapperInterface>(MapperInterface.class);
//
// fac.setSqlSessionFactory(factory);
// return fac;
// }
}
728x90
'Frameworks > Spring' 카테고리의 다른 글
[Spring] Board CRUD (Validator + DB insert) III (0) | 2024.05.14 |
---|---|
[Spring] Board CRUD (use Bootstrap) II (1) | 2024.05.14 |
[Spring] MVC (MyBatis with XML) (0) | 2024.05.13 |
[Spring] MVC (Restcontroller) (2) | 2024.05.13 |
[Spring] MVC (DB Setting with MyBatis) (2) | 2024.05.12 |