학생 정보 관리 웹


필요한 페이지

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

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

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


필요 요청

- 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

일반적인 웹 어플리케이션 구조


View

 사용자에게 보여지는 페이지

 Spring MVC

Controller 

 어떤 req가 왔을 때 어떤 작업을 하고, 어떤 resp를 돌려줄지...

 AOP

Service

 우리 응용에서 필요한 로직을 구현

 Spring JDBC & ORM

Dao 

 DB에 있는 데이터를 조회, 수정, 삽입, 삭제...

 

Database


Spring JDBC

<!-- http://mvnrepository.com/artifact/org.springframework/spring-jdbc -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-jdbc</artifactId>

    <version>4.1.6.RELEASE</version>

</dependency>


1. Java 기본 JDBC를 사용하면서 불편했던 점

- PreparedStatement 구문이 편하긴한데,,,  바인딩에 대해서 타입과 위치를 개발자가 직접 다 지정해줘야됨.

- ResultSet에서 값을 주워올 때도 타입과 위치를 개발자가 직접 지정해야됨.


- PreparedStatement 구문 객체랑 ResultSet객체 사용 후 close해주는거 귀찮음..

- 하다보니 항상 똑같은 모양인데 예외처리해줘야됨.

->> Connection객체를 직접 제어해야되기 때문에 발생하는 문제

->>> 저건 약과고... ConnectionPool을 사용해서 여러개의 Connection을 제어하고 관리하려면 더....

DAO가 Connection을 직접 제어하지 말고 Connection을 관리해주는 한 레벨 높은 응용계층의 객체를 사용합시다.


Spring-jdbc에서 제공하는 Connection을 관리하는 작업을 대신해주는 Session역할을 해주는 객체 -> jdcbTemplate

--> 이 역할을 하는 친구들이 Connection을 어떻게 연결할지에 대한 정보는 java.sql.DataSource 인터페이스를 구현하는 객체를 활용

DataSource구현체 : 디비에 연결하기 위한 정보 집합


DataSource구현체에 접속정보

jdbcTemplate은 DataSource를 사용해 우리가 던져주는 sql문 셔틀

우리가 만들 Dao는 JdbcTemplate에 적절하게 sql문 날리고 결과값 핸들링


스프링 컨테이너에 DataSource구현체를 빈으로 등록 (디비 접속정보를 넣어서)

-> jdbcTemplate을 넣어서 빈으로 등록 (DataSource를 넣어서) -> jdbcTemplate을 사용하는 Dao작성

-> 작성한 Dao를 빈으로 등록 (jdbcTemplate 넣어서)


DataSource구현체 빈 등록 ->> 어떻게 디비에 접속할지에 대한 정보 + 커넥션을 어떻게 관리할건지..


<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"></bean>

DriverManagerDataSource : 스프링에서 연습용으로 제공하는 아주 단순한 DtaaSource구현체


Spring JDBC에서 제공하는 Connection을 응용해서 사용하는 Session 객체

- JDBCTemplate 요전에 한거

- NamedParameterjdbcTemplate 지금 해볼거

- SimplejdbcTemplate <- deprecated


//NamedParameteJdbcTemplate은 select해서 매퍼이용해 결과값 매핑하는건 JdbcTemplate이랑 같음

//sql문에 파라미터를 매핑할때 이름을 기반으로 해서 매핑시킬 수 있음

//Map같은 방식으로~

//sql문을 만들때 ? 대신에 이름을 적고, 이름을 키로, 그 자리에 넣을 값을 벨류로 맵으로 만들어서 투척!

//사용되는 뱁 객체 만드는 방법이 4가지..

//한개 넣을 때, 여러개 넣을 때

 

 자바 유틸 컬렉션 이용

 Spring라이브러리

 한개 넣을때

 SingleMap

 

 여러개 넣을때

 HashMap

 



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

Day53 MyBatis  (0) 2016.06.01
Day52 jdbcTemplate // MyBatis  (0) 2016.05.31
Day49 Spring Framework  (0) 2016.05.26
Day48 DB / Spring Framwork  (0) 2016.05.25
Day47 MVC, 커맨드 패턴  (0) 2016.05.24

+ Recent posts