Microsoft Word - Ch 17. Web Application with Spring MVC.doc

Size: px
Start display at page:

Download "Microsoft Word - Ch 17. Web Application with Spring MVC.doc"

Transcription

1 Chapter 17. Web Applications with Spring MVC * 개요 1. MVC구조 : model1 과 model2 를포함한 MVC구조에대해서언급한다. 2. Spring MVC : MVC구조의컴포넌트를 Spring웹애플리케이션내에서구현하는방법에대해언급한다. 3. controller : 컨트롤러를 Spring내에서구현하는방법과특정요청을다루는컨트롤러를구분하는방법을언급한다. 4. 테마 (Themes) 와로케일 : 국제화와테마를설정하는방법을언급한다. * MVC 는무엇인가.? MVC 는 Model View Controller 의줄임말이다. 이패턴의목적은사용자요청에작동하고데이터를 조작하고표현할필요가있는애플리케이션의구현을단순화하는데있다. 이패턴에는다음과같은 3 가지의구별된컴포넌트가존재한다. + Model : 사용자가보게되는데이터를표현한다. 대개의경우, Model은자바빈으로구성된다. + View : model를표현한다. 웹애플리케이션의경우대개 HTML로표현이된다. + Controller : 사용자요청에반응하고처리하며적당한 model을빌드하고표현하기위한 view로이것을전달하는로직의일부이다. 대부분의자바웹애플리케이션의경우 controller는 servlet이다. 다음의그림은 MVC 의 type1 을나타내는그림이다.

2 이타입에서 JSP페이지는애플리케이션의핵심이된다. 그것은컨트롤로직과표현 (presentation) 모두를포함한다. 클라이언트는 JSP로요청을보내고, 페이지내로직은그다음빌드되고 model을표현한다. presentation레이어와 control레이어의구분이명확하지않다. JSP가수행할필요가있는로직의양이많기때문에 type1 의방식은조만간없어지게될것이다. model 2 는좀더큰애플리케이션내에서도관리가가능하도록해준다. model1 에서는 JSP페이지가 view도되고 controller도되지만, model2 에서는 controller를위한 JSP를분리한다. 사용자의요청을중간에서처리하는 controller는 model을준비하고, 표현을위한 view로 model을전달한다. JSP페이지는요청을처리하기위한로직을더이상포함하지않는다. 이것은단순히 controller에의해준비된 model을표시할뿐이다. 우리는 model1 에서는 view와 controller로 JSP를사용하고 model2 에서는 view로 JSP를사용한다. 하지만이것은 view가 JSP페이지에만제한되지는않기때문에올바르지않다. Spring MVC구조는 model2 MVC의구현이다. 게다가 view는모델을표현하고클라이언트로결과물을반환할수있는어떠한것도될수가있다. 다음의그림은 MVC 의 type2 를나타내는그림이다. * Introducing Spring MVC Spring MVC 는 MVC model2 패턴을사용하는유연한애플리케이션을빌드하도록지원한다. model 은 데이터를가지는간단한 Map 이다. View 는데이터를표현하는인터페이스이고, controller 는 Controller 인터페이스의구현물이다. 소개와개요 웹애플리케이션을위한 MVC 구조의 Spring 구현물은 DispatcherServlet 에기반을두고있다. 이 서블릿은요청을처리하고요청을다루기위한적당한 controller 를호출한다.

3 DispatcherServlet은들어오는요청을받아서어떤 Controller가요청을다룰지판단한다. Spring controller는핸들링메소드로부터 ModelAndView클래스를반환한다. ModelAndView인스턴스는 view와 model에대한참조를가진다. model은 view가표현할자바빈즈를가지는간단한 Map인스턴스이다. View는인터페이스이고, 클라이언트가해석할수있는어떠한것이라도될수있도록해준다. 구현 우리가 Spring 을사용한웹애플리케이션을생성하기를원한다면, 다음처럼 web.xml 에 DispatcherServlet 을명시하고명시된 url-pattern 을위한맵핑을셋팅해야만한다. <?xml version="1.0" encoding="iso "?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " <web-app> <display-name>pro Spring Chapter 17 Sample application</display-name> <description>dtto</description> <servlet> <servlet-name>ch171819</servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ch17</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name> ch171819</servlet-name> <url-pattern>*.tile</url-pattern> </servlet-mapping> </web-app>

4 이 web.xml 파일은 *.html 이나 *.tile 로들어오는모든요청을위해맵핑된 DispatcherServlet 의 ch 서블릿을정의한다. * 핸들러맵핑사용하기 Spring내에서 URL맵핑이어떻게작동을하는지알아보자. 당신은특정요청을위해호출될 controller가무엇인지 Spring에게알리기위한 URL맵핑을알아볼필요가있다. Spring은호출하는 controller를알아내기위해 HandlerMapping구현물을사용하고그구현물은아래와같다. HandlerMapping BeanNameUrlHandlerMapping 상세설명 bean이름은 URL에의해인식된다. 만약 URL이 /product/index.html 이라면, controller id 는 /product/index.html 로 셋팅될맵핑을다룬다. 이맵핑은요청내와일드카드를지원하지 않기때문에다소작은규모의애플리케이션에적합하다. SimpleUrlHandlerMapping 이핸들러는 controller 가요청을다루도록명시하는요청 ( 전체이름과 와일드카드를사용하여 ) 을명시하도록허용한다. * 핸들러 Interceptors 사용하기 interceptors는각각의맵핑을위해호출되는 interceptor의목록을명시할수있기때문에맵핑과관련이있다. HandlerIntereptor 구현물은적당한 controller이처리를하기전이나후에각각의요청을처리할수있다. 당신은 HandlerInterceptor 인터페이스를구현할수도있고모든 HandlerInterceptor메소드를위한디폴트구현물을제공하는 HandlerInterceptorAdapter를확장할수도있다. 다음은그예이다. import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.modelandview; import org.springframework.web.servlet.handler.handlerinterceptoradapter; public class BigBrotherHandlerInterceptor extends HandlerInterceptorAdapter {

5 public void posthandle(httpservletrequest request, HttpServletResponse response, Object handler, ModelAndView modelandview) throws Exception { // process the request 이러한 interceptor 의실질적인구현물은요청파라미터를처리하고그결과를로그에남길것이다. interceptor 를사용하기위해서, 우리는다음처럼 Spring 애플리케이션컨텍스트파일에 URL 맵핑과 interceptor bean 정의를생성한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="bigbrotherhandlerinterceptor" class="bigbrotherhandlerinterceptor" /> <bean id="publicurlmapping" class="org.springframework.web.servlet.handler.simpleurlhandlermapping"> <property name="interceptors"> <list> <ref local="bigbrotherhandlerinterceptor" /> </list> <property name="mappings"> <props> <prop key="/index.html">indexcontroller</prop> <prop key="/product/index.html">productcontroller</prop> <prop key="/product/view.html">productcontroller</prop> <prop key="/product/edit.html">productformcontroller</prop> </props> </bean> </beans>

6 당신은당신이하고싶은만큼많은수의 HandlerMapping 과 HandlerInterceptor bean 들을명시할수 있다. * controller 와작동하기 controller는요청을처리하고, 요청에기반하는 model을빌드하고표현을위한 view로 model을전달하는모든작업을수행한다. Spring의 dispatcherservlet은클라이언트로부터요청을받아서더많은처리를위해요청을위임하는 HandlerAdapter구현물을사용한다. 당신은전달해야만하는요청의묶음을변경하기위해 HandlerAdapter를구현할수있다. DispatcherServlet은사용하길바라는 HandlerAdapter을명시하도록하는 List handleradapter프라퍼티를가진다. HandlerAdapter구현물이순서대로호출되기위해, 당신은 HandlerAdapter사이의위치를표시하기위해당신의 HandlerAdapter내 Ordered 인터페이스를구현할수있다. DispatcherServlet의 handleradapters프라퍼티의값이 null이라면, DispatcherServlet은 SimpleControllerHandlerAdapter를사용한다. 우리는추가적인 HandlerAdapter구현물을제공하지않을것이기때문에, 우리의애플리케이션은 SimpleControllerHandlerAdapter을사용할것이다. SimpleControllerHandlerAdapter의 handle() 메소드는 ((Controller) handler).handlerequest(request, response), 를호출하기때문에, Spring handler bean은 Controller인터페이스를구현해야만하는 controller처럼작동한다. 이접근법은편리한수퍼클래스중하나를사용하여자신만의구현물을사용하는것을쉽게만든다. Controller인터페이스는당신의웹애플리케이션에서만사용될수있다는의미로 HttpServletRequest와 HttpServletResponse에의존한다. 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 IndexController implements Controller { public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { response.getwriter().println("hello, world");

7 return null; 우리가구현할필요가있는메소드는오직 ModelAndView handerrequest(httpservletrequest, HttpServletResponse) 이다. 우리는표현될 view가없고응답의출력을위해쓰여진출력은처분 (commit) 되었으며클라이언트에반환된다는의미로 ModelAndView로 null을반환한다. Spring은이미유용한많은수의수퍼클래스를제공하기때문에 Controller인터페이스를구현하는것은의미가없다. AbstractController AbstractController 는요청을처리하기위한 handlerequestinternal 메소드를구현하도록강요하는인터페이스를간단하게포장 (warpper) 한다. AbstractController 는요청과응답을제어하기위한추가적인프라퍼티를셋팅하는것을허용하는 WebContentGenerator 클래스를확장하기때문에, 부분적으로는사실이다. 추가적으로, WebContentGenerator 는 ApplicationContextAware 를구현하는 ApplicationObjectSupport 를확장하는 WebApplicationObjectSupport 를확장한다. 반면에, Controller 인터페이스를구현하는것보다 AbstractController 로부터당신의 controller 를확장하는것이직접적으로 ServletContext, WebApplicationContext, ApplicationContext, Log, 그리고 MessageSourceAccessor 에접근하도록해준다. 프라퍼티 설명 디폴트값 supportedmethods 지원되고허용되는 HTTP 메소드 GET, POST requiressession HttpSession 인스턴스가요청을처리하는데 요구되는지에대한명시 false useexpiresheader HTTP 1.0 expires 헤더를사용할지에대한명시 true usecachecontrolheader cacheseconds synchronizeonsession HTTP 1.1 cache-control 헤더를사용할지에대한명시명시된초 (second) 동안생성된결과물을캐시할지를클라이언트에지시 handlerequestinternal 를호출하기전에 HttpSession 의인스턴스를통기화할지에대한명시. true 1 false

8 프라퍼티 설명이것은같은클라이언트로부터요청핸들링에재진입하는데유용하다. 디폴트값 예를들면, 위값중에 cacheseconds 프라퍼티를 10 으로셋팅하고클라이언트에서페이지를새로고 침한다면결과로써, 우리는매번 10 마다서버로부터새로운결과물을가져온다. import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.modelandview; import org.springframework.web.servlet.mvc.abstractcontroller; public class IndexController extends AbstractController { protected ModelAndView handlerequestinternal(httpservletrequest request, HttpServletResponse response) throws Exception { setcacheseconds(10); response.getwriter().println("hello, world at " + System.currentTimeMillis()); return null; ParameterizableViewController 이것은 AbstractController 의간단한하위클래스이다. 이것은 viewname 프라퍼티내셋팅된이름을가진새로운 model 을반환하기위한 handlerequestinternal 메소드를구현한다. model 로삽입된데이터는없고, 이것의이름을사용하여 view 를간단히표시하기위해이 controller 을사용할것이다. 다음은 ParameterizableViewController 의기능을보여주기위해생성된 ParameterizableIndexController 를보여준다. import org.springframework.web.servlet.mvc.parameterizableviewcontroller; public class ParameterizableIndexController extends ParameterizableViewController {

9 다음의 xml 파일에서, 우리는애플리케이션컨텍스트파일로 parameterizableindexcontroller bean 을 추가하고, publicurlmapping bean 으로참조를추가하는것처럼 product-index 에 viewname 프라퍼티 를셋팅한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="publicurlmapping" class="org.springframework.web.servlet.handler.simpleurlhandlermapping"> <property name="interceptors"> <list> <ref local="bigbrotherhandlerinterceptor" /> </list> <property name="mappings"> <props> <prop key="/index.html">indexcontroller</prop> <prop key="/pindex.html"> parameterizableindexcontroller </prop> <prop key="/product/index.html">productcontroller</prop> <prop key="/product/view.html">productcontroller</prop> <prop key="/product/edit.html"> productformcontroller </prop> <prop key="/product/image.html"> productimageformcontroller </prop> </props> </bean>

10 <bean id="parameterizableindexcontroller" class="parameterizableindexcontroller"> <property name="viewname"> <value>products-index</value> </bean> </beans> MultiActionController 이것또한모든프라퍼티와메소드에접근하는의미를가지는 AbstractController 의하위클래스이다. 이것은당신이필요한 public ModelAndView(HttpServletRequest, HttpServletResponse) throws Exception 의많은구현물을제공한다. 당신은 MultiActionController 의하위클래스내의메소드를구현하기위해선택할수있거나이러한메소드를구현하는위임객체를명시할수있다. 후자의경우, MultiActionController 는위임객체의메소드를호출한다. AbstractController 에추가적인두개의프라퍼티인 delete 와 methodnameresolver 는어떠한객체의메소드가각각의요청에대해호출되는지를 MultiActionController 에게알리기위해사용된다. 만약 delete 프라퍼티가 null 이라는디폴트값으로남겨진다면, 메소드는검색하고 (look up) MultiActionController 하위클래스의메소드를호출한다. 만약 delegate 가 null 이아니라면, 메소드를 delete 의것을호출한다. methodnameresolver 는 MethodNameResolver 의구현물로셋팅되어야만한다. MethodNameResolver 의 3 가지구현물은아래와같다. 구현물 설명 InternalPathMethodNameResolver 메소드이름은 path 의마지막부분으로부터확장자를제외하고얻어진다. 이 resolver path 가사용될때, /servlet/foo.html 은 public ModelAndView foo(httpservletrequest, HttpServletResponse) 처럼선언된메소드로맵핑된다. 이것은 MultiActionController 내사용되는디폴트구현물이다. ParameterMethodNameResolver 메소드이름은특정요청파라미터로부터얻어진다. 디폴트 파라미터이름은 action 이다. 당신은컨텍스트파일에서파라미터 이름을변경할수있다. PropertiesMethodNameResolver 메소드이름은외부프라퍼티파일로부터해석된다. 당신은 /test.html=handletest 처럼정확하게맵핑을명시할수도있고, /*= handleallts 처럼와일드카드를사용할수도있다.

11 당신의애플리케이션에위의것중에적합한것이없다면, 당신은자신만의 MethodNameResolver 를 구현할수있다. 다음의소스는 MultiActionController 하위클래스의가장간단한구현물을보여준다. import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.modelandview; import org.springframework.web.servlet.mvc.multiaction.multiactioncontroller; public class ProductController extends MultiActionController { throws Exception { public ModelAndView view(httpservletrequest request, HttpServletResponse response) request.getparameter("productid")); response.getoutputstream().print("viewing product " + return null; 위 ProductController 는오직 view() 라는하나의메소드만을추가했다. 만약 path /product/* 가컨테이너에맵핑되고, 요청이 /product/view.html?productid=10 이라면, 브라어저내출력은 Viewing product 10 을보게될것이다. 디폴트에의해 MultiActionController 는 methodnameresolver 처럼 InternalPathMethodNameResolver 를사용하고, delegate 프라퍼티는 null 이된다. 왜냐하면 view() 메소드는 ProductController 의메소드가호출되기때문이다. 다른 methodnameresolver 가설정되는방법을보자. 디폴트에의해, ParameterMethodNameResolver 는메소드이름을얻기위한것으로부터파라미터이름같은 action 을사용한다. 우리는아래와같이 paramname 프라퍼티를셋팅하여변경할수있다. 우리는 paramname 파라미터가호출될메소드의이름을위해 defaultmethodname 프라퍼티를셋팅하여요청내존재하지않을때호출되는메소드이름을명시할수있다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

12 " <beans> <!-- other beans --> <bean id="productcontroller" class="productcontroller"> <property name="methodnameresolver"> <ref local="productmethodnameresolver" /> </bean> <bean id="productmethodnameresolver" class="org.springframework.web.servlet.mvc.multiaction.parametermethodnameresolver"> <property name="paramname"> <value>method</value> <property name="defaultmethodname"> <value>view</value> </bean> </beans> 만약우리가 /product/a.html 로요청을보내고, 메소드파라미터를명시하지않는다면, ProductController.view 가호출된다. 우리는 /product/a.html?method=view 로요청을보낸다면같은행위를하게될것이다. 만약우리가 /product/a.html?method=foo 로요청을보낸다면, 우리는 public ModelAndView foo(httpservletrequest, HttpServletResponse) 메소드가 ProductController 내구현되지않아서에러메시지를보게될것이다. 마지막으로 PropertiesMethodNameResolver 는 InternalPathMethodNameResolver 와는달리요청 URI 에의존한다. 우리는 Spring 컨텍스트파일에메소드이름을명시할수있다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans>

13 <!-- other beans --> <bean id="productcontroller" class="product.productcontroller"> <property name="methodnameresolver"> <ref local="productmethodnameresolver" /> </bean> <bean id="productmethodnameresolver" class="org.springframework.web.servlet.mvc.multiaction.propertiesmethodnameresolver"> <property name="mappings"> <props> <prop key="/product/view.html">view</prop> <prop key="/product/v*.html">view</prop> </props> </bean> </beans> 위코드는 PropertiesMethodNameResolver 를사용하는방법을보여준다. 우리는 mappings 프라퍼티 를설정할필요가있고 mapping 의목록과그것들의핸들러메소드를추가할필요가있다. 위소스는 ProductController 내 public ModelAndView view(httpservletrequest, HttpServletResponse) 로 /product/v*.html 처럼 /product/view.html 을선언했다. 이 MethodNameResolver 의이득은맵핑문자열내와일드카드를사용할수있다. 이러한 controller 는매우유용하다. 하지만우리가사용자에의해서브밋된입력을처리한다면, 우리는서브밋된값을얻고에러메시지를처리하는데많은코드를작성해야만한다. Spring 은다양한 command controller 를제공하여이처리를단순화한다. * Views, Locales, and Themes Using Views Programmatically 이예제에서, 우리는 View 를구현하고 AbstractController.handleRequestInternal() 의결과인 ModelAndView 클래스로이구현물을반환한다. 우리의 view 는 View 인터페이스로부터오직하나 메소드인 render(map, HttpServletRequest, HttpServletResponse) 를구현해야만한다. 아래의코드

14 에서생성한 View 구현물은 model 로부터텍스트파일로모든데이터를출력하고클라이언트로표시 하기위한응답헤더를셋팅한다. import java.io.printwriter; import java.util.iterator; import java.util.map; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.view; public class PlainTextView implements View { throws Exception { public void render(map model, HttpServletRequest request, HttpServletResponse response) response.setcontenttype("text/plain"); response.addheader("content-disposition", "attachment; filename=output.txt"); PrintWriter writer = response.getwriter(); for (Iterator k = model.keyset().iterator(); k.hasnext();) { Object key = k.next(); writer.print(key); writer.println(" contains:"); writer.println(model.get(key)); 아래에서우리는사용자지정 view 를반환하기위해 IndexController 를변경한다. public class IndexController extends AbstractController {

15 protected ModelAndView handlerequestinternal(httpservletrequest request, HttpServletResponse response) throws Exception { setcacheseconds(10); Map model = new HashMap(); model.put("greeting", "Hello World"); model.put("server time", new Date()); return new ModelAndView(new PlainTextView(), model); /index.html 경로로요청을보내보자. IndexController.handleRequestInternal 메소드는호출되고이것은 PlainTextView 의인스턴스로셋팅되는 View 를가진 ModelAndView 의인스턴스를반환하며 model Map 는 Greeting 와 Server time 키를포함한다. PlainTextView 의 render() 메소드는헤더정보를셋팅한다.

16 이예제는하나의단점을가진다. IndexController 내코드는각각의요청에대해 PlainTextView 의인 스턴스를생성한다. view 는비상태유지객체이기때문에이것은다소불필요하다. 다음에서우리는 애플리케이션을향상시키고 PlainTextView Spring bean 을만든다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="plaintextview" class="plaintextview" /> <!-- other beans as usual --> </beans> 우리는각각의요청을위해 PlainTextView 의인스턴스를인스턴스화하는대신에 PlainTextView bean 을사용하기위해아래와같이 IndexController 의 handlerequestinternal() 메소드를변경할필요가 있다. public class IndexController extends AbstractController { protected ModelAndView handlerequestinternal(httpservletrequest request, HttpServletResponse response) throws Exception { setcacheseconds(10);

17 Map model = new HashMap(); model.put("greeting", "Hello World"); model.put("server time", new Date()); View view = (View) getapplicationcontext().getbean("plaintextview"); return new ModelAndView(view, model); 위소스는이전의것보다는좋다. 각각의요청은 PlainTextView bean 의같은인스턴스를얻게된다. 하지만여전히이상적이지는않다. 전형적인웹애플리케이션은굉장히많은수의 view 로구성이되고, 이러한방법으로 view 를설정하는것은불편하다. 게다가어떤 view 는더많은설정을요구한다. JSP view 를얻는것은예를들면, JSP 페이지의경로를필요로한다. 만약우리가 Spring bean 처럼손으로일일이모든 view 를설정한다면, 우리는분리된 bean 처럼각각의 JSP 페이지를설정해야만한다. 우리가 view 를설정하고 Spring 에대해작동하는모든것을위임하는좀더쉬운방법을가진다면이것은굉장히좋은상황이라고할수있다. 이러한요구사항을만족시키는것이 view resolver 이다. Using ViewResolver Implementations ViewResolver 는전략적인인터페이스이다. Spring 은이름과로케일에기반하여적당한 view 를찾고인스턴스화하기위해사용한다. 다양한 view resolver 는당신의애플리케이션을좀더유지보수를수비게하도록해주는 ViewResolver 인터페이스의하나의메소드인 View resolveviewname(string viewname, Locale locale) throws Exception 를모두구현한다. locale 파라미터는 ViewResolver 가다른클라이언트로케일을위한 view 를반환할수있도록해준다. 구현물 BeanNameViewResolver 상세설명애플리케이션컨텍스트내설정된 bean 처럼 view 를얻기위해시 도하는간단한 ViewResolver 구현물이다. 당신은 view 정의를고정하는다른파일을생성하는것을원하지않는좀더작은규모의애플리케이션을위해유용하다는것을알수있을것이다. 어쨌든, 이 resolver 는여러가지제한점을가진다. 가장골치아픈것은당신이애플리케이션컨텍스트내 Spring bean 처럼 view 를설정해야만한다는것이다. 또한이것은국제화 (internalization) 를지원하지

18 구현물 상세설명 않는다. ResourceBundleViewResolver 이것은좀더복잡한 resolver 이다. 이경우, view 정의는각각분리 된설정파일에서유지된다. 당신은애플리케이션컨텍스트파일내 view bean 을설정할필요는없다. 이 resolver 는국제화를지원한다. UrlBasedViewResolver 이 resolver 는 URL 에기반하여적당한 view 를인스턴스화한다. 당신은접두사나접미사를가지는 URL 을설정할수있다. 이 resolver 는당신에게 BeanNameViewResolver 보다좀더 view 에 대한제어를가능하게해준다. 하지만이것은좀더큰애플리케이 션을관리하는것을어렵게할수있고국제화를지원하지않는다. XmlViewResolver 이 view resolver 는 view 정의가분리된파일에서유지되기때문에 ResourceBundleViewResolver 와유사하다. 하지만국제화는지원 하지않는다. 우리는 Spring 내에서사용가능한 ViewResolvers 와그것들의각각의장점과단점을알아보았다. 가장 복잡한기능을제공하는 ResourceBundleViewResolver 에대해서알아보자. viewresolver bean 정의 를포함하는컨텍스트파일을변경하는것으로시작해보자. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="viewresolver" class="org.springframework.web.servlet.view.resourcebundleviewresolver"> <property name="basename"> <value>views</value> </bean> <!-- etc --> </beans> 이것은 Spring 이모든 view 이름을해석하기위해사용하는 viewresolver bean 을소개한다. 클래스 는 ResourceBundleViewResolver 이고, 이것의 basename 프라퍼티는 views 이다. 이것은

19 ViewResolver 가클래스패스에서 views_<lid>.properties 파일을찾는다는것을의미한다. 여기서 LID 는로케일구분자 (EN, CS 그리고기타등등 ) 를말한다. 만약 resolver 가 views_<lid>.properties 파일을찾지못한다면, 이것은 views.properties 파일을열것이다. 이 resolver 내국제화지원을보여주기위해, 우리는 views.properties 와 views_cs.properties 를생성한다. properties 파일의형식은아래와같이 viewname.class=class-name 와 viewname.url=view-url 이다. #index products-index.class=org.springframework.web.servlet.view.jstlview products-index.url=/web-inf/views/product/index.jsp 이파일을유지하는가장좋은방법은디렉토리구분자처럼 / 를사용하여애플리케이션의논리적인 구조를따라유지보수하는것이가장쉽다. #index user-edit.class=org.springframework.web.servlet.view.jstlview user-edit.url=/web-inf/views/user /edit.jsp 유사하게도우리는 /web-src/as-web/web-inf/views/product 내 index.jsp 와 index_cs.jsp 를생성 한다. 마지막으로우리는 Product 객체의목록을반환하기위해 ProductController 를변경하고 view 에서이목록을보여준다. public class ProductController extends MultiActionController { private List products; private Product createproduct(int productid, String name, Date expirationdate) { Product product = new Product(); product.setproductid(productid); product.setname(name); product.setexpirationdate(expirationdate); return product; public ProductController() { products = new ArrayList();

20 Date today = new Date(); products.add(createproduct(1, "test", today)); products.add(createproduct(2, "Pro Spring Appes", today)); products.add(createproduct(3, "Pro Velocity", today)); products.add(createproduct(4, "Pro VS.NET", today)); public ModelAndView index(httpservletrequest request, HttpServletResponse response) { return new ModelAndView("products-index", "products", products); // other methods omitted for clarity 당신이보는것처럼, 한가지의변경사항은 index() 메소드내에서 ModelAndView(View,...) 대신에 ModelAndView(String, String, Object) 가호출된다는것이다. 이애플리케이션을테스트하기위해, Czech 가아닌다른언어를브라우저에셋팅하라. Spring 은 URL 을 /WEB-INF/product/index.jsp 로셋팅하고결과물을표시하는 JstlView 타입의 product-index View 를생성한다. 결과물은다음과같다. 만약우리가 Czech 로언어를변한다면, 다음처럼 view resolver 는 JstlView 이고 URL 프라퍼티가 /WEB-INF/products/index_CS.jsp 를가리키는 index_cs 의인스턴스를생성한다.

21 view 를일일이수동으로인스턴스화하는것보다 view resolver 를사용하는것은설정파일을좀더단순화하는이득을준다. 하지만이것은애플리케이션의메모리를감소시킨다. 만약우리가 Sprinb bean 처럼각각의 view 를정의한다면, 이것은애플리케이션시작시인스턴스화된다. 만약우리가 view resolver 를사용한다면, view 는인스턴스화되고첫번째요청시캐시된다. Using Localized Messages 우리가 Sprnig 웹애플리케이션내로케일을이야기하기전에, 우리는 spring:message 태그를사용하 여표시될메시지를위한실질적인텍스트를해석하는방법을봐야만한다. Spring 이찾는디폴트 bean 이름은 messagesource 이다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="basename"> <value>messages</value> </bean> </beans>

22 로케일사용하기 Spring 은요청을받아서로케일을가져오거나셋팅하기위해이것의메소드를호출하기위해 LocaleResolver 인터페이스를사용한다. LocaleResolver 의다양한구현물이있다. 다음처럼각각은특 별한사용법과프라퍼티를가진다. 구현물 AcceptHeaderLocaleResolver 상세설명이로케일 resolver는애플리케이션을위해사용자에이전트에의 해보내어진 accept- language 헤더에기반하여로케일을반환한다. 만약이 resolver가사용된다면, 애플리케이션은사용자가선호하는언어를자동적으로나타낼것이다. 만약당신이다른언어로변경하기를원한다면브라우저셋팅을변경해야한다. CookieLocaleResolver 이로케일 resolver 는로케일을확인하기위해클라이언트머신의 쿠키를사용한다. 이것은브라우저셋팅의변경없이나타내고자하는언어를명시하도록해준다. 이로케일 resolver를사용하여, 우리는사용자의브라우저쿠키저장소를사용하여로케일셋팅을저장할수있다. FixedLocaleResolver 이것은설정된하나의로케일만을반환하는 LocaleResolver 의매 우간단한구현물이다. SessionLocaleResolver 이 resolver 는 CookieLocaleResolver 처럼작동한다. 하지만로케 일셋팅은쿠키에저장되지않고세션이종료되면사라진다. Using Themes 사용자언어로애플리케이션의 view를제공하는데추가적으로, 당신은사용자의경험을향상시키기위해테마를사용할수있다. 테마는스타일시트와내장된이미지의모음이다. Spring은 JSP페이지내지원되는테마가가능하도록하기위해사용할수있는태그라이브러리를제공한다. 테마의사용을보여주기위해사용될디렉토리구조는아래와같다.

23 당신이보는것처럼우리는테마디렉토리를추가하고두개의새로운프라퍼티파일 (cool.properties,default.properties) 을생성했다. 프라퍼티파일의내용은아래와같이정적인테마 자원의위치를명시한다. css=/themes/cool/main.css 프라퍼티파일내 key 는테마 resolver 에의해드러나는 key 를명시한다. 그리고프라퍼티의 value 는 테마자원의위치를명시한다. 우리는 Spring 태그라이브러리를사용하여 JSP 페이지내이정의를사 용할수있다. prefix="c" uri=" prefix="spring" uri=" <html> <head>

24 <c:set var="css"> <spring:theme code="css" /> </c:set> <c:if test="${not empty css"> <link rel="stylesheet" href="<c:url value="${css" />" type="text/css" /> </c:if> </head> <body> This page lists all available products:<br> <c:foreach items="${products" var="product"> <c:out value="${product.name" /> <a href="view.html?productid=<c:out value="${product.productid" />">[View]</a> <a href="edit.html?productid=<c:out value="${product.productid" />">[Edit]</a> <br><hr> </c:foreach> <br> <a href="edit.html">[add]</a> </body> </html> 마지막으로, 우리는 Spring 애플리케이션컨텍스트를변경하고 themeresolver bean 을추가할필요가 있다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="themeresolver" class="org.springframework.web.servlet.theme.fixedthemeresolver"> <property name="defaultthemename"> <value>cool</value> </bean>

25 </beans> <!-- other beans as usual --> 애플리케이션컨텍스트파일은애플리케이션이 defaultthemename가 cool로셋팅되는 FixedThemeResolver를사용하는것을명시한다. 그러므로테마는클래스패스의가장상위의 cool.properties파일로부터로드된다. 테마는스타일시트가아닌이미지나영상과같은어떠한종류의정적인내용을포함할수있다. 이것은또한이미지가다른언어로번역될필요가있는텍스트를포함하기때문에국제화를지원해야만한다. 테마 resolver내국제화지원은 ResourceBundleViewResolver내국제화지원과완전히동일하게작동한다. 테마 resolver는 theme_<lid>.properties 를로드할려고시도한다. 여기서 LID는로케일구분자 (EN, CS 또는기타등등 ) 이다. 만일 LID를가진 properties파일이존재하지않는다면, resolver는 LID없는 properties파일을로드하기를시도할것이다. ViewResolvers 와 LocaleResolvers처럼, ThemeResolvers 에도다음처럼다양한구현물이있다. 테마 Resolver CookieThemeResolver 상세설명이것은사용자별로셋팅되는테마를허용하고클라이언트컴퓨터의 쿠키를저장하여테마참조를저장한다. FixedThemeResolver 이테마 resolver 는 bean 의 defaultthemename 프라퍼티에셋팅된 하나의고정된테마를반환한다. SessionThemeResolver 이것은사용자세션별로셋팅되는것을허용한다. 이테마는세션사 이에유지되지는않는다. * Command Controller 사용하기 전형적인애플리케이션은사용자로부터데이터를모으고처리한다. Spring은 controller로보내어진데이터를처리하는 command Controller를제공한다. 우리가다양한 command Controller에대해언급하기이전에 command Controller의개념을알아보자. command controller는 form 서브밋으로부터활성화되는 command 객체의프라퍼티를허용한다. command controller는데이터유효성체크를단순화하기위한 Spring 태그라이브러리로작동한다. command controller는모든비즈니스유효성체크를수행하기에는이상적이다. 유효성체크가서버에서발생할때, 사용자가유효성체크를무시하는것은불가능하지만, 당신은모든유효성체크를수행하기위해웹티어에의존하지않고비즈니스티어에서재입증할게될것이다. 기술적인측면에서, command controller구현물은대개도메인객체인호출되는 command객체를나타낸다. 우리의애플리케이션에서사용할수있는 command controller를살펴보자.

26 + AbstractCommandController AbstractController 처럼, 이것은 Controller인터페이스를구현한다. 이클래스는실질적으로 HTML form 서브밋을다루기위해디자인된것은아니지만, 유효성체크와데이터바인딩을위한기본적인지원을제공한다. 당신은자신만의 command controller를구현하기위해이클래스를사용할수있다. + AbstractFormController AbstractFormController클래스는 AbstractCommandController를확장하고실질적으로 HTML form서브밋을다룰수있다. 반면에, 이 command controller는 HttpServletRequest내값을처리하고 controller 의 command객체를활성화한다. AbstractFormController 또한중복 form 서브밋을찾아내는능력을가진다. 그리고 Spring 컨텍스트파일보다는코드내표현되는 view를명시하도록허용한다. + SimpleFormController 이것은 HTML form을처리하기위해가장공통적으로사용되는 command controller이다. 이것은또한사용하기쉽게디자인되었다. 당신은 initial( 초기화 ) view와 success( 성공 ) view를표시하기위한 view를명시할수있다. 그리고당신은서브밋된데이터를활성화할필요가있는 command객체를셋팅할수있다. + AbstractWizardFormController 이름이제시하는것처럼, 이 command controller는페이지의마법사스타일세트를구현하기위해유용하다. 이것은또한당신이현재 HttpSession내 command객체를유지하고현재페이지의데이터가유효한지와마법사가다음페이지에도계속될수있는지를체크하기위한 validatepage() 메소드를구현할필요가있다는것을내포한다. 마지막으로 AbstractWizardFormController는마법사가처리하는마지막페이지를처리하는것을표시하기위한 processfinish() 메소드를수행한다. 그리고데이터는유효하고비즈니스티어로전달될수있다. Using Form Controllers 지금당신은선택해야할 form controller가무엇인지안다. form controller가어떻게사용되는지예제를통해서보자. 우리는가장간단한 form controller로시작하고유효성체크와사용자정의포맷터를추가한다. 가장간단한 controller 구현물은 onsubmit() 메소드를오버라이드하고디폴트생성자를제공하는 SimpleFormController를확장한다. public class ProductFormController extends SimpleFormController {

27 public ProductFormController() { super(); setcommandclass(product.class); setformview("products-edit"); protected ModelAndView onsubmit(httpservletrequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { System.out.println(command); return new ModelAndView("products-index-r"); ProductFromController의생성자는 command클래스가 Product.class임을정의한다. 이것은이 controller가생성하는객체가 Product의인스턴스임을의미한다. 다음으로, 우리는사용자가 form을서브밋할때호출되는 onsubmit() 메소드를오버라이드한다. command객체는이미유효성체크를하고애플리케이션의비즈니스티어로이것을안전하게전달한다. onsubmit() 메소드는 products/index.html 페이지로리다이렉트하는 RedirectView인 products-indexr view를반환한다. 우리는요청을다루기위한 ProductController.handleIndex() 메소드를원하기때문에이것이필요하다. 마지막으로, setformview() 에대한호출은 form을표시하기위해사용되는 view를명시한다. 우리의경우, JSP는다음과같다. <%@taglib prefix="c" uri=" <%@taglib prefix="spring" uri=" <html> <head> <c:set var="css"><spring:theme code="css"/></c:set> <c:if test="${not empty css"> <link rel="stylesheet" href="<c:url value="${css"/>" type="text/css" /> </c:if>

28 </head> <body> <form action="edit.html" method="post"> <input type="hidden" name="productid" value="<c:out value="${command.productid"/>"> <table> <tr> <td>name</td> <td><spring:bind path="command.name"> <input name="name" value="<c:out value="${status.value"/>"> <span class="error"><c:out value="${status.errormessage"/></span> </spring:bind> </td> </tr> <tr> <td>expiration Date</td> <td><spring:bind path="command.expirationdate"> <input name="expirationdate" value="<c:out value="${status.value"/>"> <span class="error"><c:out value="${status.errormessage"/></span> </spring:bind> </td> </tr> <tr> <td></td> <td><input type="submit"></td> </tr> </table> </form> </body> </html> Spring이제공하는 spring:bind태그는가장간단한방법으로 form으로부터값을전달하도록해주고간단한유효성체크를제공한다. 첫번째, 우리는 path에 command객체이름인값을바인드하고필드에셋팅한다. spring:bind태크에서 Spring은 value필드가 spring:bind태그내정의된프라퍼티의값을표현하는객체상태를명시한다. status.errormessage는어떤유효성에러메시지를정의한다.

29 마지막으로우리는애플리케이션컨텍스트파일의 productformcontroller bean 을변경할필요가있고 /product/edit.html 에서 form controller 를맵핑할필요가있다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="publicurlmapping" class="org.springframework.web.servlet.handler.simpleurlhandlermapping"> <property name="mappings"> <props> <prop key="/index.html">indexcontroller</prop> <prop key="/product/index.html">productcontroller</prop> <prop key="/product/view.html">productcontroller</prop> <prop key="/product/edit.html"> productformcontroller </prop> </props> </bean> <!-- Product --> <bean id="productformcontroller" class="productformcontroller"> </bean> <!-- other beans as usual --> </beans> 당신이보는것처럼, Spring 애플리케이션컨텍스트파일내새로운정의를추가하는것은아무것도아니 다. 만약우리가 를본다면, 우리는다음처럼데이터를 넣기위한 for 을가진웹페이지를보게될것이다.

30 불행하게도, expirationdate 프라퍼티는 Date타입이고 Java 날짜포맷은조금사용하기어렵다. 당신은 Date값을위해 Sun Oct 24 19:20:00 BST 2004 형식을기대할수는없다. 사용자를위해좀더쉽도록하기위해서, 우리는최근바인더 (binder) 를가진사용자정의편집기를등록한다. 이것을하기위해서, 우리는 initbinder() 메소드를오버라이드할것이다. public class ProductFormController extends SimpleFormController { // other methods omitted for clarity protected void initbinder(httpservletrequest request, ServletRequestDataBinder binder) throws Exception { SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy"); dateformat.setlenient(false); binder.registercustomeditor(date.class, null, new CustomDateEditor(dateFormat, false));

31 새롭게등록된사용자정의편집기는모든 Date.class값이적용되고값은 dd/mm/yyyy 값으로파싱된다. 24/10/2004 는유효한 Date값처럼 Sun Oct 24 19:20:00 BST 2004 대신에적용된다. 여기엔다른중요한것인유효성체크라는것을놓쳤다. 우리는이름이없는 product를추가하는것을사용자에게허용하길원하지않는다. 유효성체크를구현하기위한가장멋진방법은아래와같이 Validator 인터페이스를구현하는것이다. Spring관리 bean처럼 ProductValidator를등록하고 productvalidator bean에 ProductFormController의 validator프라퍼티를셋팅한다. import org.springframework.validation.errors; import org.springframework.validation.validator; public class ProductValidator implements Validator { public boolean supports(class clazz) { return clazz.isassignablefrom(product.class); public void validate(object obj, Errors errors) { Product product = (Product) obj; if (product.getname() == null product.getname().length() == 0) { errors.rejectvalue("name", "required", ""); Validator구현물은요구되는 errorcode세트를가진유효성에러를추가한다. 이코드는 messagesource bean을사용하여해석될필요가있는메시지자원을구별한다. messagesource bean은외부화될메시지문자열을허용하고국제화를잘지원한다. 국제화된메시지를생성하기위한규칙은국제화된 view와테마를생성하기위한규칙과정확하게동일하다. 우리는마지막으로애플리케이션컨텍스트파일을보여준다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans>

32 <bean id="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="basename"> <value>messages</value> </bean> <bean id="productvalidator" class="productvalidator" /> <!-- Product --> <bean id="productformcontroller" class="productformcontroller"> <property name="validator"> <ref bean="productvalidator" /> </bean> <!-- other beans as usual --> </beans> 우리가애플리케이션을빌드하고다시배치할때, product/edit.html 페이지로가라. 그리고유효한 종료날짜를제공하지만이름은채우지않고 form 을서브밋을시도해보라. 우리는적당한언어로에 러메시지를보게될것이다.

33 당신은사용자로부터새로운데이터를얻는방법을안다. 하지만전형적인애플리케이션에서당신은편집을잘다룰것이다. 비즈니스티어로부터가져온데이터를포함하는 command객체를준비하기위한방법이어야만한다. 이것은객체의구분자를명시하는요청파라미터를포함하는 edit페이지에요청하는것을의미한다. 객체는다음비즈니스티어로호출하여로드되고사용자에게표시된다. 이것을하기위해 formbackingobject() 메소드를오버라이드하라. public class ProductFormController extends SimpleFormController { // other methods omitted for clarity protected Object formbackingobject(httpservletrequest request) throws Exception { Product command = new Product(); int productid = RequestUtils.getIntParameter(request, "productid", 0); if (productid!= 0) { // load the product command.setproductid(productid); command.setname("loaded");

34 return command; 요청파라미터 productid가 2인것을가지고 edit.html에요청을보낼때, command객체의이름프라퍼티는로드되기위해셋팅된다. 물론, controller내 Product 객체의인스턴스를생성하는대신에, 우리는 productid에의해구별되는객체를전달하기위한비즈니스티어를사용한다. 다른 controller는 form서브밋과유효성체크를처리하기위해같은규칙을따른다. 그래서당신은나중에그것들을서술할필요가없다. Spring샘플애플리케이션은다른 controller의사용을설명한다. Exploring the AbstractWizardFormController AbstractFormController의매우유용한하위클래스는페이지의마법사같은형식의시리즈를구현하도록허용하는 AbstractWizardFormController이다. 이 controller구현물을사용하는방법을보여주기위해, 우리는 JSP페이지의간단한세트 (step1.jsp, step2.jsp, finish.jsp) 를가지고시작한다. 이러한 JSP페이지의코드는위 edit.jsp페이지내에서사용된코드와크게다르지않다. // step1.jsp prefix="c" uri=" prefix="spring" uri=" <html> <head> <c:set var="css"><spring:theme code="css"/></c:set> <c:if test="${not empty css"><link rel="stylesheet" href="<c:url value="${css"/>" type="text/css" /></c:if> </head> <body> <form action="wizard.html?_target1" method="post"> <input type="hidden" name="_page" value="0"> <table> <tr> <td>name</td> <td><spring:bind path="command.name"> <input name="name" value="<c:out value="${status.value"/>">

35 <span class="error"><c:out value="${status.errormessage"/></span> </spring:bind> </td> </tr> <tr> <td></td> <td><input type="submit" value="next"></td> </tr> </table> </form> </body> </html> // step2.jsp prefix="c" uri=" prefix="spring" uri=" <html> <head> <c:set var="css"><spring:theme code="css"/></c:set> <c:if test="${not empty css"><link rel="stylesheet" href="<c:url value="${css"/>" type="text/css" /></c:if> </head> <body> <form action="wizard.html?_target2" method="post"> <input type="hidden" name="_page" value="1"> <table> <tr> <td>expiration Date</td> <td><spring:bind path="command.expirationdate"> <input name="expirationdate" value="<c:out value="${status.value"/>"> <span class="error"><c:out value="${status.errormessage"/></span> </spring:bind> </td>

36 </tr> <tr> <td></td> <td><input type="submit" value="next"></td> </tr> </table> </form> </body> </html> // finish.jsp prefix="c" uri=" prefix="spring" uri=" <html> <head> <c:set var="css"><spring:theme code="css"/></c:set> <c:if test="${not empty css"><link rel="stylesheet" href="<c:url value="${css"/>" type="text/css" /></c:if> </head> <body> <form action="wizard.html?_finish" method="post"> <input type="hidden" name="_page" value="2"> <table> <tr> <td>register now?</td> <td><c:out value="${command"/></td> </tr> <tr> <td></td> <td><input type="submit" value="next"></td> </tr> </table> </form> </body> </html>

37 당신이보는것처럼 step1.jsp와 step2.jsp 페이지는 Product도메인객체의인스턴스인 command객체의 name과 expirationdate 프라퍼티를간단하게활성화한다. 지금우리는 JSP페이지를셋업하고, AbstractWizardFormController 가마법사의페이지흐름을제어하기위한요청파라미터를사용하는방법을봐야만한다. 이러한파라미터는아래와같다. 파라미터 _target<value> 상세설명 Value는현재페이지가서브밋되고유효할때이거나 allowdirtyforward또는 allowdirtyback 프라퍼티가 true 로셋팅될때 controller 가가는 pages[] 프라퍼티내 인덱스를명시하는숫자이다. _finish 이파라미터가명시되면, AbstractWizardFormController 는 processfinish() 메소드를 호출하고세션으로부터 command 객체를제거한다. _cancel 이파라미터가명시되면, AbstractWizardFormController 는 processcancel() 메소드를 호출하고만약오버라이드되지않는다면, 세션으로부터 command객체를제거한다. 만약이메소드를오버라이드하기로선택한다면, super() 메소드를호출하거나세션으로부터수동으로 command객체를제거하는것을잊지말라. _page 이파라미터 ( 언제나 <input type="hidden" name="_page" value=""> 처럼명시되는 ) 는 pages[] 프라퍼티내페이지의인덱스를명시한다. 지금우리는마법사단계로부터 JSP 페이지를가졌고, 우리는아래처럼 AbstractWizardFormController 의하위클래스처럼 RegistrationController 를구현할필요가있다. public class RegistrationController extends AbstractWizardFormController { public RegistrationController() { setpages(new String[] { "registration-step1", "registration-step2", "registrationfinish" ); setsessionform(true); setcommandclass(product.class); protected ModelAndView processfinish(httpservletrequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { Product product = (Product) command;

38 System.out.println("Register " + product); return null; protected void initbinder(httpservletrequest request, ServletRequestDataBinder binder) throws Exception { SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy"); dateformat.setlenient(false); binder.registercustomeditor(date.class, null, new CustomDateEditor(dateFormat, false)); protected void validatepage(object command, Errors errors, int page, boolean finish) { getvalidator().validate(command, errors); 위코드는 AbstractWizardFormController 하위클래스의가장간단한구현물을표현한다. 기술적으로, 우리가구현해야만하는모든것은 processfinish() 메소드이다. 하지만우리의경우, 우리는 Date클래스를위해사용자정의편집기를등록할필요가있다. 마지막으로, 우리는 Product.class를위한 commandclass프라퍼티를셋팅하길원한다. 우리는 bean정의에서 pages와 sessionform프라퍼티를셋팅할수있다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="publicurlmapping" class="org.springframework.web.servlet.handler.simpleurlhandlermapping"> <property name="interceptors"> <list> <ref local="bigbrotherhandlerinterceptor" /> </list>

39 <property name="mappings"> <props> <!-- other props omitted --> <prop key="/registration/wizard.html"> registrationcontroller </prop> </props> </bean> <bean id="registrationcontroller" class="registrationcontroller"> <property name="validator"> <ref bean="productvalidator" /> </bean> </beans> 우리는 step1.jsp, step2.jsp 그리고 finish.jsp페이지를위해맵핑을생성하지는않았다. 우리는 /registration/wizard.html 를위한하나의맵핑을생성하는대신에, registrationcontroller bean에의해다루어진다. 우리는또한 productvalidator bean을위한 registrationcontroller의 validator프라퍼티를셋팅한다. 우리는각각의페이지를체크할수있는것을보여주기위해 validatepage() 메소드내 validator프라퍼티를사용한다. 우리가선택한구현물은 AbstractWizardFormController내디폴트구현물과같지만, 만약우리가원한다면, 우리는다음페이지로이동하는것을사용자에게허용한다. AbstractWizardFormController는 processfinish() 메소드를호출하기전에유효성체크를수행한다. 우리가제공하는 AbstractWizardFormController의설명은매우간단하다. 하지만당신의애플리케이션내 AbstractWizardFormController 하위클래스를사용하기위해결정한다면시작점으로는매우좋다. File Upload Spring은 MultipartResolver 인터페이스의구현물을통해파일업로드를다룬다. 특히, Spring은 COS FileUpload와 Commons FileUpload를위한지원을가진다. 디폴트로명시되는 multipartresolver bean은없다. 그래서당신이 Commons나 COS구현물이나당신자신만의구현물을사용하길원한다면, 당신은다음처럼 Spring애플리케이션컨텍스트내 multipartresolver bean을선언해야만한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "

40 <beans> <bean id="multipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver"> <property name="maxuploadsize"> <value>100000</value> </bean> <bean id="multipartresolver" class="org.springframework.web.multipart.cos.cosmultipartresolver"> <property name="maxuploadsize"> <value>100000</value> </bean> <!-- other beans as usual --> </beans> 당신은하나의 multipartresolver bean을선택할수있다는것을잊지말라. 이것은당신이 bean을선언할때사용할하나를선택해야만한다는것을의미한다. multipartresolver bean이설정되었을때, Spring은 form데이터를 byte[] 배열로변형하기위해 multipart/form-data 로인코딩된요청을다루는방법을안다. 새롭게설정된 multipartresolver 작업을보여주기위해, 우리는 ProductImageForm 과 ProductImageFormController 클래스를생성할것이다. 두번째것이이미지이름과내용을위한프라퍼티를포함하는동안첫번째것은 SimpleFormController를확장하고이미지업로드를다룬다. public class ProductImageForm { private String name; private byte[] contents; public byte[] getcontents() { return contents; public void setcontents(byte[] contents) {

41 this.contents = contents; public String getname() { return name; public void setname(string name) { this.name = name; 이것은 name 와 contents 프라퍼티를나타내는간단한자바빈이다. import java.net.bindexception; public class ProductImageFormController extends SimpleFormController { public ProductImageFormController() { super(); setcommandclass(productimageform.class); setformview("products-image"); protected ModelAndView onsubmit(httpservletrequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { ProductImageForm form = (ProductImageForm) command; System.out.println(form.getName()); byte[] contents = form.getcontents(); for (int i = 0; i < contents.length; i++) { System.out.print(contents[i]); return new ModelAndView("products-index-r");

42 protected void initbinder(httpservletrequest request, ServletRequestDataBinder binder) throws Exception { binder.registercustomeditor(byte[].class, new ByteArrayMultipartFileEditor()); ByteArrayMultipartResolver 클래스는멀티파트스트림 (multipart stream) 의내용을파싱하고이것을 byte[] 배열로반환하기위해애플리케이션컨텍스트파일로부터 multipartresolver bean을사용한다. 파일업로드를위한 JSP페이지를코딩할때는주의하라. 가장흔한에러는 form요소의 enctype 속성을잊어버리는것이다. <%@taglib prefix="c" uri=" <%@taglib prefix="spring" uri=" <html> <head> <c:set var="css"><spring:theme code="css"/></c:set> <c:if test="${not empty css"><link rel="stylesheet" href="<c:url value="${css"/>" type="text/css" /></c:if> </head> <body> <form action="image.html" method="post" enctype="multipart/form-data"> <table> <tr> <td>name</td> <td><spring:bind path="command.name"> <input name="name" value="<c:out value="${status.value"/>"> <span class="error"><c:out value="${status.errormessage"/></span> </spring:bind> </td> </tr> <tr>

43 <td>image</td> <td><spring:bind path="command.contents"> <input name="contents" type="file"> <span class="error"><c:out value="${status.errormessage"/></span> </spring:bind> </td> </tr> <tr> <td></td> <td><input type="submit"></td> </tr> </table> </form> </body> </html> 당신이보는것처럼, JSP 페이지는 enctype 속성을제외하고는표준적인 HTML 페이지이다. 우리는 views.properties 파일내 view 처럼 JSP 페이지를명시하는것을잊어서는안된다. * Using Spring MVC in the Sample Application

44 우리는 URL 맵핑을언급하며시작할것이다. 요청 URL 을애플리케이션내 controller 로맵핑하기위해, 우리는하나의간단한 SimpleUrlHandlerMapping bean 을사용한다. 이 bean 은적당한 controller 를위 해모든 *.html 과 *.tile 요청을맵핑한다. bean 정의는아래와같다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="urlmapping" class="org.springframework.web.servlet.handler.simpleurlhandlermapping"> <property name="mappings"> <props> <!-- Index --> <prop key="/index.html">indexcontroller</prop> <!-- Entry --> <prop key="/entry/view.html">entrycontroller</prop> <prop key="/entry/delete.html">entrycontroller</prop> <prop key="/entry/edit.html">editentryformcontroller</prop> <!-- Comment --> <prop key="/comment/index.html">commentcontroller</prop> <prop key="/comment/delete.html">commentcontroller</prop> <prop key="/comment/view.html">commentcontroller</prop> <prop key="/comment/edit.html">editcommentformcontroller</prop> <!-- Audit --> <prop key="/admin/audit/*">auditcontroller</prop> <!-- Tiles --> <prop key="/tiles/menu.html">menutilecontroller</prop> <!-- Users --> <prop key="/admin/users/index.html">userscontroller</prop> <!-- Login --> <prop key="/security/login.html">logincontroller</prop> <!-- Attachments --> <prop key="/attachment/*">attachmentcontroller</prop> </props>

45 </bean> </beans> 지역화된유효성체크메시지와일반적인메시지를지원하기위해, 우리는 ResourceBundleMessageSource bean을설정한다. 우리는애플리케이션의생명주기내메시지를리로드할필요가없기때문에, ReloadableResourceBundleMessageSource 가아닌이구현물을선택한다. messagesource bean의정의는아래에서보여진다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="basename"> <value>messages</value> </bean> </beans> 여기서, 우리는두개의메시지프라퍼티파일을생성했다. 하나는 Czech언어를저장하는 messages_cs.properties이고, 다른하나는영어로된텍스트를포함하거나검색을실패한프라퍼티파일을표현하는 messages.properties이다. 그리고유효성체크를위해 CommentValidator 와 EntryValidator를구현한다. import org.springframework.validation.errors; import org.springframework.validation.validator; public class CommentValidator implements Validator { public boolean supports(class clazz) { return Comment.class.isAssignableFrom(clazz); // return clazz.isassignablefrom(comment.class); public void validate(object obj, Errors errors) {

46 Comment comment = (Comment) obj; if (comment.getsubject() == null comment.getsubject().length() == 0) { errors.rejectvalue("subject", "required", null, "required"); if (comment.getbody() == null comment.getbody().length() == 0) { errors.rejectvalue("body", "required", null, "required"); 우리는첨부의업로드를지원하기위한 Comment 도메인클래스의하위클래스를생성해야만하기때 문에 Comment.class.isAssignableForm(clazz) 를사용하여 supports() 를구현한다. 우리는대개의 Spring bean 처럼 validators 를정의한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " <beans> <bean id="commentvalidator" class="commentvalidator" /> <bean id="editcommentformcontroller" class="editcommentformcontroller"> <property name="blogmanager"> <ref bean="blogmanager" /> <property name="validator"> <ref local="commentvalidator" /> </bean> <bean id="entryvalidator" class="entryvalidator" /> <bean id="editentryformcontroller" class="editentryformcontroller"> <property name="blogmanager"> <ref bean="blogmanager" />

47 <property name="validator"> <ref local="entryvalidator" /> </bean> </beans> 여기서우리는 blogmanager프라퍼티에접근하는하위클래스를주는편리한클래스의세트를생성한다. 우리가구현하는편리한클래스는 AbstractBlogManagerController, AbstractBlogManagerFormController 그리고 AbstractBlogManagerMultiactionController 이다. 이러한추상클래스는 blogmanager프라퍼티가 BlogManager구현물의인스턴스로셋팅되도록하기위해 InitializingBean 인터페이스를구현한다. 게다가 AbstractBlogManagerController는 AbstractController 의하위클래스가아니다. 이것은 Controller 인터페이스만을구현하고그래서좀더가볍다. AbstractBlogManagerMultiactionController의사용법은다음과같다. import java.util.hashmap; import java.util.map; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.bind.requestutils; import org.springframework.web.servlet.modelandview; public class EntryController extends AbstractBlogManagerMultiactionController { public ModelAndView handleview(httpservletrequest request, HttpServletResponse response) throws Exception { int entryid = RequestUtils.getRequiredIntParameter(request, "entryid"); Entry e = getblogmanager().getentry(entryid); Map model = new HashMap(); model.put("entry", e); return new ModelAndView("entry-view", model); throws Exception { public ModelAndView handledelete(httpservletrequest request, HttpServletResponse response)

48 boolean confirm = RequestUtils.getIntParameter(request, "confirm", 0) == 1; int entryid = RequestUtils.getRequiredIntParameter(request, "entryid"); if (confirm) { getblogmanager().deleteentry(entryid, SessionSecurityManager.getUser(request)); return new ModelAndView("entry-deleted"); else { Map model = new HashMap(); model.put("entry", getblogmanager().getentry(entryid)); return new ModelAndView("entry-delete", model); 요구되는프라퍼티가셋팅되는것을확인하기위해 InitializingBean 인터페이스를구현할필요는없다. 사실, afterpropertiesset() 이 final로구현되었다. 우리는표준적인웹애플리케이션내에서기대하는방법으로보안을구현하지는않았다. 대신우리는사용자확인을하기위해가장기본적인지원을수행하는정적메소드를포함하는 SessionSecurityManager 를생성한다. 보안코드를확장하기위해, 당신은 HandlerInterceptor 을구현할수있다. 사용자로그인없이접근가능한 URL중몇몇을허용하기위해, 당신은두개의 bean으로 urlmapping bean을분리했다. 하나는제안을가지지않는맵핑을포함하고, 다른것은 HandlerInterceptor 구현물과로그인한사용자를요구하는맵핑을포함한다.

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r Jakarta is a Project of the Apache

More information

<4D F736F F F696E74202D20C1A632C8B8C7D1B1B9BDBAC7C1B8B5BBE7BFEBC0DAB8F0C0D32D496E E D56432E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A632C8B8C7D1B1B9BDBAC7C1B8B5BBE7BFEBC0DAB8F0C0D32D496E E D56432E BC8A3C8AF20B8F0B5E55D> Inside Spring Web MVC 안영회 ahnyounghoe@gmail.com 차례 MVC 개요와오해 Spring Web MVC 개요 Demo 로이해하는 Spring Web MVC 대표적인컨트롤러활용 정리 한국 스프링 사용자 모임 MVC 개요와 오해 한국 스프링 사용자 모임 MVC 개요 MVC 에대한오해 컨트롤러는서블릿이다! 컨트롤러는액션이다! 비즈니스로직은컨트롤러다!

More information

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가 혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가웹페이지내에뒤섞여있어서웹페이지의화면설계가점점어려워진다. - 서블릿이먼저등장하였으나, 자바내에

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

TP_jsp7.PDF

TP_jsp7.PDF (1) /WEB_INF.tld /WEB_INF/lib (2) /WEB_INF/web.xml (3) http://{tag library }/taglibs/{library} /web_inf/{

More information

Web Service Computing

Web Service Computing Spring MVC 2015 Web Service Computing Request & Response HTTP(Hyper-Text Transfer Protocol) 웹서버가하는일은요청 (Request) 과응답 (Response) 의연속이다. 1) 브라우저에 www.google.co.kr 을입력한다면 2) 구글서버에페이지를요청하는것이고 3) 화면이잘나타난다면구글서버가응답을한것이다.

More information

2장 변수와 프로시저 작성하기

2장  변수와 프로시저 작성하기 Chapter. RequestDispatcher 활용 요청재지정이란? RequestDispatcher 활용 요청재지정구현예제 Chapter.9 : RequestDispatcher 활용 1. 요청재지정이란? 클라이언트로부터요청받은 Servlet 프로그램이응답을하지않고다른자원에수행흐름을넘겨다른자원의처리결과를대신응답하는것또는다른자원의수행결과를포함하여응답하는것을요청재지정이라고한다.

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

JavaGeneralProgramming.PDF

JavaGeneralProgramming.PDF , Java General Programming from Yongwoo s Park 1 , Java General Programming from Yongwoo s Park 2 , Java General Programming from Yongwoo s Park 3 < 1> (Java) ( 95/98/NT,, ) API , Java General Programming

More information

KYO_SCCD.PDF

KYO_SCCD.PDF 1. Servlets. 5 1 Servlet Model. 5 1.1 Http Method : HttpServlet abstract class. 5 1.2 Http Method. 5 1.3 Parameter, Header. 5 1.4 Response 6 1.5 Redirect 6 1.6 Three Web Scopes : Request, Session, Context

More information

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence)

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence) 8 중 1 2008-01-31 오전 12:08 오픈소스스터디 jpetstore 예제로살펴보는 Spring MVC와 ibatis 연동 Added by Sang Hyup Lee, last edited by Sang Hyup Lee on 1월 16, 2007 (view change) Labels: (None) 지금까지 Spring MVC 를셋팅하는과정에서부터하나의

More information

14-Servlet

14-Servlet JAVA Programming Language Servlet (GenericServlet) HTTP (HttpServlet) 2 (1)? CGI 3 (2) http://jakarta.apache.org JSDK(Java Servlet Development Kit) 4 (3) CGI CGI(Common Gateway Interface) /,,, Client Server

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

중간고사

중간고사 중간고사 담당교수 : 단국대학교응용컴퓨터공학박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호 (4자리숫자 ) 를기입하면성적공고시학번대신암호를사용할것임. 1. JSP 란무엇인가? 간단히설명하라.

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W Research & Technique Apache Tomcat RCE 취약점 (CVE-2019-0232) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE-2019-0232 취약점은 Windows 시스템의 Apache Tomcat 서버에서 enablecmdlinearguments

More information

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인 표준프레임워크로구성된컨텐츠를솔루션에적용하는것에문제가없는지확인 ( S next -> generate example -> finish). 2. 표준프레임워크개발환경에솔루션프로젝트추가. ( File -> Import -> Existring Projects into

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

Spring Boot

Spring Boot 스프링부트 (Spring Boot) 1. 스프링부트 (Spring Boot)... 2 1-1. Spring Boot 소개... 2 1-2. Spring Boot & Maven... 2 1-3. Spring Boot & Gradle... 3 1-4. Writing the code(spring Boot main)... 4 1-5. Writing the code(commandlinerunner)...

More information

JAVA Bean & Session - Cookie

JAVA Bean & Session - Cookie JAVA Bean & Session - Cookie [ 우주최강미남 ] 발표내용소개 자바빈 (Java Bean) 자바빈의개요 자바빈의설계규약 JSP 에서자바빈사용하기 자바빈의영역 세션과쿠키 (Session & Cookie) 쿠키의개요 쿠키설정 (HTTP 서블릿 API) 세션의개요 JSP 에서의세션관리 Java Bean Q. 웹사이트를개발한다는것과자바빈?? 웹사이트라는것은크게디자이너와프로그래머가함께개발합니다.

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 26 장애플릿 이번장에서학습할내용 애플릿소개 애플릿작성및소개 애플릿의생명주기 애플릿에서의그래픽컴포넌트의소개 Applet API의이용 웹브라우저상에서실행되는작은프로그램인애플릿에대하여학습합니다. 애플릿이란? 애플릿은웹페이지같은 HTML 문서안에내장되어실행되는자바프로그램이다. 애플릿을실행시키는두가지방법 1. 웹브라우저를이용하는방법 2. Appletviewer를이용하는방법

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

<4D F736F F F696E74202D203130C0E52EBFA1B7AF20C3B3B8AE205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203130C0E52EBFA1B7AF20C3B3B8AE205BC8A3C8AF20B8F0B5E55D> 10 장. 에러처리 1. page 지시문을활용한에러처리 page 지시문의 errorpage 와 iserrorpage 속성 errorpage 속성 이속성이지정된 JSP 페이지내에서 Exception이발생하는경우새롭게실행할페이지를지정하기위하여사용 iserrorpage 속성 iserrorpage 는위와같은방법으로새롭게실행되는페이지에지정할속성으로현재페이지가 Exception

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 웹서버프로그래밍 2 JSP 개요 01. JSP 개요 (1) 서블릿 (Servlet) 과 JSP(Java Server Page) 서블릿은자바를이용한서버프로그래밍기술 초기웹프로그래밍기술인 CGI(Common Gateway Interface) 를대체하기위해개발되었으나, 느린처리속도, 많은메모리요구, 불편한화면제어등의한계로 PHP, ASP 등서버스크립트언어등장 JSP

More information

04장

04장 20..29 1: PM ` 199 ntech4 C9600 2400DPI 175LPI T CHAPTER 4 20..29 1: PM ` 200 ntech4 C9600 2400DPI 175LPI T CHAPTER 4.1 JSP (Comment) HTML JSP 3 home index jsp HTML JSP 15 16 17 18 19 20

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx 과목명: 웹프로그래밍응용 교재: 모던웹을 위한 JavaScript Jquery 입문, 한빛미디어 Part3. Ajax Ch19. node.js 기본 2014년 1학기 Professor Seung-Hoon Choi 19 node.js 기본 이 책에서는 서버 구현 시 node.js 를 사용함 자바스크립트로 서버를 개발 다른서버구현기술 ASP.NET, ASP.NET

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일 Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 Introduce Me!!! Job Jeju National University Student Ubuntu Korean Jeju Community Owner E-Mail: ned3y2k@hanmail.net Blog: http://ned3y2k.wo.tc Facebook: http://www.facebook.com/gyeongdae

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lab 4 ADT Design 클래스로정의됨. 모든객체들은힙영역에할당됨. 캡슐화 (Encapsulation) : Data representation + Operation 정보은닉 (Information Hiding) : Opertion부분은가려져있고, 사용자가 operation으로만사용가능해야함. 클래스정의의형태 public class Person { private

More information

Spring Data JPA Many To Many 양방향 관계 예제

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에 개념정리및샘플예제 EJB stateful sample 문서 2016. 01. 14 목차 JEUS EJB Session Bean가이드... 3 1. stateful session bean... 3 1.1 stateful sample 가이드... 3 1.1.1 sample source... 3 1.1.2 결과확인... 6 1.2 http session에서사용하기...

More information

MVVM 패턴의 이해

MVVM 패턴의 이해 Seo Hero 요약 joshua227.tistory. 2014 년 5 월 13 일 이문서는 WPF 어플리케이션개발에필요한 MVVM 패턴에대한내용을담고있다. 1. Model-View-ViewModel 1.1 기본개념 MVVM 모델은 MVC(Model-View-Contorl) 패턴에서출발했다. MVC 패턴은전체 project 를 model, view 로나누어

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 애플리케이션기초 애플리케이션컴포넌트 액티비티와태스크 Part 1 프로세스와쓰레드 컴포넌트생명주기 Part 2 2 Library Java (classes) aapk.apk (android package) identifiers Resource & Configuration aapk: android

More information

뇌를 자극하는 JSP & Servlet 슬라이드

뇌를 자극하는 JSP & Servlet 슬라이드 속성 & 리스너 JSP & Servlet 2/39 Contents 학습목표 클라이언트요청에의해서블릿이실행될때에컨테이너에의해제공되는내장객체의종류와역할, 그리고접근범위특성등을알아본다. 웹컴포넌트사이의데이터전달을위한내장객체에서의속성설정과이에따른이벤트처리방법에대해알아본다. 내용 서블릿의초기화환경을표현하는 ServletConfig 객체 웹애플리케이션의실행환경을표현하는

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 클래스의사용법은다음과같다. PrintWriter writer = new PrintWriter("output.txt");

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

chapter6.doc

chapter6.doc Chapter 6. http..? ID. ID....... ecrm(ebusiness )., ecrm.. Cookie.....,. 20, 300 4. JSP. Cookie API javax.servlet.http. 3. 1. 2. 3. API. Cookie(String name, String value). name value. setxxx. getxxx. public

More information

교육자료

교육자료 THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성

More information

Microsoft PowerPoint - 웹프로그래밍_ ppt [호환 모드]

Microsoft PowerPoint - 웹프로그래밍_ ppt [호환 모드] 목차 웹프로그래밍 내장객체의개요 내장객체의종류 11 주차 7 장 JSP 페이지의내장객체와영역 2 내장객체 (Implicit Object) JSP 페이지에서제공하는특수한레퍼런스타입의변수사용하고자하는변수와메소드에접근선언과객체생성없이사용할수있음 내장객체 내장객체 request response out session application pagecontext page

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 14. HTML5 웹스토리지, 파일 API, 웹소켓 웹스토리지 웹스토리지 (web storage) 는클라이언트컴퓨터에데이터를저장하는메카니즘 웹스토리지는쿠키보다안전하고속도도빠르다. 약 5MB 정도까지저장이가능하다. 데이터는키 / 값 (key/value) 의쌍으로저장 localstorage 와 sessionstorage localstorage 객체

More information

Data Provisioning Services for mobile clients

Data Provisioning Services for mobile clients 4 장. JSP 의구성요소와스크립팅요소 제 4 장 스크립팅요소 (Scripting Element) 1) 지시문 (Directive) 1. JSP 구성요소소개 JSP 엔진및컨테이너, 즉 Tomcat 에게현재의 JSP 페이지처리와관련된정보를전달하는목적으로활용 (6 장 )

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성

More information

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

More information

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint 세션.ppt 웹프로그래밍 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 세션변수 (Session Variable) (1/2) 쇼핑몰장바구니 장바구니에서는사용자가페이지를이동하더라도장바구니의구매물품리스트의내용을유지하고있어야함 PHP 에서사용하는일반적인변수는스크립트의수행이끝나면모두없어지기때문에페이지이동시변수의값을유지할수없음 이러한문제점을해결하기위해서 PHP 에서는세션 (session)

More information

0. 들어가기 전

0. 들어가기 전 컴퓨터네트워크 14 장. 웹 (WWW) (3) - HTTP 1 이번시간의학습목표 HTTP 의요청 / 응답메시지의구조와동작원리이해 2 요청과응답 (1) HTTP (HyperText Transfer Protocol) 웹브라우저는 URL 을이용원하는자원표현 HTTP 메소드 (method) 를이용하여데이터를요청 (GET) 하거나, 회신 (POST) 요청과응답 요청

More information

Intro to Servlet, EJB, JSP, WS

Intro to Servlet, EJB, JSP, WS ! Introduction to J2EE (2) - EJB, Web Services J2EE iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

뇌를 자극하는 JSP & Servlet 슬라이드

뇌를 자극하는 JSP & Servlet 슬라이드 서블릿의라이프사이클 JSP & Servlet 2/39 Contents 학습목표 서블릿클래스로부터서블릿객체가만들어지고, 서블릿객체가초기화되어서서블릿이되고, 서블릿이사용되고, 최종적으로소멸되기까지의전과정을서블릿의라이프사이클이라고한다. 이장에서는서브릿의라이프사이클에관련된프로그래밍기술을배워보자. 내용 서블릿의라이프사이클 서블릿클래스의 init 메서드의 destroy

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

J2EE Concepts

J2EE Concepts ! Introduction to J2EE (1) - J2EE Servlet/JSP/JDBC iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

<property name=configlocation value=classpath:/egovframework/sqlmap/example/sql-map-config.xml/> <property name=datasource ref=datasource2/> * 표준프레임워크로구성된컨텐츠를솔루션에적용 1. sample( 게시판 ) 프로젝트생성 - egovframe Web Project next generate example finish 2. 프로젝트추가 - 프로젝트 Import 3. 프로젝트에 sample 프로젝트의컨텐츠를추가, 기능동작확인 ⓵ sample 프로젝트에서 프로젝트로복사 sample > egovframework

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

Microsoft PowerPoint - 03-TCP Programming.ppt

Microsoft PowerPoint - 03-TCP Programming.ppt Chapter 3. - Socket in Java - 목차 소켓소개 자바에서의 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 에코프로그램 - EchoServer 에코프로그램 - EchoClient Q/A 1 1 소켓소개 IP,, and Socket 포트 (): 전송계층에서통신을수행하는응용프로그램을찾기위한주소 소켓 (Socket):

More information

DocsPin_Korean.pages

DocsPin_Korean.pages Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google

More information

슬라이드 1

슬라이드 1 7. [ 실습 ] 예제어플리케이션개발 1. 실습개요 2. 프로젝트환경구성 3. 기본환경설정 4. 예제어플리케이션개발 5. 참조 - 539 - 1. 실습개요 (1/4) 7. [ 실습 ] 예제어플리케이션개발 스프링기반의 EGOV 프레임워크를사용하여구현된예제어플리케이션구현을통하여 Presentation Layer와 Business Layer의연계를살펴본다. 예제어플리케이션구현기능

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx 과목명 : 웹프로그래밍응용교재 : 모던웹을위한 JavaScript Jquery 입문, 한빛미디어 Part3. Ajax Ch20. XMLHttpRequest 2014년 1학기 Professor Seung-Hoon Choi 20 XMLHttpRequest XMLHttpRequest 객체 자바스크립트로 Ajax를이용할때사용하는객체 간단하게 xhr 이라고도부름 서버

More information

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id=entitymanagerfactory class=org.springframework.orm.jpa.localentitymanagerfactorybean p:persistenceunitname= JPA 와 Hibernate - 스프링의 JDBC 대신에 JPA를이용한 DB 데이터검색작업 - JPA(Java Persistence API) 는자바의 O/R 매핑에대한표준지침이며, 이지침에따라설계된소프트웨어를 O/R 매핑프레임워크 라고한다. - O/R 매핑 : 객체지향개념인자바와관계개념인 DB 테이블간에상호대응을시켜준다. 즉, 객체지향언어의인스턴스와관계데이터베이스의레코드를상호대응시킨다.

More information

No Slide Title

No Slide Title 상속 이충기 명지대학교컴퓨터공학과 상속 Q: 건설회사는기존아파트와조금다르거나추가적인특징들을가진새아파트를지을때어떻게하는가? A: 2 상속 상속 (inheritance) 은클래스들을연관시키는자연스럽고계층적인방법이다. 상속은객체지향프로그래밍의가장중요한개념중의하나이다. 상속은 은 이다 라는관계 (is-a relationship) 를나타낸다. 이관계를적용하여클래스들을상하관계로연결하는것이상속이다.

More information

서블릿의라이프사이클 뇌를자극하는 JSP & Servlet

서블릿의라이프사이클 뇌를자극하는 JSP & Servlet 서블릿의라이프사이클 뇌를자극하는 JSP & Servlet Contents v 학습목표 서블릿클래스로부터서블릿객체가만들어지고, 서블릿객체가초기화되어서서블릿이되고, 서블릿이사용되고, 최종적으로소멸되기까지의전과정을서블릿의라이프사이클이라고한다. 이장에서는서브릿의라이프사이클에관련된프로그래밍기술을배워보자. v 내용 서블릿의라이프사이클 서블릿클래스의 init 메서드의 destroy

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

PART 1 CHAPTER 1 Chapter 1 Note 4 Part 1 5 Chapter 1 AcctNum = Table ("Customer").Cells("AccountNumber") AcctNum = Customer.AccountNumber Note 6 RecordSet RecordSet Part 1 Note 7 Chapter 1 01:

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드] - Socket Programming in Java - 목차 소켓소개 자바에서의 TCP 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 Q/A 에코프로그램 - EchoServer 에코프로그램 - EchoClient TCP Programming 1 소켓소개 IP, Port, and Socket 포트 (Port): 전송계층에서통신을수행하는응용프로그램을찾기위한주소

More information

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC

<param-value> 파라미터의값 </param-value> </init-param> </servlet> <servlet-mapping> <url-pattern>/ 매핑문자열 </url-pattern> </servlet-mapping> - 위의예에서 ServletC 내장객체의정리 헷갈리는내장객체들정리하기 - 컨테이너안에서는수많은객체들이스스로의존재목적에따라서일을한다. - ServletContext, ServletConfig 객체는컨텍스트초기화와서블릿초기화정보를가지고있다. - 이외에도다음의객체들이서블릿과 JSP와 EL에서각각의역할을수행한다. 서블릿의객체 JspWriter HttpServletRequest HttpServletResponse

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스와메소드심층연구 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 접근제어 class A { private int a; int b; public int c; // 전용 // 디폴트 // 공용 public class Test { public static void main(string args[]) { A obj = new

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

PowerPoint Presentation

PowerPoint Presentation 자바프로그래밍 1 클래스와메소드심층연구 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 접근제어 class A { private int a; int b; public int c; // 전용 // 디폴트 // 공용 public class Test { public static void main(string args[]) { A obj = new

More information

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형 바에 제네릭스(generics)를 도입하기 위한 연구는 이미 8년 전인 1996년부터라고 한다. 실제로 자바에 제네릭스를 도입하 는 몇 가지 방안들이 논문으로 나오기 시작한 것이 1998년 초임을 감 안하면 무려 8년이 지난 후에야 자바 5.0에 전격 채택되었다는 것은 이것이 얼마나 어려운 일이었나 하는 것을 보여준다. 자바의 스펙을 결정하는 표준화 절차인

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

ibmdw_rest_v1.0.ppt

ibmdw_rest_v1.0.ppt REST in Enterprise 박찬욱 1-1- MISSING PIECE OF ENTERPRISE Table of Contents 1. 2. REST 3. REST 4. REST 5. 2-2 - Wise chanwook.tistory.com / cwpark@itwise.co.kr / chanwook.god@gmail.com ARM WOA S&C AP ENI

More information

TCP/IP Model

TCP/IP Model Servlet HTTP Connection & Tomcat Server 숙명여자대학교 _ 멀티미디어과학과 2012 년여름학기 윤용익 yiyoon@sm.ac.kr 2012 Web Program Language Web page 작성용언어 CGI 와서블릿 CGI(Common Gateway Interface) 웹사이트에서방명록, 게시판을작성하기위해서는 HTML 문서와함께방명록이나게시판을위한프로그램도작성해야하는데이프로그램은

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

기술문서 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라.

기술문서 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라. 기술문서 14. 11. 10. 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 dokymania@naver.com I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라. Exploit 5 마. 피해 6 III. 결론 6 가. 권고사항 6 I. 소개 가. 역자 본문서는

More information

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID android:title= 항목제목 /> </menu> public boolean oncreateoptionsmenu(menu menu) { getme 8 차시메뉴와대화상자 1 학습목표 안드로이드에서메뉴를작성하고사용하는방법을배운다. 안드로이드에서대화상자를만들고사용하는방법을배운다. 2 확인해볼까? 3 메뉴 1) 학습하기 [ 그림 8-1] XML 을이용한옵션메뉴설정방법 public boolean

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음

More information

3ÆÄÆ®-14

3ÆÄÆ®-14 chapter 14 HTTP >>> 535 Part 3 _ 1 L i Sting using System; using System.Net; using System.Text; class DownloadDataTest public static void Main (string[] argv) WebClient wc = new WebClient(); byte[] response

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 20 장패키지 이번장에서학습할내용 패키지의개념 패키지로묶는방법 패키지사용 기본패키지 유틸리티패키지 패키지는연관된클래스들을묶는기법입니다. 패키지란? 패키지 (package) : 클래스들을묶은것 자바라이브러리도패키지로구성 ( 예 ) java.net 패키지 네트워크관련라이브러리 그림 20-1. 패키지의개념 예제 패키지생성하기 Q: 만약패키지문을사용하지않은경우에는어떻게되는가?

More information