A simple Java toolkit for JSON 
Tags: json

프로젝트 생성후 메이븐 설정,  디펜던시 등록

1
2
3
4
5
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>
cs

파싱을 위한 json-simple 등록,,,




Apache HttpComponents Client

1
2
3
4
5
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.1</version>
</dependency>
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
import java.io.IOException;
import java.net.URI;
import java.util.Date;
 
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
 
public class Test {
    public static void main(String[] args) throws Exception {
        String key = "키값";
        String targetDt ="20160625";
        
        HttpClient client = new DefaultHttpClient();
        URI uri = new URIBuilder("http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json")
                .addParameter("key", key)        //일별 박스오피스 API 서비스//영화진흥위원회
                .addParameter("targetDt", targetDt)
                .build();
        HttpGet httpGet = new HttpGet(uri);
        HttpResponse resp = client.execute(httpGet);
        String result = EntityUtils.toString(resp.getEntity(), "UTF-8");
//        System.out.println(result);
        
        JSONParser parser = new JSONParser();
        JSONObject jsonObject = (JSONObject) parser.parse(result);
        JSONObject jsonObject2 = (JSONObject) jsonObject.get("boxOfficeResult");
        JSONArray jsonArray = (JSONArray) jsonObject2.get("dailyBoxOfficeList");
        
        System.out.println("영화순위 "+targetDt);
        System.out.println();
        for(int n=0; n<11; n++){
            JSONObject jsonObject3 = (JSONObject) jsonArray.get(n);
            System.out.println(n+1);
            System.out.println(jsonObject3.get("movieNm"));
        }
    }
}
 
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
영화순위 20160625
 
1
인디펜던스 데이 : 리써전스
2
정글북
3
특별수사: 사형수의 편지
4
컨저링 2
5
아가씨
6
비밀은 없다
7
미 비포 유
8
크리미널
9
워크래프트: 전쟁의 서막
10
곡성

결과값!r


' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day72 스프링 게시판  (0) 2016.06.30
Day70 페이징 처리  (0) 2016.06.28
Day68 네이버 API - 책검색  (0) 2016.06.24
Day67 네이버 API  (0) 2016.06.23
Day66 Spring-student // 스프링 인터셉터  (0) 2016.06.22

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=falseString keyword){
        ModelAndView mav = new ModelAndView();
                
        if(keyword != null)
        {
            mav.addObject("bookList",service.searchBook(keyword, 101));
        }
        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

크롤링

웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위. 크롤링(Crawling) 혹은 스크래이핑(Scraping) 이라고도 한다.



REST

엄격한 의미로 REST는 네트워크 아키텍처 원리의 모음이다. 여기서 '네트워크 아키텍처 원리'란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다. 간단한 의미로는, 웹 상의 자료를 HTTP위에서 SOAP이나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다. 이 두 가지의 의미는 겹치는 부분과 충돌되는 부분이 있다. 필딩의 REST 아키텍처 형식을 따르면 HTTP나 WWW이 아닌 아주 커다란 소프트웨어 시스템을 설계하는 것도 가능하다. 또한, 리모트 프로시저 콜 대신에 간단한 XML과 HTTP 인터페이스를 이용해 설계하는 것도 가능하다.




XML이란?

트리구조의 데이터를 단순히 텍스트 형태로 나타낸 것

<?xml version="1.0"?>
<포켓몬>
<이름>피카츄</이름>
<속성>전기</속성>
<나이>3</나이>
<성별>수컷</성별>
<등록 번호>Pikachu01</등록 번호>
<소유자>사토시</소유자>
</포켓몬>

위 예시처럼 <태그> </태그> 구조로 자유롭게 만들 수 있다.

XML은 범용성 & 확장성을 가지기에 환경설정이나 데이터 전달포멧으로 쓰이는 것을 많이 볼 수 있다.

장점 : 유연하게 쓰임 (이기종간 데이터전달 등) , 네임스페이스+문서검증기능?

단점 : 가독성 쓰레기, 파싱 어려움, 처리속도 느림;; 

=> 웬만하면 json을 쓰는게 좋다.


XML파싱


DOM (Document Object Model) : 메모리에 모두 로드 후 파싱,, 빠르고 용이함.

SAX (Simple API for XML) : 순차적으로 읽어가며 파싱하는 것,, 메모리 사용량이 적음. 기능 제한 많음


책 검색 api의 url에 적절한 파라미터를 세팅해 요청을 보내고 xml형식으로 돌아오는 응답을 잘 읽어서 원하는 정보를 추출자바코드로 어떻게 url에 요청을 보내고 응답을 읽을 수 있는지 xml문서에서 원하는 값을 어떻게 획득할 수 있는지

네이버 API


프로젝트 생성

1
2
3
4
5
<dependency>
            <groupId>net.sf.sociaal</groupId>
            <artifactId>xmlpull-xpp3</artifactId>
            <version>3.0.0.20130526</version>
</dependency>
cs

1
2
3
4
5
6
7
8
9
10
11
public class Book {
    private String title;
    private String link;
    private String image;
    private String author;
    private String price;
    private String discount;
    private String publisher;
    private String pubdate;
    private String isbn;
    private String description;

 모델클래스 만들기// +게터,세터,

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
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
 
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
 
import model.Book;
 
public class Test {
   public static void main(String[] args) throws Exception {
      // 자바코드로 특정 url에 요청보내고 응답받기
      // 기본 자바 API를 활용한 방법
      // vs
      // 외부 라이브러리를 활용한 방법
 
      String clientID = "클라이언트아이디";
      String clientSecret = "클라이언트시크릿";
      URL url = new URL("https://openapi.naver.com/v1/search/book.xml?query=" + URLEncoder.encode("책제목""UTF-8"));
 
      URLConnection urlConn = url.openConnection();
 
      urlConn.setRequestProperty("X-Naver-Client-Id", clientID);
      urlConn.setRequestProperty("X-Naver-Client-Secret", clientSecret);
 
      BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
 
      String data = "";
      String msg = null;
      while ((msg = br.readLine()) != null) {
         // System.out.println(msg);
         data += msg;
      }
      List<Book> list = null;
      // System.out.println(data);
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
      XmlPullParser parser = factory.newPullParser();
      String sTag;
      parser.setInput(new StringReader(data));
      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;
            }
            break;
         }
         
         }
         eventType = parser.next();
      }
      for(Book book : list)
         System.out.println(book);
   }
}
cs





http://humble.tistory.com/23 

http://fromleaf.tistory.com/150

참조 사이트


' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day69 API -jason  (1) 2016.06.27
Day68 네이버 API - 책검색  (0) 2016.06.24
Day66 Spring-student // 스프링 인터셉터  (0) 2016.06.22
Day65 Spring-student  (0) 2016.06.21
Day64  (0) 2016.06.20

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
package model;
 
public class Student {
    private int id;
    private String name;
    private int grade;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getGrade() {
        return grade;
    }
    public void setGrade(int grade) {
        this.grade = grade;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", grade=" + grade + "]";
    }
    
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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="dao.IStudentDao">
    <select id="selectAll" resultType="student">
        select * from student
    </select>
    <select id="selectOne" parameterType="int" resultType="student">
        select * from student where id=#{id}
    </select>
    <insert id="insertStudent" parameterType="student">
        insert into student values (#{id}, #{name}, #{grade})
    </insert>
    <update id="updateStudent" parameterType="student">
        update student set name=#{name}, grade=#{grade} where id=#{id}
    </update>
    <delete id="deleteStudent" parameterType="int">
        delete from student where id=#{id}
    </delete>
</mapper>

cs* 필요한 쿼리 작성    



1
2
3
4
5
6
7
8
9
10
11
12
13
14
package dao;
 
import java.util.List;
 
import model.Student;
 
public interface IStudentDao {
    public List<Student> selectAll();
    public void insertStudent(Student student);
    public void updateStudent(Student student);
    public void deleteStudent(int id);
    public Student selectOne(int id);
}
 

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
package service;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import dao.IStudentDao;
import model.Student;
 
@Service
public class StudentService {
    @Autowired
    private IStudentDao sDao;
    
    public List<Student> getStudentList(){
        return sDao.selectAll();
    }
    public void addStudent(Student student){
        sDao.insertStudent(student);
    }
    public void modifyStudent(Student student){
        sDao.updateStudent(student);
    }
    public void deleteStudent(int id){
        sDao.deleteStudent(id);
    }
    public void getStudentOne(int id){
        sDao.selectOne(id);
    }
}
 
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
package controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
 
import model.Student;
import service.StudentService;
 
@Controller
public class StudentController {
 
    @Autowired
    private StudentService service;
    
    //studentList.do : 학생 리스트 보여주는 페이지를 요청
    @RequestMapping("studentList.do")
    public String studentList(Model model){
        model.addAttribute("studentList", service.getStudentList());
        return "studentList";
    }
    
//    - deleteStudent.do : 파라미터로 넘어온 학생을 삭제해주는 요청 -> 요청 처리 후 studentList.do로 리다이렉트
    @RequestMapping("deleteStudent.do")
    public String deleteStudent(int id){
        service.deleteStudent(id);
        return "redirect:studentList.do";
    }
    
//    - addStudentForm.do : 학생 추가 페이지를 요청
    @RequestMapping("addStudentForm.do")
    public String addStudentForm(){
        return "addStudentForm";
    }
    
//    - addStudent.do : 학생 추가 작업을 처리 요청 -> 요청 처리 후 studentList.do로 리다이렉트
    @RequestMapping("addStudent.do")
    public String addStudent(Student student){
        //Student클래스 참조변수를 매개변수에 두면 요청이 들어올때, 
        //Student객체를 만들어서 파라미터 이름과 Student의 멤버변수(세터)와 이름이 같으면 해당 객체의 멤버변수에 값을 넣어줌
        service.addStudent(student);
        return "redirect:studentList.do";
    }
    
//    - modifyStudentForm.do : 학생 수정페이지를 요청
    @RequestMapping("modifyStudentForm.do")
    public void modifyStudnetForm(){
        //반환유형 void이면 받은 요청에서 .do 뗀 문자열이 view네임으로 지정됨
    }
 
//    - modifyStudent.do : 학생 수정 작업을 처리 요청
    @RequestMapping("modifyStudent.do")
    public String modifyStudent(Student student){
        service.modifyStudent(student);
        return "redirect:studentList.do";
    }
    
}
 
cs


 테스트 해보기

applicationContext 복사후

1
2
3
4
5
6
public class Test {
    public static void main(String[] args) {
     ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
    }
 
}
cs

콘솔에 에러뜨나 확인 후 서버 돌려보기,  에러 유무 확인




스프링 인터셉터 : 요청이 컨트롤러에 전달되기 전에 해야될 작업을 수행

      

              HandlerInterceptorAdapter를 상속 받음으로써 구현 가능

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//    @Override    //요청이 컨트롤러에서 처리 완료 후 수행할 작업
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
//            ModelAndView modelAndView) throws Exception {
//        
//    }
    @Override    //요청이 컨트롤러에 전달되기전에 수행할 작업
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        HttpSession session = request.getSession();
        String userid = (String)session.getAttribute("userid");
        if(userid == null){
            response.sendRedirect("loginForm.do");
            return false;
        }
        return true;
    }
cs


빈으로 등록 

1
2
@Component //빈으로 등록
public class LoginCheckInterceptor extends HandlerInterceptorAdapter{
cs

어떤 요청 url에 대해서 인터셉터가 동작할지 설정

네임스페이스 MVC 체크  

1
2
3
4
5
6
7
8
9
10
    <mvc:interceptors>
        <mvc:interceptor>
<!--                 와일드 카드도 되고 , 여러개 중복 등록도 된다. -->
            <mvc:mapping path="/main.do"/>
            <mvc:mapping path="/memberUpdateForm.do"/>
            <ref bean="loginCheckInterceptor"></ref>
<!--             interceptor객체가 이미 빈으로 등록되 있는 경우 bean속성에 등록된 bean id를 적어주고 -->
<!--             등록과 동시에 인터셉터 설정을 하려면 <bean class="인터셉터 클래스 풀패키지명"></bean> -->
        </mvc:interceptor>
    </mvc:interceptors>
cs


Log4j

Log4j는 자바기반의 로깅 유틸리티로,  Apache에서 만든 오픈소스 라이브러리다. (slf4j도 많이 쓰임)

 요소

 설명

Logger

 출력할 메시지를 Appender에 전달한다.

Appender

 전달된 로그를 어디에 출력할 지 결정한다. (콘솔 출력, 파일 기록, DB 저장 등)

Layout

 로그를 어떤 형식으로 출력할 지 결정한다.


Log4j는 다음과 같은 로그 레벨을 가진다.


로그 레벨

설명 

FATAL

 아주 심각한 에러가 발생한 상태를 나타낸다. 

ERROR

 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다. 

 WARN

 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될수 있는 경고성 메시  지를 나타낸다.

 INFO

 어떠한 상태변경과 같은 정보성 메시지를 나타낸다. 

 DEBUG

 개발시 디버그 용도로 사용하는 메시지를 나타낸다. 

 TRACE

 디버그 레벨이 너무 광범위한것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다.


' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day68 네이버 API - 책검색  (0) 2016.06.24
Day67 네이버 API  (0) 2016.06.23
Day65 Spring-student  (0) 2016.06.21
Day64  (0) 2016.06.20
Day63 Spring-member  (0) 2016.06.17

학생 정보 관리 웹


필요한 페이지

모든 학생 리스트를 보여주는 페이지

학생정보를 입력해서 학생을 데이터베이스에 추가할 수 있는 페이지

학생정보중 일부를 변경해서 데이터베이스 정보를 수정할 수 있는 페이지


필요 요청

- studentList.do : 학생리스트 보여주는 페이지를 요청

- deleteStudent.do : 파라미터로 넘어온 학생을 삭제해주는 요청 -> 요청 처리 후 studentList.do로 리다이렉트

- addStudentForm.do : 학생 추가 페이지를 요청

- addStudent.do : 학생 추가 작업을 처리 요청 -> 요청 처리 후 studentList.do로 리다이렉트

- modifyStudentForm.do : 학생 수정페이지를 요청

- modifyStudent.do : 학생 수정 작업을 처리 요청


필요 기능

- 학생 리스트 데이터를 얻어오는 기능

- 학생 데이터 한개를 지우는 기능

- 학생 데이터 한개를 추가하는 기능

- 학생 데이터 한개를 수정하는 기능


필요 데이터베이스 쿼리

- 학생 리스트 조회 쿼리

- 학생 레코드 추가 쿼리   insert into student values ~~~~

- 학생 레코드 삭제 쿼리

- 학생 레코드 수정 쿼리



1. web 프로젝트 생성 (web.xml 체크) // maven 설정

2. 디펜던시 설정

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
<dependencies>
        <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>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
cs


 * web.xml에 dispatcherServlet 등록과 루트 컨테이너를 위한 리스너등록, 

   한글처리를 위한 필터등록 <- 스프링 MVC한글처리하기

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
<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>    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    
    <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


* 등록한 dispatch 서블릿이 사용할 스프링 컨테이너 설정파일 생성,

contextLoaderListener에 의해 생성될 루트컨테이너가 사용할 스프링 컨테이너 설정파일 생성


* 구조생성


* controller구현 클래스가 있는 controller패키지 컴포넌트 스캔

HandlerMapping, ViewResolver중에 필요한객체들 빈으로 등록

 Namespaces - context 체크

1
2
3
4
5
<context:component-scan base-package="controller"></context:component-scan>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>



* dataSource 빈 등록, sqlSessionFactory 빈 등록, IstudentDao 인터페이스를 MapperFactoryBean을 통해 매퍼 객체 빈 등록

service 구현클래스가 있는 service패키지 component-scan


 Namespaces - context 체크

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<context:component-scan base-package="service"></context:component-scan>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost/데이터베이스이름"></property>
        <property name="username" value="아이디"></property>
        <property name="password" value="비밀번호"></property>
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mapperLocations" value="classpath*:dao/mapper/**/*.xml"></property>
     
<property name="typeAliasesPackage" value="model"></property>


    </bean>
    <bean id="studentDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
        <property name="mapperInterface" value="dao.IStudentDao"></property>
    </bean>

cs





' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day67 네이버 API  (0) 2016.06.23
Day66 Spring-student // 스프링 인터셉터  (0) 2016.06.22
Day64  (0) 2016.06.20
Day63 Spring-member  (0) 2016.06.17
Day62 Spring MVC  (0) 2016.06.16
회원관리 시스템 구축


화면 구성

- 로그인페이지 : 아이디와 비번을 입력하고 로그인 요청을 할 수 있음

- 메인페이지 : 로그인한 사용자의 정보를 출력, 이 페이지에서 로그아웃 요청과 모든회원보기페이지요청, 회원수정페이지 요청을 할 수 있음

- 회원가입페이지 : 회원정보를 입력하고 가입신청을 할 수 있음

- 모든회원정보보기페이지 : 모든 회원들의 정보를 열람할 수 있음

- 회원수정페이지 : 현재 로그인한 회원의 정보를 수정할 수 있음


사용자가 보낼 수 있는 요청들

- main.do : 메인페이지를 달라는 요청

- loginForm.do : 로그인 페이지를 달라는 요청

- login.do : 로그인처리를 해달라는 요청(id, pw가 파라미터)

- logout.do : 로그아웃해달라는 요청

- joinForm.do : 회원가입페이지를 달라는 요청

 - join.do : 회원가입 처리를 해달라는 요청 ( 회원정보들이 파라미터)

- memberUpdateFrom.do : 회원 수정 폼을 달라는 요청

- memberUpdate.do : 회원 수정 처리를 해달라는 요청

- memberList.do : 모든 회원보기 페이지를 달라는 요청


요청들을 처리하기 위해 필요한 로직(기능)

- 아이디를 받아 사용자의 정보를 디비에서 가져오는 기능

- id와 pw를 받아서 로그인 여부를 판단해주는 기능

- 회원정보 집합을 받아서 회원가입을 시켜주는 기능

- 회원정보 집합을 받아서 회원정보를 수정해주는 기능

- 모든 회원의 정보를 조회하는 기능


// Spring MVC컨트롤러에서 사용할 수 있는 반환유형 종류


// 데이터와 페이지의 정보가 둘다 있는 경우

// - ModelAndView


// 데이터에 대한 정보만 있는 경우

// - Model or Map


// 페이지에 대한 정보만 있는 경우

// - String

@RequestMapping("loginForm.do")

public String loginForm(){

return "loginForm";

}


// 둘다 없는 경우

// - void

@RequestMapping("joinfrom.do")

public void joinForm(){                       public String join(@RequestParam("id") String uid){ //id라는 파라미터의 값을 uid매개변수에 넣어줌

//응답합 페이지에 대한 정보가 없는 경우는 받은 요청 url에서 .이하를 제외한 문자열을 페이지 정보로 사용함

//joinForm.do ->joinForm

//이 요청이 들어오면 처리하는 함수가 void이므로 뷰에 대한 정보가 없음, 그러닌까 받은 요청인 joinForm.do에서

//. 이하 떼내고 joinForm이 뷰의 이름

}

   //매겨변수 받아내기!

//join.do는 회원정보 데이터들을 파라미터로 받아서

//디비에 저장해주는 기능



' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day66 Spring-student // 스프링 인터셉터  (0) 2016.06.22
Day65 Spring-student  (0) 2016.06.21
Day63 Spring-member  (0) 2016.06.17
Day62 Spring MVC  (0) 2016.06.16
Day61  (0) 2016.06.15

 


   디펜던시 설정        
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
    <dependencies>
        <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>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>
</project>
cs


◎ web.xml에 dispatchServlet을 서블릿으로 등록 *.do에 대해서 처리하도록 서블릿매핑 설정

◎ dispatcherServlet이 사용할 스프링 설정하일 생성

◎ controller패키지에 대해서 컴포넌트 스캔

◎ internalResouceViewResolver등록(prefix는 jsp파을들을 모아놓을 폴더경로, suffix는 jsp파일들의 확장자로)


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
<?xml version="1.0" encoding="UTF-8"?>

 
    <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>
 
</web-app>
cs


1
2
3
4
5
6
7
8
9
10
11
12
13


    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>
 
cs


- 루트컨테이너 등록하고 사용하기

1. web.xml에 컨텍스트 로더 리스너를 등록

1
2
3
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListner</listener-class>
    </listener>
cs


2. /WEB-INF/applicationContext.xml이름으로 스프링 설정 파일 작성

1
2
3
4
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
cs


dataSource, sqlSessionFactory, mapperFactoryBean(Dao), service클래스들(컴포넌트스캔), 트랜잭션매니저

dispatcher-servlet.xml 서블릿 컨테이너 <- mvc구성요소들, 컨트롤러(컴포넌트스캔), 뷰리졸버,,,,


((((((( 리스너, 필터 참고 // http://wiki.gurubee.net/pages/viewpage.action?pageId=26740229  )))))

 web.xml에 ContextLoaderListener클래스를 리스너로 등록하면, 

/WEB-INF/applicationContext.xml을 설정파일로해서 스프링 컨테이너를 하나 빌드하고, 

1
    <context:component-scan base-package="service"></context:component-scan>
cs

해당컨테이너를 모든 서블릿 컨테이너가 공유할 수 있도록 세팅함 

- 컨트롤러에서 파라미터 받기

- 컨트롤러에서 request, session, response등 기본객체 사용하기

- 컨트롤러에서 ModelAndView외에 다양한 반환유형


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
package controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
import service.MemberService;
 
//서비스 주입받아서
//받은 리퀘스트를 처리하기에 필요한 서비스의 메소드를 호출해서 결과 획득
//결과 데이터랑 적절한 페이지 세팅해서 모덴앤뷰 리턴
 
@Controller
public class MemberController {
    @Autowired
    private MemberService service;
    
    @RequestMapping("test.do")
    public ModelAndView dummy(){
        ModelAndView mav = new ModelAndView();
        mav.addObject("msg",service.getData());
        mav.setViewName("test");
        return mav;
    }
    
}
//작성 후, service참조변수에 루트컨테이너에 등록되있는 MemberSerivce빈 객체를 주입
//test.do에서 서비스 객체의 getData함수호출의 결과를 싣고 test.jsp를 뷰 페이지로 지정
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package service;
 
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
 
@Service
public class MemberService {
    public String getData(){
        return "What the Hell!";
        
        //작성후 루트컨테이너에 빈으로 등록
    }
}
//@Component : 이 에노테이션이 달려있는 클래스는 컴포턴트 스캔에 의해서 빈으로 등록이 됨
// 그때의 빈의 아이디는 클래스 첫글자 소문자
 
//@Controller, @Service, @Repository
//->모두 @Component의 아들들, 그러므로 얘네들도 컴포넌트스캔에 의해 빈 등록 됨
cs





' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day65 Spring-student  (0) 2016.06.21
Day64  (0) 2016.06.20
Day62 Spring MVC  (0) 2016.06.16
Day61  (0) 2016.06.15
Day60 Spring-AOP  (0) 2016.06.14

• Spring MVC 구성 주요 컴포턴트

* DispatcherServlet 

- Front Controller : 모든 요청을 최초로 받아들이는 역할

* Controller (요청을 실제로 처리하는 역할)

- 클라이언트 요청 처리를 수행하는 Controller

* HandlerMapping  (어떤 요청 컨트롤러가 처리할지 결정)

- 클라이언트의 요청을 처리한 Controller를 찾는 작업 처리

* View

- 응답하는 로직을 처리

* ViewReslover

 - 응답할 View를 찾는 작업을 처리

* ModelAndView (응답에 사용할 데이터와 페이지 정보 집합)

- 응답할 View와 View에게 전달할 값을 저장하는 용도의 객체 



• 요청 처리 순서

①DispatcherServlet이 요청을 수신

• 단일 Front controller servlet

• 요청을 수신하여 처리를 다른 컴포넌트에 위임

• 어느 컨트롤러에 요청을 전송할지 결정


②DispatcherServlet은 HandlerMapping에 어느 컨트롤러를 사용할 것인지 문의


③DispatcherServlet은 요청을 컨트롤러에게 전송하고 컨트롤러는 요청을 처리한 후 결과 리턴

• 비즈니스 로직 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 뷰에서 사용됨


④ModelAndView를 생성하여 DispatcherServlet에 리턴


⑤ModelAndView 정보를 바탕으로 바탕으로ViewResolver 에게 View를 요청


⑥View는 결과정보를 사용하여 화면을 표현함.


1. DispatcherServlet을 web.xml에 서블릿으로 등록

2. DispatcherServlet이 사용할 스프링 설정파일을 생성

3. 2의 설정파일에 HandlerMapping, Controller, ViewResolver들을 빈(bean) 객체로 등록



pom.xml


<dependencies>

<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>

</dependencies>



dispatcher-servlet.xml

<bean id="handlerMappingclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />


<bean class="controller.WhatTimeController" name="/whatTime.do"></bean>



WhatTimeController.java


package controller;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;


public class WhatTimeController implements Controller{


@Override

public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {

// TODO Auto-generated method stub

String inTime  = new java.text.SimpleDateFormat("HHmmss").format(new java.util.Date());

ModelAndView mav = new ModelAndView();

mav.addObject("msg",inTime);

mav.setViewName("jsp/whatTime.jsp");

return mav;

}

}


web.xml

<servlet>

<servlet-name>dispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>



jsp/whatTime.jsp

<body>

${msg }<br>

현재시간이라능~~

</body>





ViewResolver


1. 디펜더시 등록


<dependencies>

<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>

</dependencies>



2. web.xml

<servlet>

<servlet-name>dispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>



3.dispatcher-servlet.xml

<context:component-scan base-package="controller"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>


4.controller/MyController.java

@Controller //@Component의 아들로써 빈으로 등록하게함

//Request를 받아 처리하는 컨트롤러로써 인식

public class MyController {

@RequestMapping("hello.do")

public ModelAndView hello(){

ModelAndView mav = new ModelAndView();

mav.addObject("msg","Hello World");

mav.setViewName("hello");

return mav;

}

@RequestMapping("whatTime.do")

public ModelAndView whatTime(){

ModelAndView mav = new ModelAndView();

mav.addObject("time",new Date());

mav.setViewName("whatTime");

return mav;

}

}



5. hello.jsp // whatTime.jsp 작성


<body>

${msg }

</body>


<body>

${time }

</body>






' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day64  (0) 2016.06.20
Day63 Spring-member  (0) 2016.06.17
Day61  (0) 2016.06.15
Day60 Spring-AOP  (0) 2016.06.14
Day59 Spring-AOP  (0) 2016.06.13

Ctrl + Shift + X 

소문자→대문자


package commons;


public class Constant {

 public static class Board{ 

 public static String NUM = "num"; 

 public static String NAME ="name"; 

 public static String PASS ="pass"; 

 public static String CONTENT ="content"; 

 public static String EMAIL ="email"; 

 public static String READCOUNT ="readCount"; 

 public static String WRITEDATE ="writedate"; } 


 public static class Member{ 

 public static String NAME = "name"; 

 public static String USERID = "userid"; 

 public static String PWD = "pwd"; 

 public static String EAMIL = "eamil";

 public static String PHONE = "phone"; 

 public static String ADMIN = "admin"; }

}



@Service

public class BoardService {

@Autowired

private IBoardDao boardDao;

public HashMap<String, Object> readBoard(int num){

HashMap<String, Object> board = boardDao.selectOne(num);

if(board.get("readCount") != null)

{

int readCount = (int)board.get(Constant.Board.READCOUNT);

// readCount++;

board.put(Constant.Board.READCOUNT, ++readCount);

boardDao.updateBoard(board);

}

return board;

}

public int writeBoard(HashMap<String, Object> params)

{

String content = (String) params.get(Constant.Board.READCOUNT);

content.replace("개*", "강아지");   //언어순화기능

return boardDao.insertBoard(params);

}


@Service

public class MemberService {

@Autowired

private IMemberDao memberDao;

@Autowired

private IBoardDao boardDao;


// 회원 가입 기능

//입력 : 회원테이블컬럼들 + 확인비번(PWD_CHECK) + 자기소개글(INTRO)

//출력 : 잘됨/안됨

// 회원정보와 확인비번, 자기소개글을 입력받아서 회원정보에 포함된 비번과 확인 비번이 같을경우

// 회원정보를 회원테이블에 입력하고, 제목은 {회원이름} 가입인사입니다.

// 내용은 자기소개글

// 작성자는 회원 아이디로 해서 게시글을 Board테이블에 입력

public int joinMember(HashMap<String, Object> params){

if(params.get(Constant.Member.PWD).equals(params.get("PWD_CHECK")))

{

HashMap<String, Object> boardParams = new HashMap<String, Object>();

String intro = (String) params.get("INTRO");

boardParams.put(Constant.Board.CONTENT, intro);

boardParams.put(Constant.Board.NAME, params.get(Constant.Member.USERID));

boardParams.put(Constant.Board.TITLE,params.get(Constant.Member.NAME)+"가입 인사");

boardDao.insertBoard(boardParams);

memberDao.insertMember(params);

return 1;

}

else

return 2;

}

' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day63 Spring-member  (0) 2016.06.17
Day62 Spring MVC  (0) 2016.06.16
Day60 Spring-AOP  (0) 2016.06.14
Day59 Spring-AOP  (0) 2016.06.13
Day58 AOP (Aspect Oriented Programming)  (0) 2016.06.10

annotation방식으로 aop 설정하기


1. 디펜더시 세팅

<dependencies>

<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-aop</artifactId>

<version>4.1.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>1.8.6</version>

</dependency>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.8.6</version>

</dependency>

</dependencies> 


2. annotation방식에서도 일단 등장인물들을 빈으로 등록부터

namespace : context, aop체크

<context:component-scan base-package="*"/>

+ <aop:aspectj-autoproxy></aop:aspectj-autoproxy>



@Component

@Aspect  <<<<< (pointcut + advice)의 정보를 입력


public class MyAspect{         

@Pointcut("excution(public * test.* . abcd()")

public void myPt(){}


@Before("myPt()")

public void before(JoinPoint jp){

     System.out.println(jp.getSignature());//AOP정보 출력

System.out.println(jp.getTarget());//핵심관심사항객체 리턴

System.out.println("야생의 휘동몬을 조우하였다!!");

}


      @After("myPt()")

public void after(JoinPoint jp){

System.out.println("효과는 탁월하였다!!");

}

@AfterReturning(pointcut="myPt()", returning="msg")

public void after_returning(JoinPoint jp, String msg){

System.out.println(msg);

}

@AfterThrowing(pointcut="myPt()", throwing="th")

public void after_throwing(JoinPoint jp, Throwable th){

System.out.println(th.getMessage() + "  : 가라 몬스터볼!!");

}



@Component

public class Pikachu implements IPokemon{


@Override

public String fighting() throws Exception {

// TODO Auto-generated method stub

System.out.println("피카츄 백만볼트!!");

if(new Random().nextBoolean())

throw new Exception("피카츄 전광석화!!");

return "pika!!";

}

}



' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day62 Spring MVC  (0) 2016.06.16
Day61  (0) 2016.06.15
Day59 Spring-AOP  (0) 2016.06.13
Day58 AOP (Aspect Oriented Programming)  (0) 2016.06.10
Day57 MyBatis_Spring  (0) 2016.06.09

+ Recent posts