1. 기본세팅하기
[STS로 스프링 mvc프로젝트 생성후]
1.web.xml에 먼저 한글 인코딩부터 설정한다
<!-- 한글 인코딩 Start -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 한글 인코딩 End -->
2.pom.xml에 나는 db가 mariadb이고 mybatis를 사용할거기 때문에
<!-- spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
<!-- log4jdbc-log4j2-jdbc4 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</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>3.1.1.RELEASE</version>
</dependency>
<!-- 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.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.6.0</version>
</dependency>
3.src/main/resources에서 우 클릭 > new > Other...클릭
File name에 log4jdbc.log4j2.properties 적어주시고 Finish클릭
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
추가 후 저장 이렇게 추가한다.
4.src/main/webapp/WEB-INF/spring/root-context.xml을 열고 아래에
Namespaces 클릭한후 빨간 박스에 있는것을 체크후 반영
그리고 Namespaces 왼쪽에 Source탭에 들어갑니다.
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.mariadb.jdbc.Driver" />
<property name="url" value="jdbc:mariadb://localhost:3306/blog" />
<property name="username" value="root" />
<property name="password" value="rhkdtjd83**" />
</bean>
<!-- Mybatis 연동 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"
destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- scan -->
<context:component-scan base-package="kr.co.service"></context:component-scan>
<context:component-scan base-package="kr.co.dao"></context:component-scan>
<context:component-scan base-package="kr.co.vo"></context:component-scan>
<context:component-scan base-package="kr.co.util"></context:component-scan>
db접속정보나 파일 스캔 내용 mybatis 추가
(중요) 이렇게해도 페이지 404가 뜰 수 있다.
그래서,
src/main/resources에 mappers폴더를 하나만든후 boardMapper.xml파일을 하나만들어주고
아래 코드를 추가해줍니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="boardMapper">
</mapper>
src/main/resources에 mybatis-config.xml 파일을 만들어주고 아래코드를 추가해줍니다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
5. 새로운 컨트롤러를 만들어서 url 매핑이 먼저 잘 되는지 확인한다.
BoardController.java 생성
package kr.co.contorller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
@RequestMapping("/board/*")
public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
@RequestMapping(value="/getBoardList",method = RequestMethod.GET)
public String getBoardList() throws Exception{
logger.info("get register");
return "board/getBoardList";
}
}
컨트롤러 생성후 아파치 재시작후 http://localhost:9090/yang4/board/getBoardList 접속테스트
6.
자 이제 dao service vo를 만들자
오류)
<!-- scan -->
이게 오류난다. 아직 vo dao service 를 안만들어서 그런지 모르겠다.
우선 dao service vo 를 만들자
Board.VO.java
public class BoardVO {
public int bid;
public String cate_cd;
public String title;
public String content;
public String tag;
public int view_cnt;
public String reg_id;
public String reg_dt;
public String edit_dt;
}
getter setter 만들고 tostring함수로 만든다
boardMapper.xml
<select id="getBoardList" resultType="kr.co.vo.BoardVO">
SELECT
BID, CATE_CD, TITLE, CONTENT, TAG, VIEW_CNT, REG_ID, REG_DT, EDIT_DT
FROM
TBL_BOARD
</select>
게시글 리스트 가져오는 쿼리 추가
BoardDAO.java (interface)
package kr.co.dao;
import java.util.List;
import kr.co.vo.BoardVO;
public interface BoardDAO {
public List<BoardVO> getBoardList() throws Exception;
}
BoardDAOImpl
package kr.co.dao;
import java.util.List;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import kr.co.vo.BoardVO;
@Repository
public class BoardDAOImpl implements BoardDAO {
@Inject
private SqlSession sqlSession;
@Override
public List<BoardVO> getBoardList() throws Exception {
return sqlSession.selectList("boardMapper.getBoardList");
}
}
BoardService
package kr.co.service;
import java.util.List;
import java.util.Map;
import kr.co.vo.BoardVO;
public interface BoardService {
public List<BoardVO> getBoardList() throws Exception;
}
BoardServiceImlp
package kr.co.service;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.co.dao.BoardDAO;
import kr.co.vo.BoardVO;
@Service
public class BoardServiceImpl implements BoardService{
@Inject
private BoardDAO boardDAO;
public List<BoardVO> getBoardList() throws Exception {
return boardDAO.getBoardList();
}
}
BoardController.java
package kr.co.contorller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import kr.co.service.BoardService;
/**
* Handles requests for the application home page.
*/
@Controller
@RequestMapping("/board/*")
public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
@Inject
private BoardService boardService;
@RequestMapping(value="/getBoardList",method = RequestMethod.GET)
public String getBoardList(Model model) throws Exception{
logger.info("get register");
model.addAttribute("boardList", boardService.getBoardList());
return "board/getBoardList";
}
}
컨트롤러 코드설명 :
먼저 @Inject 어노테이션으로 서비스 선언하고
getBoardList 파라미터 url을 받았을떄 get메소드로
Model model 객체를 인자값으로 받고
model 객체에 boardService.getBoardList(); 함수의 결과값을 boardList라는 객체이름으로 담는다
boardList객체를 getBoardList.jsp로 반환한다.
Error creating bean with name 'boardController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private kr.co.service.BoardService kr.co.contorller.BoardController.boardService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [kr.co.service.BoardService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Inject()}
에러뜸 자살각
org.springframework.beans.factory.BeanCreationException:
이런오류가 뜨는데....
해결방법으로는)
servlet.context.xml에서
<!--scan-->추가해줘야함
<context:component-scan base-package="kr.co.service"></context:component-scan>
<context:component-scan base-package="kr.co.dao"></context:component-scan>
<context:component-scan base-package="kr.co.vo"></context:component-scan>
해결