Developer J

Spring MVC 기초 실습 본문

개발자 되기 part1/Spring

Spring MVC 기초 실습

Developer J 2020. 5. 29. 19:23
반응형

1. project - Spring legacy Project 선택- Templates 선택하기 : Spring MVC Project 선택--next-패키지 설정

 

2. mavenrepository.com가서 ojdbc6 검색 두 번째 Maven 복사해서 pom.xml에 넣어준다.

mybatis 검색 맨위 mybatis 3.5.3 버전, mybatis spring 검색해서 2.0.3 버전, commons-dbcp 1.4,

spring-orm 검색해서 1.2.6버전 복사해서 붙여 넣는다(버전 위치에 내용을 ${org.springframework-version}로 수정

-해당 프로젝트 버전에 맞춰주겠다.) 이후 dependency에 오류가 뜬다면 groupid에 org.springframework로 변경하고, 다음으로 맨 윗부분으로 올라가서 아래와 같이 작성해주자.

(db.properties 처리하기 위해서는 Commons-dbcp 검색 후 1.4버전 Maven 복사,

 SqlSessionFactory 처리하기 위해서는 mybatis 검색 후 2.0.3버전 Maven 복사)

	<<properties 위에 추가해주자>>
    <!-- repository -->
	<repositories>
		<repository>
			<id>datanucleus</id>
             <!--아래의 주소에서 ojdbc6 repository를 받아주겠다 -->
			<url>http://www.datanucleus.org/downloads/maven2</url>
		</repository>
	</repositories>

3. src->main->webapp->WEB-INF->spring에 위치한 root-context.xm을

src->main->webapp->WEB-INF->spring->appServlet안으로 옮겨준다.

그 후, applicationContext라고 이름을 변경한다.

그에 맞게 web.xml의 <context-param>에서 <param-value>의 경로도 변경해 준다.

(/WEB-INF/spring/appServlet/applicationContext.xml)

 

4. web.xml에 servlet-mapping의 url-pattern을 *.do로 변경한다.

그 아래에 아래의 코드를 작성한다.

	<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>
        	<!-- 모든 request에 대해 encoding해주겠다. -->
            <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
	

5. Maven project update를 해준다.

6. spring폴더 아래 sqls폴더를 만들고 test.sql파일 만든다.

DROP SEQUENCE MYNOSEQ;
DROP TABLE MYBOARD;

CREATE SEQUENCE MYNOSEQ NOCACHE;

CREATE TABLE MYBOARD(
	MYNO NUMBER PRIMARY KEY,
	MYNAME VARCHAR2(1000) NOT NULL,
	MYTITLE VARCHAR2(2000) NOT NULL,
	MYCONTENT VARCHAR2(4000) NOT NULL,
	MYDATE DATE NOT NULL
);

INSERT INTO MYBOARD VALUES(MYNOSEQ.NEXTVAL, '관리자','스프링 테스트','Spring MVC 흥미롭다',SYSDATE);
SELECT * FROM MYBOARD ORDER BY MYNO DESC;

7. com.mvc.upgrade.model.dto에 BoardDto를 만든다.

	private int myno;
	private String myname;
	private String mytitle;
	private String mycontent;
	private Date mydate;
    //5개를 필드에 선언해준다.
    //그후, 기본생성자와 매개변수 생성자, getter와 setter를 만들어 준다.

8. com.mvc.upgrade.model.dao에 BoardDao를 Interface로 만든다.

public interface BoardDao {
	
	String NAMESPACE = "myboard.";
	
	public List<BoardDto> selectList();
	public BoardDto selectOne(int myno);
	public int insert(BoardDto dto);
	public int update(BoardDto dto);
	public int delete(int myno);
}

9. com.mvc.upgrade.model.dao에 BoardDaoImpl만든다.BoardDao를 implements 해준다. 그 후, overide 

(sqlSessionTemplate의 빨간줄이 싫다면 15번~19번 설정을 먼저 진행)

@Repository
public class BoardDaoImpl implements BoardDao{

	//mybatis사용할 것이다. 그러기 위해서 아래 것을 작성
	@Autowired
	private SqlSessionTemplate sqlSession;
	
	@Override
	public List<BoardDto> selectList() {
		List<BoardDto> list = new ArrayList<BoardDto>();
		try {
			list = sqlSession.selectList(NAMESPACE+"selectList");
		} catch (Exception e) {
			System.out.println("[error] : select list");
			e.printStackTrace();
		}
		
		
		return list;
	}
  //  이하 생략
}

10. com.mvc.upgrade.model.biz에 interface로 BoardBiz 생성

public interface BoardBiz {
	public List<BoardDto> selectList();
	public BoardDto selectOne(int myno);
	public int insert(BoardDto dto);
	public int update(BoardDto dto);
	public int delete(int myno);
}

11. com.mvc.upgrade.model.biz에 BoardBizImpl 생성

@Service
public class BoardBizImpl implements BoardBiz{

	//BoardDao 타입의 dao있으면 주입!!
	@Autowired
	private BoardDao dao;
	
	@Override
	public List<BoardDto> selectList() {
		
		return dao.selectList();
	}
    //이하 생략
   }

12. HomeController.java 

@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	@Autowired
	private BoardBiz biz;
							//수정 부분
	@RequestMapping(value = "/home.do", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	//추가부분
	@RequestMapping("/list.do")
	public String list(Model model) {
		logger.info("SELECT LIST");
		model.addAttribute("list",biz.selectList());
		//mvclist.jsp로 보내겠다.
		return "mvclist";
	}
}

13. webapp 아래에 index.html 만들기

14. views 아래에 mvclist.jsp만들기

15. src->main->resource아래에 mybatis 폴더 생성 후 board-mapper.xml, db.properties 생성

 

https://mybatis.org/mybatis-3/ko/getting-started.html

 

MyBatis – 마이바티스 3 | 시작하기

XML에서 SqlSessionFactory 빌드하기 모든 마이바티스 애플리케이션은 SqlSessionFactory 인스턴스를 사용한다. SqlSessionFactory인스턴스는 SqlSessionFactoryBuilder를 사용하여 만들수 있다. SqlSessionFactoryBuilder는 XM

mybatis.org

출처: https://mybatis.org/mybatis-3/ko/getting-started.html

 

16. 이곳에서 빨간 네모 부분을 복사해서 board-mapper.xml에 붙여준다.

<?xml version="1.0" encoding="UTF-8"?>

<!--MyBatis site 복사부분  -->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--MyBatis site 복사부분  끝-->
  <mapper namespace="myboard">
  
  	<resultMap type="boardDto" id="boardMap">
  	<!--MYNO를 myno에 넣어준다  -->
  		<result property="myno" column="MYNO"/>
  		<result property="myname" column="MYNAME"/>
  		<result property="mytitle" column="MYTITLE"/>
  		<result property="mycontent" column="MYCONTENT"/>
  		<result property="mydate" column="MYDATE"/>

  	</resultMap>
  	
  	<!-- sql 결과를 boardMap에 담아주겠다.  -->
  	<select id="selectList" resultMap="boardMap">
  		SELECT MYNO, MYNAME, MYTITLE, MYCONTENT, MYDATE
  		FROM MYBOARD
  		ORDER BY MYNO DESC
  	
  	</select>
  
  </mapper>

17. sqls폴더 아래 config.xml 만들어 줍니다. 

출처: https://mybatis.org/mybatis-3/ko/getting-started.html

그 후,의 빨간 네모 부분을 복사해서 붙여 넣기 해 줍니다.

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  
    
  <configuration>
  	<typeAliases>
  		<typeAlias type="com.mvc.upgrade.model.dto.BoardDto" alias="boardDto"/>
  	</typeAliases>
  	
  	<!--resource: src/main/resources와 연결되어 있다.  -->
  	<mappers>
  		<mapper resource="/mybatis/board-mapper.xml"/>
  	</mappers>
  </configuration>

 

18. db.properties에 내용 작성

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=자신의아이디
password=자신의비빌번호

18. servlet-context.xml 작성

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<!-- 이 부분을 통해서 view의 주소를 간략하게 작성할 수 있게 된다. -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="com.mvc.upgrade" />
	
	<!-- 기존에 작성되어 있는 부분이 대부분이기 때문에 필요한 부분만 수정해 준다. -->

19. applicationContext.xml 작성

<!-- db.properties db관련 내용을 처리해 줄 것이다. -->
		<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
			<property name="locations">
				<list>
					<!-- 앞에 주소가 더 있지만, 일일이 적지 않고 classpath로 미리 작성되어져 있다. -->
					<value>classpath:mybatis/db.properties</value>
				</list>
			</property>
		</bean>
		
		<!-- dataSorce   // db.properties에 적어준 data를 처리해 준다.-->
		<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
			<property name="driverClassName" value="${driver}"></property>
			<property name="url" value="${url}"></property>
			<property name="username"  value="${username}"></property>
			<property name="password"  value="${password}"></property>
		</bean>
		
		<!-- mybatis -->
		<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
			<property name="dataSource" ref="dataSource"></property>
			<property name="configLocation" value="WEB-INF/spring/sqls/config.xml"></property>
		</bean>
		
		<!-- mybatis-template   //BoardDaoImpl의 selectList에 언급했던 부분과 관련된 부분이다 -->
		<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
			<constructor-arg ref="sqlSession"></constructor-arg>
		</bean>

20.index.html에서 실행을 해보자.

반응형