목록중앙 HTA (2106기) story/spring java framwork story (40)
날아라쩡글이의 블로그입니다.
springMVC 실행순서 클라이언트가 웹서버로 요청을 보낸다. 웹서버가 요청객체와 응답객체를 생성한다. 웹서버가 DispatcherServlet의 Service(Request req, Response res :앞으로는 변수명으로 작성예정) 메소드를 실행한다. Handler Mapping에게 요청 URL을 보낸다, Handler Mapping은 요청 URL을 분석해서 요청URL과 mapping된 요청 핸들러 메소드를 실행할 HandlerAdapter객체를 반환한다. DispatcherServlet은 HandlerAdapter의 Handler(req, res)메소드를 실행한다. HandlerAdapter는 Interceptor를 실행해서 요청핸들러메소드 실행전처리를 수행한다. HandlerAdapter는 ..
Mybatis가 제공하는 타입 명칭 int , string, long, double, date map : map은 인터페이스여서 객체생성이 불가능하다, parameterType에서 사용가능하다. 그릇으로 사용가능하지만 resultType에서는 사용불가능하다. hashMap : resultType에서 사용가능하다. 주로 ResultType에서만 사용한다. bigdecimal java.math.BigDecimal 객체의 프라퍼티는 map의 key와 동일하게 사용한다. 사용자 번호로 검색 * Map map = new HashMap(); * map.put("no",100); * User user = userDao.getUser(map); * * 사용자 아이디로 검색 * Map map = new HashMap()..
opt와value의 값이 하나도 안들어가면 where이 없도록 동적인 다이나믹쿼리를 해주는 것이 where태그이다. where 태그를 이용해서 여러 값을 result해볼예정이다. pagination을 입력하자 요청 URL : localhost/book/list.do localhost/book/list.do?page= ? 이러면 page가 값이 없을 때 error가 발생한다. page가 null이거나 null이 아닐 때는 어떻게 해야할까? @GetMapping("/list.do") public String list(@RequestParam(name = "page", defaultValue = "1", required = false) String page, Criteria criteria ,Model mod..
Criteria : 기준, 표준의 복수형 form 객체로 등록한다. 내용은 opt와 value라는 속성으로 정의하고, 기본생성자와 getter/setter로 정의한다. 이제 검색을 통해보일 Controllerdp Criteria를 매개변수로 정의하고, Controller에는 if(StringUtils.hasText(criteria.getOpt()) && StringUtils.hasText(criteria.getValue())) { // criteria의 opt에 text가 존재하고 또는 criteria의 value에 text가 존재하면 List books = bookService.searchBook(criteria); //객체가 출력되고, model.addAttribute("books",books); /..
Model은 spring은 Controller와 Request, Response가 직접 연결되는 것을 싫어하기 때문에 Dispatcher을 이용하여 이동하게 된다. Model은 view가 옮겨 놓으며, 내부이동할 때 사용할 수 있는 데이터를 담고 있는 값이다. Redirect경우에는 model에 담으면 안된다. 재요청 URL의 경우 요청객체와 응답객체가 새롭게 생기기 때문에 값을 담아도 새로 만들어지는 요소에는 값이 없기 때문에 Redirect를 할 경우 model의 값을 담으면 안된다. 매개변수로 RedirectAttribute를 설정하고, addAttribute로 담아두면 된다. Session에 해당하는 개인정보들은 addFlashAttribute에 담아두면 된다. Session에 저장되는데, 1회성..
com.sample = 회사 도메인 spring-mybatis = 프로젝트명 0.0.1-SNAPSHOT = 버젼의 넘버링 war 톰켓서버의 배포 Jar 자바의 application을 압축한 폴더 War web package(web)의 package를 압축한 폴더 Ear 자바를 EJB서버를 이용해서 압축한 폴더 우리는 web을 만들기 때문에 war로 설정한다. = 앞으로 작성할 때 사용할 방식 encoding=UTF-8 자바의 버젼=11 스프링의 버젼= 5.3.14 그럼 앞으로 스프링 버젼이 동일하다면 ${spring.version}사용할 수 있다. spring-context 와 spring-webmvc의 차이 spring-context web용 springContainer의 jar파일이다. 웹서버에서 c..
new ->project ->maven -> new maven project설치 고를 수 있는 project로 All catagory를 클릭한다. org.apache.maven.web클릭 후 완성을 클릭한다. pom.xml에서 UTF-8을 11로 변경하고 maven에서 update를 진행한다. properties-> targetRuntime->아파치를 9로 설정한다. 실무에서는 java8,9를 사용할 것이다. 프로젝트는 유지보수가 중요하기 때문에 검증된 것을 사용할 것이고, 톰캣도 낮아서 걱정할 필요는 없을 것이다. pom.xml설정방법 mvnrepository.com으로 접속한다. 의존성 주입 1. spring web application개발에 필요한 라이브러리 의존성 추가 org.springframe..
myBatis란 SQL mapper Framwork 이다. [파라미터 객체]-[SQL]-[리절트 객체] paramether객체 SQL실행에 필요한 값을 표현하는 객체 result객체 SQL실행결과 값을 표현하는 객체 예시 insert int employees(employee_id, first_name, last_name) values (employees.seq.nextval, ?, ?) 필요한 값이 2개가 필요하다. 파라미터의 객체 : Employee 객체가 필요하다 SQL 실행에 필요한 값을 Employee객체에 담을 수 있다. 리절트 객체는 없다. insert, update, delete작업은 조회하지 않는 작업으로 객체가 존재하지 않는다. 예시 delete from employees where de..
어노테이션의 구성 @Target과 @Retention은 꼭 필수로 입력되어야한다. @Target 어노테이션의 부착대상을 지정한다. ({ElementType.CONSTRUCTOR : 생성자에 부착해도 된다. ElementType.METHOD : 메소드에 부착해도 된다. ElementType.PARAMETER : 매개변수 메소드에 부착해도 된다. ElementType.FIELD : 클래스의 멤버변수에 부착해도 된다 ElementType.ANNOTATION_TYPE : 다른 어노테이션 타입에 부착해도 된다. ElementType.TYPE : 클래스, 인터페이스에 부착해도 된다. }) ({부착대상, 부착대상, 부착대상}) 배열의 형태로도 올 수 있다. @Retention 어노테이션의 유지되는 시점을 정의한다. ..
요청 URL http:// localhost:8080/emp/detail.do?id=102 요청 핸들러 메소드 @RequestMapping("/detail.do") public String detail(){ return "employees/detail.jsp"}; id값이 필요하다. 이제는 jsp에 id=""처럼 넣지 않고, 요청핸들러메소드에서 id가 필요시 detail(int id)처럼 매개변수선언하면 spring이 자동으로 요청파라미터값을 확인하고 해당하는 변수이름 값에 값을 저장한다. 2개면 detail(int id, int cpno)처럼 요청파라미터의 값을 획득할 수 있다. 똑같은 이름의 변수를 선언하면 RequestMappingHandlerMapping이 Arguments: [{}] 핸들러 메소..
기본적으로 Spring Container는 2개로 만들 수 있다. 하나는 Root Spring Container 와 Child Spring Container이다. ServletContext는 web이 시작되는 시점에 만들어진다. 웹서버가 시작될 떄, 웹서버가 종료될 때 실행할 작업을 구현한다. ServletContextListener 인터페이스를 구현한 사용자 정의 ServletContextListener를 정의한다. ServletContextListener의 ContextInitialized()는 ServletContext의 초기화가 완료되면 실행되는 메소드다 ServletContext의 초기화는 서버가 시작될 때 완료 된다. ServletContextListener의 ContextDestroyed()..
BasicDataSource connectionPool을 가지고 있다. 데이터베이스에서 밀리 Connection객체를 만들고 보관, 관리하고 있다. 미리 connection을 맺고 있기 때문에 connection에 대한 시간이 줄어 든다. common-dbcp 라이브러리가 제공하는 BasicDataSource는 가장 일반적으로 많이 사용되는 DataSource의 구현체이다. jdbc드라이버의 클래스명, 데이터베이스 접속 URL, 사용자명, 비밀번호를 제공해야한다. 종류가 많고, DataSource를 구현한 객체이면 된다. JdbcTemplate int update(String sql, object...args) insert, update, delete T queryForObject(String sql, ..
의존성 주입 SampleController는 UserService와 ProductService에 의존하고 있다. 즉, UserService와 ProductService에 대한 구현객체가 필요하다. SampleController는 자신이 의존한 객체의 구체적인 이름대신 인터페이스에 대한 정보만 가지고 있다. SampleController객체가 실제로 사용하게 될 객체는 spring Container가 bean설정 정보를 로딩해서 객체 생성하고, 조립하는 시점에 결정된다. 소스네벨에서 의존하는 객체가 결정되어 있으면, 의존하는 객체를 변경해야할 때, 소스를 수정하고, 컴파일을 다시해야한다. 의존성 주입을 사용하면, 소스 코드 수정없이 환경설정파일에서 의존성 주입할 객체를 변경하기만 하면 된다. 둘이 느슨하게..
의존성 주입의 수동 주입 방법 setter setter injection(setter메소드를 이요한 의존성 주입) 의존하는 객체를 담는 멤버변수를 정의한다. 멤버변수 갯수만큼 setter메소드를 정의한다. 스프링 bean설정파일에서 태그를 이용해서 의존하는 객체를 주입시킨다. //name : setter메소드이름, ref:setter메소드의 매개변수로 전달되는 객체의 빈 아이디 public class SampleController{ //의존성 주입을 통해서 전달받은 객체를 저장하는 변수 UserService userService; //멤버변수의 타입은 의존성 주입을 받는 객체의 부모타입이다. ProductService productService; //의존하는 객체를 전달받을 setter메소드 public..
Spring은 POJO기반의 javaEE 애플리케이션 개발을 지원하는 경량(light-weight)의 프레임워크이다. POJO plain old java object 평범한 옛날 자바 객체 plain 특별한 라이브러리, 특별한 실행환경이 필요하지 않은 객체 특정환경에 종속되지 않는 객체 개발하기 쉽다. 재사용성이 높다 테스트가 용이하다. old EJB등장이전의 평범한 자바객체로 개발하던시절 new키워드로 객체를 생성하고 사용하던 시절 특별한 실행환경이 필요없던 시절 특별한 환경 혹은 라이브러리에 종속되지 않는 재사용성이 높고, 테스트하기 쉬운 객체 특징 경량의 프레임워크다. 여러개의 라이브러리로 구성되어 있다. 필요없는 기능은 뺴버려도된다. 꼭 필요한 라이브러리로 구성할 수 있다. 경량의 프레임워크다. ..
UserController, UserServiceImpl는 기대하는 객체이다. context-2.xml에는 namespace라는 추가적인 파일을 사용할 예정이다. context를 체크하고, 으로 작성하는 방법이다. base-package는 사용할 파일이 있는 경로를 입력한다. com.sample이라고 작성하면 *라는 의미로 전체의 파일을 사용할 수 있다. 여러가지 class로 종류가 많다. spring Container도 많다. 클래스에 따라서 계층에 맞게 사용되도록한다. @Controller 컨트롤러를 표현한다. @Repository 데이터베이스를 영속화 한다. @Service 업무로직 프론트컨트롤러가 전달, 허용하는 곳에 전달해서 관리한다. Activates various annotations to ..
e-Gov-FramDev 국공기업 공공기관으로 프로젝트를 진행하게 되면 개발사, 셋팅, 환경, 라이브러리가 전부다 다르다. 그럼 유지보수를 하기 어렵기 때문에 표준프레임워크를 만들기 시작했다. spring 기반의 '2007'버젼, 무조건 프로젝트를 진행할 때 사용하며, 필수적으로 배워야한다. 프로젝트가 규모가 클때 라이브러리가 많아지고, 라이브러리를 관리하기 어렵다. 프로젝트 생성도구와 프로젝트 관리도구가 필요하고, 배포, 패키징 등 별도의 툴이 중요하다. maven, ant, gradle등의 tools이 중요하다. 대표적으로 프로젝트 빌드도구 tools은 1. maven(자바기반) 과 2. gradle(그루비기반)가 사용된다. 둘 다 사용해도 되지만, 우리는 maven을 사용할 예정이다. 그러면 위의 ..
먼저 vo객체인 user에 대해서 생성자 , setter, getter메소드를 설정한다. userService인 interface를 설정하고, implements를 해서 return으로 new User(매개변수 입력)한다. resources에는 spring의 의존성을 주입하기위한 context-1.xml파일을 생성한다. spring bean configuration으로 만든 파일로 생성하면 된다. 그리고 UserController에 의존성객체인 private UserService userService; 를 입력한다. 현재까지는 new로 새로운 객체를 생성했지만 이제부터는 singleton객체로 만들어진 UserService로 사용할 예정이다. 싱글턴패턴은 원래 private static UserServi..
한마디로 정의하면 객체를 생성하는 공장, 생성된 객체를 조립하는 어셈블러이다. 어셈블러 : 기계어 형태로 오브젝트 코드를 해석해주는 컴퓨터 언어번역 프로그램 객체를 생성하고 조립하는 공장이 spring이다. 우리는 지금까지 표현계층, 서비스계층, 영속화계층에서 클래스를 사용할 때는 new라는 키워드로 생성했다. 소스파일, 다시코딩하면 다시 컴파일을 진행했다. DB시스템 종류에 따라서 혹은 클라이언트의 통신방법에 따라서 업무로직이 변경되는데, 여러 곳에서 사용시 종류가 달라서 유지보수가 힘들다는 단점이 존재했다. 어느패키지에서 어느 클래스를 생성할 껀지, spring에게 알려주면 환경 설정 파일을 통해 어떤 패키지 인지 명시를 하면, 자바클래스를 읽어서 객체를 생성하게 된다. 이를 spring 환경설정파일..
이클립스에서 사용하면 help -> eclipse market -> 이것을 다운받으면 spring 프레임워크와 동일한 환경이 완성된다. spring 4부터는 Jsp를 지원하지 않아 encoding에서도 html, jsp를 확인할 수 없다. 우리나라는 jsp기반의 개발을 많이하기 때문에 설치해주어야하는 것이 한개 더 있다. 이tool을 설치한 뒤, accept클릭 후 설치, 그러면 encoding을 UTF-8로 모두 설정해준다. 그럼 수업들을 준비는 완료 되었다. spring은 timeleaf를 더 많이 사용하도록 권장하고 있다.