220428 Spring-6 MVC 구현1 환경설정, 작성
** 스프링 실습 - 직접 MVC Pattern 구현
* 계정 생성, 테이블 생성, 프로젝트 생성, xml, java 파일들 제 위치에 만들어놓기 생략 ※ 참고: STS 내에 기본적으로 data source management가 내장되어있지 않으므로 STS에서 sql 계정 연결해서 테이블을 만들거나 할 거라면 플러그인을 추가해서 사용해야 함 ---> STS에 추가하기 : [Help]-Install New Software...-Add...-Add Repository에서 Name: DTP (임의의 값) Location : http://download.eclipse.org/releases/neon -> Eclipse Data Tools 체크 후 Next - 또 Next-약관 동의 후 Finish - 뭐 체크하고 동의하라는거 다 하기 - Restart하면 플러그인 추가 완.
-----------------------------이거 오류난댄다 그냥 하지 말자!!
환경설정 순서
pom
web
servlet-context
configuration
mapper.xml
root-context
* xml 설정
- pom.xml 라이브러리는 예제에서 고대로 가져와서 위치랑 java 버전만 변경해주면 되고
- web.xml
: 한글 인코딩 코드 추가, servlet-mapping의 url-pattern을 *.do로 수정
※ *.do로 수정할 때 주의점! index.jsp 파일을 만들어 .do로 controller 클래스로 보내고 -> home.jsp 까지 가는 경로를 잡아줘야 제대로 맵핑이 됐는지 확인해볼 수 있음. 그냥 하면 controller로 넘어가지 못해서 오류가 난다
-> index.jsp : location.href="test.do";
-> HomeController.java : @RequestMapping(value = "/test.do")
-servlet-context.xml
: ViewResolver의 prefix, suffix 확인 --- 그대로 두면 됨
: ★ base-package 경로 수정하기 위해 main-java에 myspring 패키지 생성 후 내부에 controller, service, dao, model 패키지와 HomeController파일을 여기 옮긴 뒤 기존 com.~은 삭제
그리고 경로를 myspring으로 변경한 뒤 index.jsp 실행해보고 잘 실행되면 성공!
<context:component-scan base-package="myspring" />
└> java-myspring 패키지에 각 class 파일을 하나씩 생성
1 BoardController.java : Class 위에 @Controller 붙이고 import + @Autowired로 Service 객체 주입
2 BoardService.java : Class 위에 @Service 붙이고 import + @Autowired로 dao 객체 주입
3 BoardDao.java : Class 위에 @Repository 붙이고 import + @Autowired로 sqlSession 객체 주입
--------> ★★단, sqlSession는 먼저 root-context.xml에서 sqlSession Bean 객체를 만들어둬야 함!
4 Board.java (DTO) 생성 : table 컬럼명 그대로 가져와 생성, Date Class는 java.util.패키지여야 함!
- main-resources-util-contiguration.xml ---> mybatis환경설정파일 - alias 지정
<typeAlias alias="model" type="myspring.model.board" />
-sql-board.xml (mapper.xml) ---> sql문 저장할 맵퍼파일
<select><insert><update><delete> 필요한것들 그때그때 추가
-root-context.xml ★ 얘는 엮인게 많아서 마지막에 설정해줘야 함! --- DB 연결
1 datatSource 2 sqlSessionFactory 객체 생성 3 sqlSession 객체 생성
http://www.springframework.org/schema/beans"</beans xmlns=" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- Data Source --> <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="spring" /> <property name="password" value="spring123" /> </bean> <!-- 스프링 jdbc 즉 스프링으로 oracle 디비 연결 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:util/configuration.xml" /> <property name="mapperLocations" value="classpath:sql/*.xml" /> </bean> <bean id="session" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> </beans> ===> 경로 주의! oracle 계정도... classpath:util/configuration.xml 이거 디렉토리 안써서 오류남.. |
* 글 작성
index.jsp -> controller.java -> boardform.jsp -> 글 작성 후 action="boardwrite.do"
-> controller -> service -> dao -> mapper (insert 실행) -> dao -> service -> controller ->boardwrite.jsp (view)
- BoardController.java
@RequestMapping("/boardwrite.do")
public String boardwrite(Board board, Model model) { //form에서 받은 값 dto에 넣고 model로 공유
int result=service.insert(board); //dto에 들어간 form 입력값을 service로
System.out.println("result= "+result); //받은 값 확인
model.addAttribute("result", result); //result 값을 model 객체로 공유
return "board/insertresult"; //result값 가지고 insertresult.jsp로
}
-board.xml
<insert id="insert" parameterType="board">
insert into myboard values(myboard_seq.nextval, #{writer}, #{passwd},#{subject},#{content}, 0,sysdate)
</insert>
※ 내가 궁금한 건 model2에서는 service 클래스에서 했던 역할을 여기선 Controller에서 하고 있는데 그럼 service는 왜...? ---> 답변 받았는데 정말로 controller랑 dao 사이를 연결하는 역할만 한다고.. 한다! 그럼 대체 왜 사용하는..? 좀더 배우다보면 알 수 있을까...