Maven project 1 maven Project 2 POM repository

  • Slides: 128
Download presentation

Maven project 구성 1. maven Project 생성 2. POM 설정- repository, spring_jdbc, tomcat-jdbc, hibernatevalidator

Maven project 구성 1. maven Project 생성 2. POM 설정- repository, spring_jdbc, tomcat-jdbc, hibernatevalidator 3. Web. xml 설정- 한글, 멀티미디어파일 처리 부분 설정 4. root-context. xml data. Source 객체 설정 4. DTO 클래스 만들기 5. Dao – 인터페이스, 구현클래스 생성 root-context. xml 수정 6. 서비스 – 인터페이스, 구현클래스 생성 root-context. xml 수정 7. Controller root-context. xml 수정 8. Servlet-context. xml 설정 9. View 생성

Maven project 구성(1) 1. File > new> other > Spring Legacy project > next

Maven project 구성(1) 1. File > new> other > Spring Legacy project > next > 3. 입력 2. 선 택

Maven project 구성(1) 1. 입력 com. jang. doc

Maven project 구성(1) 1. 입력 com. jang. doc

Maven project 구성(1)

Maven project 구성(1)

메이븐 프로젝트 구성(2)x pom. xml (Project Object Model(POM) -메이븐 프로젝트에 대한 모든 설정을 저

메이븐 프로젝트 구성(2)x pom. xml (Project Object Model(POM) -메이븐 프로젝트에 대한 모든 설정을 저 장 com. jang. doc Card. Mybatis

Repository (저장소) 메이븐에서는 디폴트로 http: //repo 1. maven. org/maven 2/ 에 있는 repository 를

Repository (저장소) 메이븐에서는 디폴트로 http: //repo 1. maven. org/maven 2/ 에 있는 repository 를 참고 <dependency>에 따라서 추가할 원격 Repository 위치를 검색하여 지정 Oracle ojdbc 6는 위의 위치에 없으므로 다음의 별도 지정 장소 지정 <repositories> <repository> <id>codelds</id> <url>https: //code. lds. org/nexus/content/groups/mainrepo</url> </repository> </repositories>

Dependency 추가 <!-- Spring JDBC Support --> <dependency> <group. Id>org. apache. tomcat</group. Id> <artifact.

Dependency 추가 <!-- Spring JDBC Support --> <dependency> <group. Id>org. apache. tomcat</group. Id> <artifact. Id>tomcat-jdbc</artifact. Id> <version>8. 0. 20</version> </dependency> <group. Id>org. springframework</group. Id> <artifact. Id>spring-jdbc</artifact. Id> <version>${org. springframework-version}</version> </dependency> <group. Id>com. oracle</group. Id> <artifact. Id>ojdbc 6</artifact. Id> <version>11. 2. 0. 3</version> <scope>compile</scope> </dependency> <!-- Hibernate Validator --> <dependency> <group. Id>org. hibernate</group. Id> <artifact. Id>hibernate-validator</artifact. Id> <version>5. 2. 4. Final</version> </dependency>

M 2 Eclipse 프로젝트 Layout 변경 POM 변경 내용 적용 Project 우 클릭 >

M 2 Eclipse 프로젝트 Layout 변경 POM 변경 내용 적용 Project 우 클릭 > Maven > Update Maven Project > OK 실행

Web. xml 추가 <!-- utf-8 filter --> <filter> <filter-name>encoding. Filter</filter-name> <filter-class>org. springframework. web. filter.

Web. xml 추가 <!-- utf-8 filter --> <filter> <filter-name>encoding. Filter</filter-name> <filter-class>org. springframework. web. filter. Character. Encoding. Filter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!-- force. Encoding true 값을 주지 않을 경우 강제 인코딩 하지 않는다. --> <init-param> <param-name>force. Encoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding. Filter</filter-name> <servlet-mapping> <url-pattern>/*</url-pattern> <servlet-name>default</servlet-name> </filter-mapping> <url-pattern>*. css</url-pattern> <url-pattern>*. js</url-pattern> <url-pattern>*. gif</url-pattern> </servlet-mapping>

사용자 로그인 구성 Error 로그인화면 로그 인 사용자별 메인화면 로그아웃 View Controller Login. Controller

사용자 로그인 구성 Error 로그인화면 로그 인 사용자별 메인화면 로그아웃 View Controller Login. Controller Model login. Success. jsp Login. Validator User. Servise User. Dao login. jsp Data. Source User. Dt o

로그인 MVC 처리흐름 http: //localhost: 8080/doc/login. do Handler. Mapping 컨트롤러 선택 요청 2 3

로그인 MVC 처리흐름 http: //localhost: 8080/doc/login. do Handler. Mapping 컨트롤러 선택 요청 2 3 Dispa tcher Servlet 처리위임 Model. And. View 5 뷰 선택요청 View. Resolver Model. And. View 6 Login. Form. Controller 결과물 출력 <form action=“login. do”> login. jsp login. Success. jsp Controller 4 Model User. Servise User. Dao Model Data. Source

Spring MVC의 환경 구성 Ioc 컨테이너 : 웹 애플리케이션 컨텍스트 구성 Webroot의 /WEB-INF/web. xml

Spring MVC의 환경 구성 Ioc 컨테이너 : 웹 애플리케이션 컨텍스트 구성 Webroot의 /WEB-INF/web. xml 파일에 설정 root 애플리케이션 컨텍스트와 서블릿 애플리케이션 컨텍스트 설정 web. xml Io. C web-application 컨테이너 Context. Loader. Listener application. Context*. xml root-context. xml Dao data. Source Message. Sour ce [servlet-name]-servlet. xml servlet-context. xml

로그인 MVC 처리흐름 http: //doc/login. do Handler. Mapping 컨트롤러 선택 요청 2 3 Dispa

로그인 MVC 처리흐름 http: //doc/login. do Handler. Mapping 컨트롤러 선택 요청 2 3 Dispa tcher Servlet 처리위임 Model. And. View 5 뷰 선택요청 View. Resolver Model. And. View 6 Login. Controller 결과물 출력 <form action=“login. do”> login. jsp login. Success. jsp Controller 4 Model User. Servise User. Dao Model Data. Source jdbc. Template

Maven project 구성 1. maven Project 생성 2. POM 설정- properties 변경, repository, spring-jdbc,

Maven project 구성 1. maven Project 생성 2. POM 설정- properties 변경, repository, spring-jdbc, tomcat-jdbc, hibernate-validator 3. Web. xml 설정- 한글, 멀티미디어파일 처리 부분 설정 4. root-context. xml data. Source 객체 설정 5. DTO 클래스 만들기 6. Dao – 인터페이스, 구현클래스 생성 root-context. xml 수정 7. 서비스 – 인터페이스, 구현클래스 생성 root-context. xml 수정 8. Controller root-context. xml 수정 8. Message Properties 작성 8. Servlet-context. xml 설정 9. View 생성

Model의 구성 1. DB : 테이블 설계 2. pom 수정 – JDBC 관련 Dependecy

Model의 구성 1. DB : 테이블 설계 2. pom 수정 – JDBC 관련 Dependecy 추가 3. Data. Source 객체 생성 4. DTO (Data Transfer Object : model ) 객체 생성 5. DAO (Data Access Object ) Dao Service

2. Dependency 추가- POM. xml

2. Dependency 추가- POM. xml

3. Data. Source 객체 생성(2) root-context. xml 에 <!--추가 Data Source --> <bean id="data.

3. Data. Source 객체 생성(2) root-context. xml 에 <!--추가 Data Source --> <bean id="data. Source" class="org. apache. tomcat. jdbc. pool. Data. Source" destroy-method="close" > <property name="driver. Class. Name"> <value>oracle. jdbc. driver. Oracle. Driver</value> </property> <property name="url"> <value>jdbc: oracle: thin: @168. 126. 146. 45: 1521: orcl</value> </property> DI 과정에 사용 <property name="username"> <value>jjin</value> </property> <property name="password"> <value>jjinpang</value> </property> <property name="max. Active"> <value>5</value> </property> <property name="max. Idle"> <value>5</value> </property> <property name="max. Wait"> <value>3000</value> </property> </bean>

DTO 전달 객체 gatter & setter 생성 1. 입 력 User. java 2. 오른쪽클릭>Source>Generate

DTO 전달 객체 gatter & setter 생성 1. 입 력 User. java 2. 오른쪽클릭>Source>Generate Getter&Setter

Dao Interface 생성 2. 입력 1. src>우클릭>new >Inteface 3

Dao Interface 생성 2. 입력 1. src>우클릭>new >Inteface 3

Dao 구현 클래스 생성 2. 입력 1. src>user. dao>우클릭>new >class 3 4 6 5

Dao 구현 클래스 생성 2. 입력 1. src>user. dao>우클릭>new >class 3 4 6 5

Spring JDBC를 위한 jdbc. Template 클래스 Jdbc. Template 에는 Data. Source 를 주입해야 한다.

Spring JDBC를 위한 jdbc. Template 클래스 Jdbc. Template 에는 Data. Source 를 주입해야 한다. Jdbc. Template클래스는 SQl쿼리의 CRUD를 지원하기 위하여 다양한 메소드 를 지원한다. insert/delete/update 쿼리를 지원하기 위한 update 메서드 int jdbc. Template. update (String sql) int jdbc. Template. update (String sql, Object[] args, int[] arg. Type) Select 관련 메서드 int jdbc. Template. query. For. Int (String sql) int jdbc. Template. query. For. Int (String sql, Object[] args) long jdbc. Template. query. For. Long (String sql, Object[] agrs) Object jdbc. Template. query. For. Object (String sql, Class required. Type) Object jdbc. Template. query. For. Object (String sql, Object[] args, Row. Mapper row. Mapper) List jdbc. Template. query. For. List (String sq)

jdbc. Template 클래스 사용 l Select 문의 경우 l l l jdbc. Template. query.

jdbc. Template 클래스 사용 l Select 문의 경우 l l l jdbc. Template. query. For. Object(SQL, mapper, name); SQL 문을 실행하고 결과값 반환 실행전 SQL 문 ? 기호에 해당하는 값 입력 : 위치 파라메터 : name 결과값 반환 DTO 객체에 저장 : mapper 클래스 이용 Mapper 클래스 : rs DTO Insert, update 문의 경우 jdbc. Template. update(SQL, parameter. Source) l DTO 객체의 내용을 SQL에 입력 : parameter. Source 클래스 : 네임파라메터 l parameter. Source : DTO SQL 파라메터 l l delete 문의 경우 jdbc. Template. update(SQL, name ) l 실행전 SQL 문 ? 기호에 해당하는 값 입력 : 위치 파라메터 : name l

SQL 파라미터 바인딩 방법 이름 파라미터 치환자 INSQL=“Insert into member( id, name, pass )

SQL 파라미터 바인딩 방법 이름 파라미터 치환자 INSQL=“Insert into member( id, name, pass ) values ( : id, : name, : pass)” Sql. Parameter. Source parameter. Source = new Bean. Property. Sql. Parameter. Source(User user); id nam pass jumi template. update(INSQL, parameter. Source); e n jjin String SQL = "select id from member_tbl where name=? "; Row. Mapper<User> mapper = new Bean. Property. Row. Mapper<User>(User. class); return this. jdbc. Template. query. For. Object(SQL, mapper, name); Sql. Parameter. Source 클래스( SQL User Dto ) 1234 위치 파라미터 치환과 결과값 반환 김 영 addr DB테이블의 항목 이름과 User. Dto 객체의 속성 이름을 매핑(이름이 같은 필드 만) Row. Mapper 클래스( Rs User Dto ) Result. Set에서 값을 가져와 원하는 타입으로 매핑할 때 사용

Sql. Parameter. Source와 Row. Mapper INSQL=“Insert into member(id, pass, name) values ( : id,

Sql. Parameter. Source와 Row. Mapper INSQL=“Insert into member(id, pass, name) values ( : id, : pass, : name)” SQL DTO 객체와 SQL parameter 를 매핑 Dto Sql. Parameter. Source id pass nam e jumi n addr jjin 1234 이현 상 … …. Row. Mapper : RS의 레코드와 DTO 객체를 매핑 Rs

Sql. Parameter. Source와 Row. Mapper Dto Sql. Parameter. Source 폼 SQL Row. Mapper rs

Sql. Parameter. Source와 Row. Mapper Dto Sql. Parameter. Source 폼 SQL Row. Mapper rs

JDBC 프로그래밍 절차 Class. for. Name("oracle. jdbc. driver. Oracle. Driver") java. sql. Connection conn

JDBC 프로그래밍 절차 Class. for. Name("oracle. jdbc. driver. Oracle. Driver") java. sql. Connection conn Statement stmt = conn. statement() Prepared. Statement pstmt = conn. Prepared. Statement pstmt. execute. Update(), stmt. execute. Update(sql) pstmt. execute. Query() , Result. Set rs stmt. execute. Query(sql) =pstmt. execute. Query() while(rs. next) { rs. get. String("Name"); } pstm. close() rs. close() conn. close() Web 서버 Insert , delete, update select DB 서 버

SQL 작성 위치 파라메터 String SQL_USER= "SELECT * FROM member_tbl WHERE id = ?

SQL 작성 위치 파라메터 String SQL_USER= "SELECT * FROM member_tbl WHERE id = ? AND pass = ? "; String SQL_USER = "SELECT * FROM member_tbl WHERE id = ? "; String SQL_GETID = "select id from member_tbl where name=? "; String SQL_GETPASS = "select pass from member_tbl where id=? and name=? "; String SQL_DEL = "delete from member_tbl where id = ? AND pass = ? "; 네임 파라메터 String SQL_INS = "INSERT INTO member_tbl (id, pass, name, jumin, zip, addr 1, addr 2, phone, email) VALUES " + " (: Id, : pass, : name, : jumin, : zip, : addr 1, : addr 2, : phone, : email)"; String SQL_UP = "UPDATE member_tbl SET pass = : pass, zip = : zip, addr 1 = : addr 1, addr 2 = : addr 2, phone = : phone, email = : email WHERE id = : id";

SQL User. Dto Rs sqlparameter. Source Row. Mapper 검색코드의 구현 위치 파라메터 1 2

SQL User. Dto Rs sqlparameter. Source Row. Mapper 검색코드의 구현 위치 파라메터 1 2 3 4

검색코드의 구현 SQL User. Dto Rs sqlparameter. Source Row. Mapper 위치 파라메터

검색코드의 구현 SQL User. Dto Rs sqlparameter. Source Row. Mapper 위치 파라메터

Service (Business)클래스 작성 l Service 클래스도 의존관계를 약화 시키기 위하여 interface를 사용한다. <<Interface>> DAO

Service (Business)클래스 작성 l Service 클래스도 의존관계를 약화 시키기 위하여 interface를 사용한다. <<Interface>> DAO User. Dao <<Interface>> Service User. Service 사용 Controlle r 사용 Business Logic Object Service Logic User. Service. Impl Object 획득 Data Transfer Object Value Object DI DAO Object User. Dao. Impl 생성 Jdbc. Template(Data. So urce) 직접생성

Service (Business)클래스 구현과 Dao l Service 클래스 구현에는 DAO 클래스가 반드시 필요하며 어떤 Dao를

Service (Business)클래스 구현과 Dao l Service 클래스 구현에는 DAO 클래스가 반드시 필요하며 어떤 Dao를 사용하게 될지는 DI 를 통하여 결정된다. <<Interface>> DAO User. Dao <<Interface>> Service User. Service 사용 Controlle r DI 사용 Business Logic Object Service Logic User. Service. Impl Object DAO Object User. Dao. Impl Jdbc. Template(Data. So urce) 직접생성 public class User. Service. Impl implements User. Service { private User. Dao user. Dao; Root-context. xml 에서 사용될 Dao public void set. User. Dao(User. Dao user. Dao. Impl) { this. user. Dao = user. Dao. Impl; } }

Service interface 생성 4. 입력 1. src>com. jang. doc>우클릭>new >Interface 2 5 3

Service interface 생성 4. 입력 1. src>com. jang. doc>우클릭>new >Interface 2 5 3

Service interface 생성 1. 입력

Service interface 생성 1. 입력

Service 구현 클래스 작성 1. src>doc. logic >우클릭>new >class 2. User. Service. Impl 입

Service 구현 클래스 작성 1. src>doc. logic >우클릭>new >class 2. User. Service. Impl 입 력 4 3 5

Service 구현 클래스에 Dao 구현객체 주입 <<Interface>> DAO <<Interface>> Service 사용 Controlle r 사용

Service 구현 클래스에 Dao 구현객체 주입 <<Interface>> DAO <<Interface>> Service 사용 Controlle r 사용 Business Logic Object User. Service. Impl Service Logic Object DAO Object public class User. Service. Impl implements User. Service { DI Jdbc. Template(Data. So urce) 직접생성 1. User. Service. Impl 클래스에 추가 private User. Dao user. Dao; public void set. User. Dao(User. Dao user. Dao. Impl) { this. user. Dao = user. Dao. Impl; } } 2. Root-context. xml에 추

로그인 MVC 처리흐름 http: // login-mvn/login. do Handler. Mapping 컨트롤러 선택 요청 2 3

로그인 MVC 처리흐름 http: // login-mvn/login. do Handler. Mapping 컨트롤러 선택 요청 2 3 Dispa tcher Servlet 처리위임 Model. And. View 5 뷰 선택요청 View. Resolver Model. And. View 6 Login. Controller 결과물 출력 <form action=“login. do”> login. jsp login. Success. jsp Controller 4 Model User. Servise User. Dao Model jdbc. Template Data. Source

Model 의 완성 <<Interface>> User. Service 사용 Controlle r <<Interface>> User. DAO User. Service.

Model 의 완성 <<Interface>> User. Service 사용 Controlle r <<Interface>> User. DAO User. Service. Impl DI Business Logic Object Service Logic Object 사용 User. Dao. Impl DI DAO Object User. DAOImpl 사용 jdbc. Template 직접생성 Data. Sour ce: DI

View 와 Controller 로그인 사용자별 메인화면 로그아웃 http: //login-mvc/login. do <form method=“post ”action=”login. do”>

View 와 Controller 로그인 사용자별 메인화면 로그아웃 http: //login-mvc/login. do <form method=“post ”action=”login. do”> 1 Login. Controller 2 5 4: yes 3 4: no 4 login. Success. jsp 4 Login. Validator 5 User. Servise User. Dao jdbc. Template Login. Form. jsp Data. Source Model

Controller 설계 http: //login-mvn/login. do 컨트롤러 선택 요청 Handler. Mapping 2 Dispa tcher Servlet

Controller 설계 http: //login-mvn/login. do 컨트롤러 선택 요청 Handler. Mapping 2 Dispa tcher Servlet login. Validator 3 처리위임 Model. And. View Login. Controller 뷰 선택요청 method="post“ action="login. do" Model. And. View 6 결과물 출력 View. Resolver Use. Service User. Dao jdbc. Template Data. Source View (*. jsp) Controller

View 생성(login. jsp, login. Success. jsp

View 생성(login. jsp, login. Success. jsp

View 와 Controller 로그인 사용자별 메인화면 로그아웃 http: //login-mvc/login. do 1 Login. Controller 2

View 와 Controller 로그인 사용자별 메인화면 로그아웃 http: //login-mvc/login. do 1 Login. Controller 2 5 4: yes 3 4: no 4 login. Success. jsp 4 Login. Validator 5 User. Servise User. Dao Data. Source login. jsp Model

Controller 작성(1)- user. Service DI l Controller는 DB와 연동이 필요한 경우 Service 객체를 이용한다.

Controller 작성(1)- user. Service DI l Controller는 DB와 연동이 필요한 경우 Service 객체를 이용한다. @Controller public class Login. Controller { //private User. Service user. Service; //public void set. User. Service(User. Service user. Service) { //this. user. Service = user. Service; //} @Autowired private User. Service user. Service; } root-context. xml 1. Data. Source 3. user. Service 2. user Dao -servlet. xml 4. login. Conroller @Autowired 어노테이션을 사용 하면 Container에서 이름이 같은 객체를 찾아 자동 DI “this. user. Service=user. Service; ”

Controller 작성(1)- user. Service DI @Controller public class Login. Controller { 다른 이름의 객체를

Controller 작성(1)- user. Service DI @Controller public class Login. Controller { 다른 이름의 객체를 사용하려면 @Autowired 어노테이션 대신에 //@Autowired @Resource을 사용해도 같은 효과 - 이름을 @Resource(name = "user. Service") 지정할 수 있음 private User. Service user. Service 2; “this. user. Service 2=user. Service; ” } root-context. xml 3. 1. Data. Source user. Service 2. user Dao servletcontext. xml 4. login. Conroller

Web. Application. Context에서 객체생성과 DI root-context. xml Web. Application. Cont ext 생성된 bean(객체)을 DI하는

Web. Application. Context에서 객체생성과 DI root-context. xml Web. Application. Cont ext 생성된 bean(객체)을 DI하는 어노테이 션 1. Data. Source @Autowired @Resource(name = "user. Service") 2. Dao 객체 3. Service 객체 servlet-context. xml Dispatcher. Servlet Web. Application. Cont ext @Controller(value ="login. Controller") @Repository(value = “user. Mapper") @Service(value = “user. Service") 4. Conroller 객체 bean(객체)을 생성하는 어노테이션

View 와 Controller 로그인 사용자별 메인화면 로그아웃 http: //login-mvc/login. do <form method=“post ”action=”login. do”>

View 와 Controller 로그인 사용자별 메인화면 로그아웃 http: //login-mvc/login. do <form method=“post ”action=”login. do”> 1 Login. Controller 2 5 4: yes 3 4: no 4 login. Success. jsp 4 Login. Validator 5 User. Servise User. Dao jdbc. Template Login. Form. jsp Data. Source Model

Controller 작성(3) – 모델(Dto) 객체생성, 유효성검사, 결과 저장) 2 1. User DTO 객체생성 2.

Controller 작성(3) – 모델(Dto) 객체생성, 유효성검사, 결과 저장) 2 1. User DTO 객체생성 2. User DTO 객체 바인딩 Form 전송 파라메터 DTO(모 델) 3. Hibernate Validator를 이용 한 유효성검사 Form id pass jjin 1234 User nam e zip addr

JSR-303 Validator, Hibernate Validator를 이용한 유효성 검증 1. POM 에 dependency 추가 3. DTO

JSR-303 Validator, Hibernate Validator를 이용한 유효성 검증 1. POM 에 dependency 추가 3. DTO 객체 변경 및 메시지 설정 <dependency> <group. Id>javax. validation</group. Id> <artifact. Id>validation-api</artifact. Id> <version>1. 1. 0. Final</version> </dependency> <group. Id>org. hibernate</group. Id> <artifact. Id>hibernatevalidator</artifact. Id> <version>5. 2. 4. Final</version> </dependency> 2. Servlet. xml에 annotation-driven 설정 4. Message properties 설정 messages_ko. properties 5. Conroller변경

Controller 작성(5) user. Servive 호출 및 인증 성공, 실패 처리 id pass jjin 1234

Controller 작성(5) user. Servive 호출 및 인증 성공, 실패 처리 id pass jjin 1234 nam e zip addr Controller 는 전달받은 service 객체에게 DB 성공 관련 처리를 의뢰한다. 실패

Binding Error 코드와 error 메시지 관리 Errors interface 와 Binding. Result interface: Errors :

Binding Error 코드와 error 메시지 관리 Errors interface 와 Binding. Result interface: Errors : org. springframework. validation. Errors, 유효성 검증 결과 저장 Binding. Result : org. springframework. validation. Binding. Result -Errors의 인터페이스의 하위 인터페이스, 폼에서 커맨드(전달) 객체에 바인딩 한 결과를 저장 메서드 reject(String error. Code, String default. Message) : 전체 객체에 대한 글로벌 에러 코드를 추가 – 에러 메시지는 Messgae. Source 객체에서 검색 에러 코드에 대한 메시지가 존재하지 않을 경우 default. Message를 사용 reject. Value(String field, String error. Code) : 필드에 대한 에러 코드를 추가 has. Errors() : 에러가 존재하는 경우 true 리턴 has. Field. Errors(String field) : reject. Value() 메서드를 이용해서 추가한 특정 필드의 에러가 존재할 경우 true 리턴 has. Global. Errors() : reject() 메서드를 이용해서 추가된 글로벌 에러가 존재할 경우 true 리턴

messages. properties 생성 1. 우클릭>new>other>java>properties File>next 2. 입력 3. 내용편집

messages. properties 생성 1. 우클릭>new>other>java>properties File>next 2. 입력 3. 내용편집

메시지소스 객체 생성 root-context. xml <!-- Message. Source --> <bean id="message. Source" class="org. springframework.

메시지소스 객체 생성 root-context. xml <!-- Message. Source --> <bean id="message. Source" class="org. springframework. context. support. Resource. Bundle. Message. Source"> <property name="basenames"> <list> <value>messages_ko</value> </list> </property> </bean>

View 에서 message 출력 <spring: has. Bind. Errors name="user"> <span class="field. Error"> <c: for.

View 에서 message 출력 <spring: has. Bind. Errors name="user"> <span class="field. Error"> <c: for. Each var="error" items="${errors. global. Errors}" > <spring: message code="${error. code}" /> </c: for. Each> l Message. Source 객체를 이용한 글로벌 에러메시지 출력 </span> </spring: has. Bind. Errors> l @Valid로 검증한 field 에러 메시지 출력 … <span class="field. Error"> <form: errors path="pass" /> </span>

@Valid 에러 메시지 출력(login. Form. jsp)

@Valid 에러 메시지 출력(login. Form. jsp)

View

View

JSTL 정리 파일 작성 (jsp_header. jsp) JSTL 정의와 style 을 모든 뷰에서 사용할 수있도록

JSTL 정리 파일 작성 (jsp_header. jsp) JSTL 정의와 style 을 모든 뷰에서 사용할 수있도록 별도의 파일에 저장하고 각 뷰에서 < <%@ page session="false"%> <%@ taglib prefix="c" uri="http: //java. sun. com/jsp/jstl/core"%> <%@ taglib prefix="spring" uri="http: //www. springframework. org/tags"%> <%@ taglib prefix="form" uri="http: //www. springframework. org/tags/form"%> <%@ taglib prefix="f" uri="http: //java. sun. com/jsp/jstl/fmt" %>

style. css 폴더생성 Login_bg. gif 파일 copy <div class="form">

style. css 폴더생성 Login_bg. gif 파일 copy <div class="form">

style. css <button type="submit"> <span class="field. Error"> <li id="lilogb">

style. css <button type="submit"> <span class="field. Error"> <li id="lilogb">

View (login. Form. jsp) 생성 login. Form. js p jsp_header. jsp webapp/resources/css 폴더 생성

View (login. Form. jsp) 생성 login. Form. js p jsp_header. jsp webapp/resources/css 폴더 생성 style. css

View (login. Form. jsp) 생성

View (login. Form. jsp) 생성

로그인 성공화면(login. Success. jsp) <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%> <%@ include

로그인 성공화면(login. Success. jsp) <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%> <%@ include file=". /jsp_header. jsp" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>로그인 성공화면</title> </head> <body> <div align="center" class="body"> <h 2>로그인화면</h 2> 환영합니다, ${ login. User. name }씨! <a href="/Login 4 mvc/user. Edit. html? user. Id=${login. User. id}"><회원정보 수정></a> </div> </body> </html>

Io. C 컨테이너 설정 web. xml Context. Loader. Listener Root Web. Application. Context data.

Io. C 컨테이너 설정 web. xml Context. Loader. Listener Root Web. Application. Context data. Sourc e http: //login-mvn/login. do transaction. Mana ger user. Dao message. Source user. Servic e root-context. xml Handler. Mapping(x ) beans(Login. Controlle r) @Conroller @Request. Mapping View. Resolver servlet-context. xml login. js p logsuccec. j sp

Context. Loader. Listener 설정 - rootcontext. xml Default Bean. Factory – /WEB-INF/application. Context. xml

Context. Loader. Listener 설정 - rootcontext. xml Default Bean. Factory – /WEB-INF/application. Context. xml /WEB-INF/Spring/root-context. xml Root Web. Application. Context에서 필요한 객체 bean을 정의한다. 클래스를 이용하여 다음 객체를 생성 data. Source - 데이터베이스 연결 정보를 관리하는 객체 use. Dao, user. Service – model 구성을 위한 객체 login. Validator – 입력폼의 정보를 검증하기 위한 객체 - 생략: JSR 303 사용 message. Source – 오류메세지를 관리하기 위한 객체 Root Web. Application. Context data. Sourc e transaction. Mana ger user. Dao user. Servi ce message. Source

root-context. xml 설정 확인 <!-- Data Source --> <bean id="data. Source" class="org. apache. tomcat.

root-context. xml 설정 확인 <!-- Data Source --> <bean id="data. Source" class="org. apache. tomcat. jdbc. pool. Data. Source" destroy-method="close" > <property name="driver. Class. Name"> <value>oracle. jdbc. driver. Oracle. Driver</value> </property> <property name="url"> <value>jdbc: oracle: thin: @168. 126. 146. 45: 1521: orcl</value> </property> <property name="username"> <value>jjin</value> </property> <property name="password"> <value>jjinpang</value> </property> <property name="max. Active"> <value>5</value> </property> <property name="max. Idle"> <value>5</value> </property> <property name="max. Wait"> <value>10000</value> </property> </bean> <!-- transaction manager, use Jta. Transaction. Manager for global tx --> <tx: annotation-driven /> <bean id="transaction. Manager" class="org. springframework. jdbc. datasource. Data. Source. Transaction. Manager"> <property name="data. Source" ref="data. Source" /> </bean>

root-context. xml 파일 네임스페이스 추가 <? xml version="1. 0" encoding="UTF-8"? > <beans xmlns="http: //www.

root-context. xml 파일 네임스페이스 추가 <? xml version="1. 0" encoding="UTF-8"? > <beans xmlns="http: //www. springframework. org/schema/beans" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xmlns: tx="http: //www. springframework. org/schema/tx" xsi: schema. Location="http: //www. springframework. org/schema/tx/spring-tx-3. 0. xsd http: //www. springframework. org/schema/beans/springbeans. xsd">

root-context. xml 설정 확인 <!-- Message. Source --> <bean id="message. Source" class="org. springframework. context.

root-context. xml 설정 확인 <!-- Message. Source --> <bean id="message. Source" class="org. springframework. context. support. Resource. Bundle. Message. Source"> <property name="basenames"> <list> <value>messages_ko</value> </list> </property> </bean>

Dispatcher. Servlet 설정 -servlet-context. xml

Dispatcher. Servlet 설정 -servlet-context. xml

실행 Login. do

실행 Login. do

Io. C 컨테이너 web. xml Context. Loader. Listener Root Web. Application. Context http: //Login

Io. C 컨테이너 web. xml Context. Loader. Listener Root Web. Application. Context http: //Login 4 mvc/login. html data. Sourc e user. Dao user. Servic e Message. Sour ce application. Context*. x ml Handler. Mapping(x ) beans(Login. Controlle r) @Conroller @Request. Mapping View. Resolver [servlet-name]servlet. xml login. js p logsuccec. j sp

사용자 로그인 클래스다이어그램 Context. Loader. Listner Dispatcher. Servlet -application. Context. xml -root-context. xml login.

사용자 로그인 클래스다이어그램 Context. Loader. Listner Dispatcher. Servlet -application. Context. xml -root-context. xml login. do(get) handler. Mapping (Simple. Url. Handler. Mapping) login. Validator (Login. Validator. java) login. Controller (Login. Controller. java) set. User. Service( ) set. Up. Form() to. Login. View() on. Submit() internal. Resource. View. Res olver ( SInternal. Resource. View. Resolv er) login. do(post) Login. jsp login. Sucess. j sp interface User. DAO 사용 Interface User. Service 사용 User. Service (User. Service. Impl. java) user. Dao (User. Dao. Impl. java) set. User. Dao ( ) get. User. By. User. Id. And. Passw ord() entry. User(User user); Jdbc. Template(data. Source ( )) find. By. User. Id. And. Password() create(User user) User. Dto ㅋ data. Source

사용자 정보 수정 로그인화면 로그아웃 사용자별 메인화면 정보수정 사용자정보 수정화면 수정 user. Edit. do

사용자 정보 수정 로그인화면 로그아웃 사용자별 메인화면 정보수정 사용자정보 수정화면 수정 user. Edit. do 1 User. Edit. Controller 2 3 4 5 User. Edit. Validator 4 User. Servise user. Edit. jsp User. Dao jdbc. Template Data. Source 5 사용자정보 보기화면

로그인 성공화면 수정 (login. Success. jsp) <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%>

로그인 성공화면 수정 (login. Success. jsp) <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%> <%@ include file=“. /jsp_header. jsp" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>로그인 성공화면</title> </head> <body> <div align="center" class="body"> <h 2>로그인화면</h 2> 환영합니다, ${login. User. name}씨! <a href=“/doc/user. Edit. do? user. Id=${login. User. id}"><회원정보 수정></a> </div> </body> </html>

User. Edit. Controller 작성(1) package com. jang. doc. controller; @Controller public class User. Edit.

User. Edit. Controller 작성(1) package com. jang. doc. controller; @Controller public class User. Edit. Controller { @Resource(name = "user. Service") private User. Service user. Service; @Resource(name = "message. Source") private Message. Source message. Source; /* public void set. Message. Source(Message. Source message. Source) { this. message. Source = message. Source; } public void set. User. Service(User. Service user. Service) { this. user. Service = user. Service; } */

User. Edit. Controller 작성(2) @Request. Mapping(value="/user. Edit", method = Request. Method. GET) public String

User. Edit. Controller 작성(2) @Request. Mapping(value="/user. Edit", method = Request. Method. GET) public String to. User. Edit. View( Http. Servlet. Request request, Model model) { User user = new User(); //command (전달) 객체 생성 Message. Source. Accessor accessor = new Message. Source. Accessor(this. message. Source); user. set. Id(accessor. get. Message("user. Id. default")); user. set. Name(accessor. get. Message("user. Name. default")); User 데이터를 읽을 수 없을 입 user. set. Pass(accessor. get. Message("error. required. user. pass")); 력상자에 출력할 에러메시지를 user. set. Addr 1(accessor. get. Message("error. required. user. addr 1")); DTO 객체에 준비 user. set. Addr 2(accessor. get. Message("error. required. user. addr 2")); user. set. Email(accessor. get. Message("error. required. user. email")); user. set. Phone(accessor. get. Message("error. required. user. phone")); user. set. Zip(accessor. get. Message("error. required. user. zip")); URL 파라메터 읽기 String user. Id = request. get. Parameter("user. Id"); try { user = this. user. Service. get. User(user. Id); model. add. Attribute("user", user); return "user. Edit. Form"; } catch (Empty. Result. Data. Access. Exception e) { model. add. Attribute("user", user); return "user. Edit. Form"; } } user. Id 정보를 이용하여 user 전 체 정보를 읽어옴 데이터가 없을경우 입력상자에 에러메시지가 입력된 DTO 객 체 전송

User. Edit. Controller 작성(3) @Request. Mapping(value="/user. Edit", method = Request. Method. POST) public String

User. Edit. Controller 작성(3) @Request. Mapping(value="/user. Edit", method = Request. Method. POST) public String on. Submit( @Valid User user, Binding. Result result, Model model) throws Exception { if (result. has. Errors()) { model. add. All. Attributes(result. get. Model()); return "user. Edit. Form"; } } 외부 시스템에서 생성된 객체 Model을 인수로 받음 Model 은 return 하지 않아도 string으로 view만 반환하면 자동으로 return 됨 try { this. user. Service. update. User(user); model. add. Attribute("user", user); return "user. Entry. Success"; 모델에 자동으로 추가되어 반환되는 정 } catch (Data. Integrity. Violation. Exception e) { 보 - @Model. Attribute로 넘어 온 메소드 파 result. reject("error. duplicate. user"); model. add. All. Attributes(result. get. Model()) 라미터의 모델 return "user. Edit. Form"; - Map, Model. Map 파라미터 } - @Model. Attribute 메소드 : - Binding. Result : 검증 결과

User DTO 수정

User DTO 수정

View 작성(user. Edit. Form. jsp) –(1) <%@ page language="java" content. Type="text/html; charset=utf-8" page. Encoding="utf-8"%>

View 작성(user. Edit. Form. jsp) –(1) <%@ page language="java" content. Type="text/html; charset=utf-8" page. Encoding="utf-8"%> <%@ include file=“. /jsp_header. jsp"%> <HTML> <HEAD> <TITLE> 회원 정보 수정 </TITLE> <link rel="stylesheet" type="text/css" href="resources/css/style. css"> <META http-equiv="Content-Type" content="text/html; charset=utf-8"> <SCRIPT> function Zip. Code() { browsing_window = window. open("zip_form. jsp", "_zipinput", "height=300, width=600, menubar=no, directories=no, resizable=no, status=no, scrollbars=yes"); browsing_window. focus(); } </SCRIPT> </HEAD>

View 작성(user. Edit. Form. jsp) –(2) <BODY> <center><font size='3'><b> 회원정보 수정 </b></font> <hr size='1'

View 작성(user. Edit. Form. jsp) –(2) <BODY> <center><font size='3'><b> 회원정보 수정 </b></font> <hr size='1' noshade width='600' align="center"> <spring: has. Bind. Errors name="user"> <font color="red"> <c: for. Each items="${errors. global. Errors}" var="error”> <spring: message code="${error. code}" /> </c: for. Each> </font> </spring: has. Bind. Errors> <form: form model. Attribute="user" Name='join. Form' Method='post' Action='/doc/user. Edit. do'> <TABLE border='2' width='600' cell. Spacing=0 cell. Padding=5 align=center> <TR> <TD bgcolor='cccccc' width='100' align='center'><font size='2'>아 이 디</font></TD> <TD bgcolor='cccccc'> <form: input path="id" max. Length='20' size='10' readonly='true' /> <span class="field. Error"> <form: errors path="id" /></span> </TD> </TR>

View 작성(user. Edit. Form. jsp) –(3) <TR> <TD bgcolor='cccccc' align='center‘><font size='2'>비 밀 번 호</font></TD>

View 작성(user. Edit. Form. jsp) –(3) <TR> <TD bgcolor='cccccc' align='center‘><font size='2'>비 밀 번 호</font></TD> <TD bgcolor='cccccc'> <form: password path="pass" maxlength="20" size='10' show. Password="true" /> <span class="field. Error"><form: errors path="pass" /></span> </TD> </TR> <TD bgcolor='cccccc' align='center’><font size='2'>비밀번호확인</font></TD> <TD bgcolor='cccccc'> <form: password path="pass 2" maxlength="20" size='10' value="${user. pass}" show. Password="true" /> <span class="field. Error"><form: errors path="pass 2" /></span> </TD> </TR> <TD bgcolor='cccccc' align='center‘><font size='2'>이 름</font></TD> <TD bgcolor='cccccc'> <form: input path="name" maxlength="20" size='10' readonly='true' /> <span class="field. Error"><form: errors path="name" /></span> </TD> </TR>

View 작성(user. Edit. Form. jsp) –(4) <TR> <TD bgcolor='cccccc' align='center'> <font size='2'>우 편 번

View 작성(user. Edit. Form. jsp) –(4) <TR> <TD bgcolor='cccccc' align='center'> <font size='2'>우 편 번 호</font><span class="field. Error"> </TD> <TD bgcolor='cccccc'> <form: input path='zip' maxlength='7' size='7' /> <input type='button' On. Click='Zip. Code()' value='우편번호검색'><span class="field. Error"><form: errors path="zip" /></span> </TD> </TR> <TD bgcolor='cccccc' align='center'><font size='2'>주 소</font></TD> <TD bgcolor='cccccc'> <form: input maxlength='50' size='50' path='addr 1' /><span class="field. Error" ><form: errors path="addr 1" /></span><BR> <form: input maxlength='50' size='50' path='addr 2' /><span class="field. Error" ><form: errors path="addr 2" /></span> </TD> </TR> <TD bgcolor='cccccc' align='center'><font size='2'>전 화 번 호</font></TD> <TD bgcolor='cccccc'> <form: input type='text' maxlength='20' size='20' path='phone' /> <span class="field. Error" ><form: errors path="phone" /> </span> </TD> </TR> <TD bgcolor='cccccc' align='center'><font size='2'>E - M a i l</font></TD> <TD bgcolor='cccccc'> <form: input type='text' maxlength='50' size='50' path='email' /> <span class="field. Error" ><form: errors path="email" /></span> </TD> </TR> </TABLE>

View 작성(user. Edit. Form. jsp)- –(5) <hr size='1' noshade width='600' align="center"> <TABLE> <TR><TD colspan='2'

View 작성(user. Edit. Form. jsp)- –(5) <hr size='1' noshade width='600' align="center"> <TABLE> <TR><TD colspan='2' align='center'><input type='submit' value='수정'></TD></TR> </TABLE> </form: form> </BODY> </HTML>

Success View(user. Entry. Success. jsp) – <%@(1) page language="java" content. Type="text/html; charset=utf-8" page. Encoding="utf-8"%>

Success View(user. Entry. Success. jsp) – <%@(1) page language="java" content. Type="text/html; charset=utf-8" page. Encoding="utf-8"%> <%@ include file=". /jsp_header. jsp"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>유저 등록 완료 화면</title> <link rel="stylesheet" type="text/css" href="resources/css/style. css"> </head> <body> <div align="center" class="body"> <h 2>유저 등록 완료 화면</h 2> <b><font color="red">다음과 같이 유저 등록이 완료되었습니다. </font></b> <table border='1' width='600' cellpadding='0' cellspacing='0'> <tr height="40 px"> <td bgcolor='cccccc' width='100' align='center' >유저ID: </td> <td>${user. id}</td> </tr> <tr height="40 px"> <td bgcolor='cccccc' width='100' align='center' >패스워드: </td> <td>${user. pass}</td> </tr> <tr height="40 px"> <td bgcolor='cccccc' width='100' align='center' >이름: </td> <td>${user. name}</td> </tr>

Success View(user. Entry. Success. jsp)-(2) <tr height="40 px"> <td bgcolor='cccccc' </tr> width='100' align='center' >이름:

Success View(user. Entry. Success. jsp)-(2) <tr height="40 px"> <td bgcolor='cccccc' </tr> width='100' align='center' >이름: </td><td>${user. name}</td> width='100' align='center' >우편번호: </td><td>${user. zip}</td> width='100' align='center' >주소: </td><td>${user. addr 1}</td> width='100' align='center' >상세주소: </td><td>${user. addr 2}</td> <tr height="40 px"> <td bgcolor='cccccc' width='100' align='center' >전화번호: </td><td>${user. phone}</td> </tr> <tr height="40 px"> <td bgcolor='cccccc' width='100' align='center' >E-MAIL: </td><td>${user. email}</td> </tr> </table> <p><ul id="ullog" ><li id="lilogb"><a href="/doc/login. do">로그인</a></li></ul></p> </div> </body> </html>

회원가입 로그인화면 로그아웃 사용자별 메인화면 정보수정 사용자정보 수정화면 확인 사용자정보 보기화면 회원가입 사용자정보 보기화면

회원가입 로그인화면 로그아웃 사용자별 메인화면 정보수정 사용자정보 수정화면 확인 사용자정보 보기화면 회원가입 사용자정보 보기화면 확인 사용자등록 화면 http: //localhost: 8080/doc/user. Entry. do user. Entry. Success. jsp user. Entry. Form. jsp 1 User. Entry. Controller 2 4 3 User. Entry. Validator or @Valid 4 User. Servise 5

우편번호 검색 새로운 테이블을 사용하면 새로운 전달객체를 만들고 컨트롤러, Dao, Service 클래스를 새 Post.

우편번호 검색 새로운 테이블을 사용하면 새로운 전달객체를 만들고 컨트롤러, Dao, Service 클래스를 새 Post. Controller (User. Edit. Controller. java) 2. /post. do set. User. Service( ) setmessage. Source( ) /post. do() - get /post. do() - post on. Submit() 1. window. open() 3. post. jsp 4. /post. do -post 6. 데이터 전달 5. post. jsp <list>post

Spring. Framework Http. Servlet. Request org. springframework. web. servlet. Dispatcher. Servlet Spring MVC Interceptor

Spring. Framework Http. Servlet. Request org. springframework. web. servlet. Dispatcher. Servlet Spring MVC Interceptor 1 JDBC ORM Interceptor 2 Interceptor 3 Io. C Container Controller Business Object Model. And. View Template - JSP - Velocity - Freemarker Interceptor 3 application. Context. xml Interceptor 2 action-servlet. xml Interceptor 1 DAO Page Control - dispatch - redirect Http. Servlet. Response

사용자 정보수정 클래스다이어그램 Context. Loader. Listner Dispatcher. Servlet -application. Context. xml handler. Mapping (Simple.

사용자 정보수정 클래스다이어그램 Context. Loader. Listner Dispatcher. Servlet -application. Context. xml handler. Mapping (Simple. Url. Handler. Mapping) User. Edit. Controller (User. Edit. Controller. java) set. User. Service( ) setmessage. Source( ) interface User. DAO 사용 Interface User. Service 사용 set. Up. Form() to. User. Edit. View() on. Submit() 사용 internal. Resource. View. Res olver ( SInternal. Resource. View. Resolv er) user. Edit. do(post) user. Edit. Form. js p user. Entry. Sucess. jsp User. Service (User. Service. Impl. java) user. Dao (User. Dao. Impl. java) set. User. Dao ( ) get. User. By. User. Id. And. Passw ord() entry. User(User user); set. Data. Source ( ) find. By. User. Id. And. Password() create(User user) User. Dto ㅋ Jdbc. Template() data. Source