Spring-naver-book 웹 프로젝트 생성
스프링 MVC필요 라이브러리 세팅
xml parser 디펜던시 세팅
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 | <dependencies> <dependency> <groupId>net.sf.sociaal</groupId> <artifactId>xmlpull-xpp3</artifactId> <version>3.0.0.20130526</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.1.6.RELEASE</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> | cs |
web.xml에 dispatcher-servlet 등록
컨텍스트 로더 리스너 등록
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 | <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> | cs |
루트컨테이너가 사용할 설정파일 생성
dipatcher-servlet이 사용할 설정파일 생성
1 2 | <context:component-scan base-package="service"></context:component-scan> <!-- 루트 컨테이너에서 service패키지 빈 등록 --> | cs |
1 2 3 4 5 6 7 | <context:component-scan base-package="controller"></context:component-scan> <!-- 서블릿 컨테이너에는 controller패키지 빈 등록 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> | cs |
bookList.do
keyword파라미터가 있는 경우, 해당 키워드에 속하는 책 데이터를 10개를 가져와서 출력
page파라미터가 있는 경우 해당 페이지의 10개
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @Controller public class BookController { @Autowired private NaverBookService service; @RequestMapping("bookList.do") //키워드가 없을 때도 있음,,, public ModelAndView bookList(@RequestParam(required=false) String keyword){ ModelAndView mav = new ModelAndView(); if(keyword != null) { mav.addObject("bookList",service.searchBook(keyword, 10, 1)); } mav.setViewName("bookList"); return mav; } } | cs |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | package service; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import model.Book; @Service public class NaverBookService { private static String clientID = "클라이언트 아이디"; private static String clientSecret = "클라이언트 시크릿"; public List<Book> searchBook(String keyword, int display, int start){ List<Book> list = null; //display = 보여지는 갯수 try { URL url; url = new URL("https://openapi.naver.com/v1/search/" + "book.xml?query=" + URLEncoder.encode(keyword, "UTF-8") + (display !=0 ? "&display=" +display :"") + (start !=0 ? "&start=" +start :"")); URLConnection urlConn = url.openConnection(); urlConn.setRequestProperty("X-Naver-Client-Id", clientID); urlConn.setRequestProperty("X-Naver-Client-Secret", clientSecret); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput( new InputStreamReader(urlConn.getInputStream())); int eventType = parser.getEventType(); Book b = null; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.END_DOCUMENT: // 문서의 끝 break; case XmlPullParser.START_DOCUMENT: list = new ArrayList<Book>(); break; case XmlPullParser.END_TAG: { String tag = parser.getName(); if(tag.equals("item")) { list.add(b); b = null; } } case XmlPullParser.START_TAG: { String tag = parser.getName(); switch (tag) { case "item": b = new Book(); break; case "title": if(b != null) b.setTitle(parser.nextText()); break; case "link": if(b != null) b.setLink(parser.nextText()); break; case "image": if(b != null) b.setImage(parser.nextText()); break; case "author": if(b != null) b.setAuthor(parser.nextText()); break; case "price": if(b != null) b.setPrice(parser.nextText()); break; case "discount": if(b != null) b.setDiscount(parser.nextText()); break; case "publisher": if(b != null) b.setPublisher(parser.nextText()); break; case "pubdate": if(b != null) b.setPubdate(parser.nextText()); break; case "isbn": if(b != null) b.setIsbn(parser.nextText()); break; case "description": if(b != null) b.setDescription(parser.nextText()); break; } } } eventType = parser.next(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } } | cs |
' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글
Day70 페이징 처리 (0) | 2016.06.28 |
---|---|
Day69 API -jason (1) | 2016.06.27 |
Day67 네이버 API (0) | 2016.06.23 |
Day66 Spring-student // 스프링 인터셉터 (0) | 2016.06.22 |
Day65 Spring-student (0) | 2016.06.21 |