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





멤버변수(필드)의 수식어에는 public/private을 줄 수있음. private 수식어가 붙은 멤버는 클래스 외부에서 접근불가






getter/setter를 쓰는이유 : 1. 외부에서 남의 데이터를 직접 접근하는 것을 막기 위해서

         2. 세분화된 접근제어(읽기전용/쓰기전용/둘다됨/둘다안됨) ex) getter만 만들고 setter를 안들면 해당 변수는 읽기전용

         3. 입력값에 대한 검증이 가능



getter 만들기


수식어는public 

반환유형은 내가 getter되고자 하는 변수의 타입

메소드명은 get변수형

매개변수 없음

몸통: return 변수;


setter 만들기 


수식어는 public 

반환유형은 void 

메소드명은 set변수명 

매개변수 : 내가 setter가 되고자하는 변수와 같은 타입의 매개변수 한개

몸통: {내가 setter가 되고자하는 변수} = 매개변수;



메소드 오버로딩 -> 함수이름이 같은데 매개변수가 다른 두개이상의 함수를 정의하는것.




이클립스는 외부 프로그램을 이클립스에 연동해서 사용할 수 있도록 플러그인 인터페이스를 제공, 

외부 프로그램은 이클립스의 플러그인 인터페이스를 준수해서 프로그램을 작성하면 이클립스와 연동해서 이클립스 상에서 사용할 수 있음.


이클립스에 플러그인을 설치하는 방법 :


1. 마켓에서 줍줍

2. 설치 url을 먹이거나

3. 이클립스 폴더안에 쳐박기.


ex)  UML (Unified Modeling Language) - - - - - -ObjectAid UML Explorer







생성자(contructor) : 객체가 생성될 때에 필드에게 초기값을 제공하고 필요한 절차를 실행하는 메소드;

생성자의 특징 : 수식어는 왠만하면 public // 문법적으로 반환유형 자체가 없음 // 얘도 메소드닌까 오버로딩이 가능 //

                      생성자메소드명은 클래스명과 동일


생성자를 하나도 정의 하지 않았을 경우에는 몸통이 텅 비어있는 기본생성자를 컴파일러가 끼워 넣음.


//%02d -> 2칸쓰는데 없으면 0






' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day12 변수  (0) 2016.03.29
Day11  (0) 2016.03.28
Day09 객체지향  (0) 2016.03.24
Day 08 정렬  (0) 2016.03.23
Day 07 배열  (0) 2016.03.22

+ Recent posts