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

+ Recent posts