관리 메뉴

DeseoDeSeo

[Spring] SpringMVC01_ 환경설정 본문

spring

[Spring] SpringMVC01_ 환경설정

deseodeseo 2023. 9. 6. 17:42

○ 제임스 아서 고슬링 ( java의 아버지 )

○ dispatcher servlet은 모든 요청을 받아들임. -->  web.xml

○ controller는 servlet-context.xml 하단에 보면 kr.spring.controller에 있음.

○  DBCP : JDBC 커넥션 풀을 지원 ( --> 오라클이나 mysql등의 dbms들은 특정시간동안 실행이 없으면 해당 세션을 종료함. 따라서 커넥션을 유지하기 위한 별도 설정을 필요로 함.)

        ⟹ 데이터베이스 커넥션 풀 (Connection pool)은 DB와의 연결을 미리 만들어 두고  사용함으로써 네트워크 연결

                작업에 의한 지연을 줄여주기 위해서 사용함.

                  ⟹ 대표적인 커넥션 풀 오픈소스는 Hikaricp, commons-dbcp2, tomcat-jdbc-pool등

              

 

○ boardcontroller -->     boardmapper    -->    mybatis --> db

 

pom.xml에 여러개의 api 추가.
<!-- MyBatis를 사용하기 위한 api추가  -->
			<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
			<dependency>
			    <groupId>org.mybatis</groupId>
			    <artifactId>mybatis</artifactId>
			    <version>3.4.6</version>
			</dependency>
	<!-- conncection Pool을 사용하기 위한 hikari cp추가.  -->
			<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
			<dependency>
			    <groupId>com.zaxxer</groupId>
			    <artifactId>HikariCP</artifactId>
			    <version>3.4.1</version>
			</dependency>
	<!-- MYBATIS 에서 connection을 하기 위한 mySQL Driver API 추가 -->
	
			<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
			<dependency>
			    <groupId>mysql</groupId>
			    <artifactId>mysql-connector-java</artifactId>
			    <version>5.1.42</version>
			</dependency>
			
	<!-- Spring에서 Mybatis 를 통해 JDBC를 사용하기 위한 aPI 추가 -->
	
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
			<dependency>
			    <groupId>org.springframework</groupId>
			    <artifactId>spring-jdbc</artifactId>
			    <version>5.0.20.RELEASE</version>
			</dependency>
	<!-- mybatis와 Spring을 연결해주는 API -->
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
			<dependency>
				    <groupId>org.mybatis</groupId>
				    <artifactId>mybatis-spring</artifactId>
				    <version>1.3.2</version>
			</dependency>

https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.3.2

여기서 다운 받음.

SQL문 작성

프로젝트 클릭 후, new > other > SQL File

 type: MySql_5.1

-- SQL 문을 작성 가능 --
CREATE TABLE BOARD(
	
	IDX INT NOT NULL AUTO_INCREMENT,
	TITLE VARCHAR(100) NOT NULL,
	CONTENT VARCHAR(2000) NOT NULL,
	WRITER VARCHAR(300) NOT NULL,
	INDATE DATETIME DEFAULT NOW(),
	COUNT INT DEFAULT 0,
	PRIMARY KEY(IDX)
	
);
--VO와 TABLE에 만든 변수이름이랑 같아야한다.--
-- 단축키 ALT X--
-- 동시에 여러줄 실행하려면 세미콜론 필수 --

INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('행복하세요','피자먹어용','냠냠이');

INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('시카고 피자좋아요','치즈 피자먹어용','뇸뇸이');

INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('치즈 파스타 ','치즈가 쭉 늘어나용','냠냠이');

INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('피자 피자 먹고 싶어용','피자먹어용','뇸뇸이');

INSERT INTO BOARD(TITLE,CONTENT,WRITER)
VALUES('피자 먹을래용','피자먹을거에용','냠냠이');

SELECT * FROM BOARD;

 

root_context.xml
<!-- bean : 객체를 생성하는 태그 -->
   <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/com"/>
      <property name="username" value="com"/>
      <property name="password" value="com01"/>
   </bean>
   
   <!-- dataSource가 커넥션역할,  -->
   <!-- HikariDataSource(Connection POOL을 만드는 역할을 한다) -->
   <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
      <constructor-arg ref="hikariConfig" />
   </bean>

 

 

BoardController
package kr.spring.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import kr.spring.entity.Board;
import kr.spring.mapper.BoardMapper;

@Controller // 현재 클래스를 핸들러맵핑이 찾기 위해 컨트롤러로 등록하는 부분.
public class BoardController {
	
	@Autowired  //자동으로 연결하는 거.
	private BoardMapper mapper;// mybatis한테 JCBC를 실행하라고 요청하는 객체
	
	/*
	 * @RequestMapping("/") // 요청url로 들어왔을 때 아래 기능을 수행하겠다. public String home() {
	 * System.out.println("홈 기능 수행"); return "boardList"; }
	 */
	
	@RequestMapping("/boardList.do")  // 요청url로 들어왔을 때 아래 기능을 수행하겠다. 보통 메서드도 요청 url앞 부분이랑 맞춰줌.
	public String boardList(Model model) {
		System.out.println("게시판목록보기 기능수행");

    //	web-inf > view > boardList생성.	
	//   실행해서 열리는 페이지의 url에 /boardList.do 붙이면 console창에 게시판목록보기 기능수행이 출력됨.
	// 게시글 정보 가져오기
	// 전체 게시글 조회기능
		// 한 개의 게시물로 하나로 묶음. board (dto)형으로 바꿈
		List<Board> list = mapper.getLists();
		
	model.addAttribute("list", list);
	return "boardList";
		
	}
	
	
}

BoardMapper.java
package kr.spring.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import kr.spring.entity.Board;

@Mapper // MyBatis interFace를 찾기 위해 달아주는 부분.
public interface BoardMapper {
	
	@Select("SELECT * FROM BOARD")
	 public List<Board> getLists();

}
BoardList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
	<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script
	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<h2>Spring MVC01</h2>
		<div class="panel panel-default">
			<div class="panel-heading">Board</div>
			<div class="panel-body">
				<table class="table table-bordered table-hover">
				<!-- tr class = success , info , danger, warning, active -->
					<tr class="danger">  
						<td>번호</td>
						<td>제목</td>
						<td>내용</td>
						<td>작성자</td>
						<td>작성일</td>
						<td>조회수</td>
					</tr>
				<!-- model 안에 있는 list를 jstl을 활용하여 출력 -->
				<c:forEach items ="${list}" var ="vo" varStatus="i">
					<tr>	
						<td> ${i.count}</td>
						<td> ${vo.title}</td>
						<td> ${vo.content}</td>
						<td> ${vo.writer}</td>
						<td> ${vo.indate}</td>
						<td> ${vo.count}</td>
					</tr>
				</c:forEach>
				</table>
			</div>
			<div class="panel-footer">스프링게시판-PBK</div>
		</div>
	</div>

</body>
</html>

 

'spring' 카테고리의 다른 글

[Spring] SpringMVC01_동기방식 마무리  (0) 2023.09.12
[Spring] SpringMVC01_게시판 구현(글쓰기)  (0) 2023.09.07
[spring] springMVC 구조  (0) 2023.09.06
[Spring] SpringMVC01 실습01  (0) 2023.09.05
[Spring] spring  (0) 2023.09.04