spring mvc 동작방식
Spring MVC 동작 방식
- web.xml의 등록된 DispatcherServlet를 통해서 요청에 대해 진입.
- DispatcherServlet은 Client로부터 들어온 URL을 HandlerMapping 라는 곳으로 전송
후 URL을 분석해서 알맞은 Controller 이름을 다시 DispatcherServlet으로 보냄.
- HandlerMapping이라는 것을 통해서 실행될 Controller의 이름을 입력받은
DispatcherServlet은 전달받은 Controller를 실행시킴. 이렇게 실행된 Controller는 스프링에
서 제공하는 ModelAndView 객체에 뷰 페이지에 전달할 객체와 View Page 이름 정보를 담
고 DispatcherServlet으로 보냄.
- ViewResolver를 통해 보여 질 View 페이지를 탐색한 후 View 페이지를 보여줌.
'WEB > 이론' 카테고리의 다른 글
마이바티스 사용이유 (0) | 2017.04.11 |
---|---|
jdbc와 마이바티스 (0) | 2017.03.21 |
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이. (0) | 2017.03.20 |
web.xml (0) | 2017.01.18 |
jdbc와 마이바티스
1.jdbc란?
자바 프로그램 내에서 데이터베이스 질의문 즉, SQL을 실행하기 위한 자바 API(application programming interface)이다.
다음은 프로젝트시 사용했던 jdbc예제이다.
1.java swing을 통해 구현했던 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package server; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.Date; public class DB_Main { public ArrayList<String> dbMain = new ArrayList<String>(); String sql; public DB_Main(String sql) { // TODO Auto-generated constructor stub try { this.sql = sql; //1. jdbc 드라이버를 메모리로 로드한다. Class.forName("oracle.jdbc.driver.OracleDriver"); //2. DB 서버에 연결 Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@192.168.43.34:1521:orcl", "hr", "hr" ); //3. sql 명령어 실행하기 위한 Statement 객체 생성 Statement stmt = con.createStatement(); //4. sql 명령어 실행(Statement를 통해서) //검색한 결과가 rs에 담겨져 있음 //ResultSet rs = stmt.executeQuery(SelectFrom.fromTable); ResultSet rs = stmt.executeQuery(sql); while(rs.next()) { if(sql.equals("select kind,id,name,pw,tel,address,birth from staff")) { String kind = (rs.getString("kind").equals("0") ? "관리자" : "직원" ); String id = rs.getString("id"); String name = rs.getString("name"); String pw = rs.getString("pw"); String tel = rs.getString("tel"); String ad = rs.getString("address"); String birth = rs.getString("birth"); dbMain.add(kind); dbMain.add(id); dbMain.add(name); dbMain.add(pw); dbMain.add(tel); dbMain.add(ad); dbMain.add(birth); } } rs.close(); stmt.close(); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
2. jsp와 연동한 예제 (DAO))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class BoardDAO { private Connection conn = DBConn.getConnection(); public int insertBoard(BoardDTO dto, String mode){ int result=0; PreparedStatement pstmt=null; String sql; String fields="num,userid,subject,content"; sql="INSERT INTO freeboard (" + fields + ") VALUES (?,?,?,?)"; try { pstmt = conn.prepareStatement(sql); int maxNum = maxBoardNum() + 1; pstmt.setInt(1, maxNum); pstmt.setString(2, dto.getUserId()); pstmt.setString(3, dto.getSubject()); pstmt.setString(4, dto.getContent()); result = pstmt.executeUpdate(); pstmt.close(); } catch (Exception e) { System.out.println(e.toString()); } return result; } |
db와 연동해 커넥션을 맺고 쿼리문을 날려 resultset을 받아오고, 그걸 rs.next()와 같은 방법을 통해 받아온다.
2.마이바티스
jdbc는 SQL의 변경이 발생할 경우 java파일 ,즉 프로그램 소스를 수정하기 때문에 유연성이 좋지 못했는데, 마이바티스 에서는 SQL을 xml 파일에 작성하기 때문에, SQL의 변환이 자유롭고, 가독성이 좋다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function check() { var f = document.boardForm; var str = f.subject.value; if(!str) { f.subject.focus(); return false; } str = f.content.value; if(!str) { f.content.focus(); return false; } var mode="${mode}"; if(mode=="created") f.action="<%=cp%>/bbs/created"; else if(mode=="update") f.action="<%=cp%>/bbs/update"; return true; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //글쓰기 POST// @RequestMapping(value="/bbs/created", method=RequestMethod.POST) public String createdSubmit( Board dto, HttpSession session ) throws Exception { SessionInfo info = (SessionInfo)session.getAttribute("staff"); if(info==null){ return "redirect:/"; } dto.setS_num(info.getS_num()); service.insertBoard(dto); return "redirect:/bbs/list"; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @Service("bbs.boardService") public class BoardServiceImpl implements BoardService { @Autowired private CommonDAO dao; //글쓰기. @Override public int insertBoard(Board dto) { int result = 0; try { result = dao.insertData("bbs.insertBoard", dto); } catch (Exception e) { System.out.println(e.toString()); } return result; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public int insertData(String id, Object value) throws Exception { int result = 0; try { result = sqlSession.insert(id, value); } catch (Exception e) { System.out.println(e.toString()); throw e; } finally { } return result; } |
5.맵퍼.xml
1 2 3 4 5 6 7 8 9 10 | <mapper namespace="bbs"> <!-- 글쓰기 --> <insert id="insertBoard" parameterType="com.sp.bbs.Board"> INSERT INTO bbs ( num,s_num,subject,content) VALUES( bbs_seq.NEXTVAL, #{s_num}, #{subject}, #{content}) </insert> |
'WEB > 이론' 카테고리의 다른 글
마이바티스 사용이유 (0) | 2017.04.11 |
---|---|
spring mvc 동작방식 (0) | 2017.03.22 |
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이. (0) | 2017.03.20 |
web.xml (0) | 2017.01.18 |
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이.
MVC 란 Model View Controller를 가리킨다.
사용자 인터페이스와 비즈니스 로직을 분리하여 웹개발을 하는 것이 목적
즉,
모델은 애플리케이션의 정보, 데이터를 나타내며
뷰는 사용자에게 보여주는 인터페이스.
컨트롤러는 비즈니스 로직과 모델의 상호동작을 조정하는 역할을 한다.
mvc1 패턴과 2패턴의 차이점으로는 mvc1 패턴의 경우에는 비즈니스로직과 디자인로직이 함께 있지만
mvc2패턴은 서블릿이 컨트롤러 역할을 수행한다.
사진 출처 : http://blog.daum.net/gunsu0j/165
1.요청 - 클라이언트 -----> 컨트롤러(서블릿 or jsp) --[dto] --> 서비스 --[dto]--> DAO --> DB
2.응답 - DB --> DAO --[dto]-> 서비스 --[dto]-->컨트롤러(서블릿 or j) --> view -------> 클라이언트
클라이언트는 컨트롤러로 요청을 한다. 컨트롤러는 dto라는 껍데기를 태워 비즈니스계층인 서비스단으로 보낸다.
서비스단에서 퍼시스턴스 계층으로 명령을 해 DB와 연동한다.
그렇게 가져온 값을 JSP 뷰단으로 가져온 뒤 클라이언트 (HTML)로 보내준다.
'WEB > 이론' 카테고리의 다른 글
마이바티스 사용이유 (0) | 2017.04.11 |
---|---|
spring mvc 동작방식 (0) | 2017.03.22 |
jdbc와 마이바티스 (0) | 2017.03.21 |
web.xml (0) | 2017.01.18 |