SMALL

*이항연상 동적 요소

<isEqual> : property 값이 compareProperty 값 또는 compareValue와 같은지 검사

<isNotEqual> : property 값이 compareProperty 값 또는 compareValue와 같지 않은지 검사

<isGreaterThan> : property 값이 compareProperty 값 또는 compareValue의 값보다 큰지 검사

<isGreaterEqual> : property 값이 compareProperty 값 또는 compareValue의 값보다 크거나 같은지 검사

<isLessThan> : property 값이 compareProperty 값 또는 compareValue의 값보다 작은지 검사

<isLessEqual> : property 값이 compareProperty 값 또는 compareValue의 값보다 작거나 같은지 검사

*이항연산 요소

property : 파라미터의 값을 비교할 때 사용...

prepend : 이 값은 요소의 내용 가장 앞에 출력 됨. 그러나. 결과 내용이 공백인 경우, dynamic 첫 자식의 요소일 경우, removeFirstPrepend가 true이고 이 요소가 처음으로 내용을 만들었을 경우.

removeFirstPrepend : 처음으로 내용을 출력하는 자식 요소의 prepend값을 출력할지 여부를 결정한다.

compareProperty: property 속성에 의해 명명 된 프로터티와 비교할 파라미터 객체의 프로퍼티를 나타낸다.

compareValue : propery 속성에 명명된 프로퍼티와 비교할 정적인 문자값

*단항연산 요소

property : 필수요소. 파라미터의 변수명

prepend : 내용은 이항연산과 같음

removeFirstPrepend : 내용은 이항연산과 같음

*단항연산 요소

<isPropertyAvailable> : 프로퍼티가 파라미터에 있는지 검사. 빈즈에서는 프로퍼티 Map에서는 키를 찾음<isPropertyAvailable> : 프로퍼티가 파라미터에 없는지 검사. 빈즈에서는 프로퍼티 Map에서는 키를 찾음<isNull> : 프로퍼티가 null인지 검사. 빈즈에서는 프로퍼티 Map에서는 키를 찾음

<isNotNull> : 프로퍼티가 null이 아닌지 검사. 빈즈에서는 프로퍼티 Map에서는 키를 찾음

<isEmpty> : 프로퍼티가 null 또는 빈문자열인지 검사.

<isNotEmpty> : 프로퍼티가 null 또는 빈문자열이 아닌지 검사.

<select id="getUser" parameterClass="map" resultClass="BuyuserDto">
SELECT * FROM BUYUSER
<dynamic prepend="WHERE">
<isNotEmpty property="bcompid" prepend="and"> 
BCOMPID = #bcompid#
</isNotEmpty>
<isNotEmpty property="pass" prepend="and" >
PWD = #pass#
</isNotEmpty>
</dynamic>
</select>

<!--

dynamic은 내용물을 만들 때 무조건 prepend로 지정 된 값을 붙인다(여기서는 where). 이 값을 막는 방법은 없다고 한다.

dynamic을 사용하면 첫번째 prepend 기능을 자동으로 무조건 제거한다. 이 말은 분홍색으로 체크 된 부분이 dynamic의 첫prepend값을 자동으로 삭제해버린다는 것이다. where절에서 조건을 1가지 이상 비교하려면 and를 붙여야 하는데... 처음에는 and가 들어가지 않으므로 파라미터값이 있고 없고에 따라서 prepend="and"내용을 따로 처리해 줄 필요 없이... where절 처음에 오는 and를 삭제해 주기 때문에 편한 것 같다. 원래 이 기능을 해주는 것이 따로 있는데... 그것이 removeFirstPrepend이다. 써보진 않았지만 그런 것같다. ㅋ 위의 쿼리에서 분홍색 부분의 prepend="and" 부분을 삭제하면 오류가 난다. 왜? dynamic요소가 처음 나오는 prepend를 삭제 하기 때문에 분홍색 글씨의 prepend="and"를 빼면 녹색글씨의 prepend="and"가 첫번째 prepend요소가 되기 때문이다.

-->

 



출처: http://jhroom.tistory.com/147 [JH's Room]

LIST

'Spring&mybatis(ibatis)' 카테고리의 다른 글

mybatis 기호 비교 등등  (0) 2018.10.26
mybatis order 속성사용  (0) 2018.10.26
a child container failed during start 에러  (0) 2018.09.27
@RestController , @Controller 차이점입니다  (0) 2018.03.20
Srping Hello 예제  (0) 2015.03.30
블로그 이미지

SeoHW

,
SMALL

eq - equal ( = )

ne - not equal ( <> )

lt - little ( < )

le - little or equal ( <= )

gt - greater ( > )

ge - greater or equal ( >= )


LIST
블로그 이미지

SeoHW

,
SMALL

흔히 DB의 PK를  auto increment로 두고 insert 작업을 수행하는 경우가 자주 있습니다.

 

그 때, 이 키를 가져와서 다른 테이블에 바로 저장하고 싶은 경우가 생긴다거나, 이 키 값을 알고 싶은 경우가 생기는 경우가 자주 

 

발생합니다.

 

보통 한 트렌젝션으로 묶은 후에 INSERT 후에 바로 SELECT를 하여 키를 가져오는 방법이 있는데,  Ibatis와 MyBatis에서는 이를 한 

 

동작으로 연결하는 기능을 지원하는데 그것이 바로 selectkey입니다.

 

Ibatis에서는 바로 값을 반환했던 반면에 MyBatis에서는 값을 넘겨줬던 모델에 값을 담는 다소 특이한 방법을 사용합니다.

 

 

 <insert id="insertImage">

INSERT INTO Image_Table(imageData, imageName)

VALUES(#{imageData},#{imageName})

<selectKey keyProperty="imageKey" resultType="Integer" order="AFTER">

SELECT LAST_INSERT_ID()

</selectKey>

</insert>

 

위와같이 Image_Table이라는 테이블에 imageData와 ImageName을 넣습니다. 그리고 ImageKey는 auto increment되어 자동으로 

 

증가합니다. 

 

INSERT구문은 별 다른게 없고, selectKey구문이 중요합니다. 

 

keyProperty : 반환해줄 키의 이름 

 

resultType : 반환해줄 타입 

 

order :selectKey 안의 쿼리를 insert문보다 먼저 실행한다면 before, 나중에 실행한다면 after를 씁니다.

(이 경우에서는 insert되어 auto increment된 값을 구해와야 하니까 after를 하는게 맞겠습니다.)

 

그리고 selectkey 안의 값은 최근 실행된 쿼리의 내용을 불러오는 함수를 쓰면 됩니다.

 

mysql은 SELECT LAST_INSERT_ID()

 

mssql은 @@IDENTITY

 

오라클은 시퀀스를 사용하면 되겠습니다.

 

마지막으로 반환 값에 대한 이야기를 하겠습니다 

 

Ibatis에서는 그냥 함수 자체에 반환 형을 써서 그 값을 리턴해왔지만, MyBatis는 전해준 VO객체에 값이 담기게 됩니다.

 

 ImageVO imageVO = new ImageVO();

imageVO.setImageData(data);

imageVO.setImageName(imgfile.getOriginalFilename());

insertImage(imageVO); 

 위와 같은 방식으로 했다고 한다면 Ibatis에서는

 

 int key = insertImage(imageVO);

위처럼 바로 값을 받는 방식을 사용했었습니다. 

 

 int key = imageVO.getImageKey();

MyBatis에서는 위와 같은 방식으로 값을 전해줬던 VO에서 키가 자동으로 담기는 방식입니다.

 

LIST
블로그 이미지

SeoHW

,
SMALL

아래 에러입니다

심각: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/first]]
 at java.util.concurrent.FutureTask.report(FutureTask.java:122)
 at java.util.concurrent.FutureTask.get(FutureTask.java:192)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
 at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/first]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@6c7e475e]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4969)
 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5099)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@45eb5a6]
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:135)
 at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 9 more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
 at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:113)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 ... 12 more
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
 at java.util.zip.ZipFile.read(Native Method)
 at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
 at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717)
 at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:419)
 at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
 at sun.misc.IOUtils.readFully(IOUtils.java:65)
 at java.util.jar.JarFile.getBytes(JarFile.java:425)
 at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193)
 at java.util.jar.JarFile.getManifest(JarFile.java:180)
 at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:111)
 ... 13 more


12월 31, 2016 9:19:12 오전 org.apache.catalina.core.ContainerBase startInternal
심각: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
 at java.util.concurrent.FutureTask.report(FutureTask.java:122)
 at java.util.concurrent.FutureTask.get(FutureTask.java:192)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:943)
 at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:789)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:951)
 at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 6 more


12월 31, 2016 9:19:12 오전 org.apache.catalina.startup.Catalina start
심각: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:789)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
 at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:951)
 at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 ... 11 more


12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol pause
정보: Pausing ProtocolHandler ["http-nio-8080"]
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol pause
정보: Pausing ProtocolHandler ["ajp-nio-8009"]
12월 31, 2016 9:19:12 오전 org.apache.catalina.core.StandardService stopInternal
정보: Stopping service Catalina
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
정보: Destroying ProtocolHandler ["http-nio-8080"]
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
심각: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]
java.lang.NullPointerException
 at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
 at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
 at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:833)
 at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
 at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:879)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)


12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
정보: Destroying ProtocolHandler ["ajp-nio-8009"]
12월 31, 2016 9:19:12 오전 org.apache.coyote.AbstractProtocol destroy
심각: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"]
java.lang.NullPointerException
 at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:316)
 at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:492)
 at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:833)
 at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:551)
 at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:589)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:879)
 at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:292)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)

 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)



해결은

maven 의 repository 폴더 내부의 모든 폴더를 삭제한뒤

프로젝트우클릭 - maven- Update project 하여 문제를 해결하였습니다


LIST

'Spring&mybatis(ibatis)' 카테고리의 다른 글

ibatis 태그 지원 목록입니다  (0) 2018.11.12
mybatis 기호 비교 등등  (0) 2018.10.26
mybatis order 속성사용  (0) 2018.10.26
@RestController , @Controller 차이점입니다  (0) 2018.03.20
Srping Hello 예제  (0) 2015.03.30
블로그 이미지

SeoHW

,
SMALL
@Controller 
@Controller
public class restClassName{

  @RequestMapping(value={"/uri"})
  @ResponseBody
  public ObjectResponse functionRestName(){
      //...
      return instance
   }
}

@RestController 

@RestController
public class restClassName{

  @RequestMapping(value={"/uri"})
  public ObjectResponse functionRestName(){
      //...
      return instance
   }
}
  @ResponseBody 가 기본적으로 적용됩니다@RestController 에서는요~


LIST

'Spring&mybatis(ibatis)' 카테고리의 다른 글

ibatis 태그 지원 목록입니다  (0) 2018.11.12
mybatis 기호 비교 등등  (0) 2018.10.26
mybatis order 속성사용  (0) 2018.10.26
a child container failed during start 에러  (0) 2018.09.27
Srping Hello 예제  (0) 2015.03.30
블로그 이미지

SeoHW

,
SMALL

이전 예제에서 유의깊게 봐야할 부분이라면 바로 이부분일 것입니다.

 

 

 

${serverTime} 이부분에서 서버의 시간대를 가져옵니다. 꼭 PHP 에서 자주본 문법같기도 합니다.

문제는 저게 왜 서버의 시간대를 지칭하는지 아직 모른다는 것이죠.

 

제가 생각한 가능성은 다음과 같습니다.

 

1. ${serverTime} 은 스프링 프레임워크에서 제공하는 매크로 상수이다.

2. 소스 어디선가 전역적으로 사용할 수 있도록 변수를 정의 하였다.

3. 스프링 프레임워크를 공부하다 보면 알 수 있을 것이다.

 

사실 3번이 답이겠죠. 아직 모르겠습니다.

이번 포스팅에서는 스프링의 구조와 함께 그 부분을 조사해보겠습니다.

 

 일단 ${serverTime} 의 궁금증을 풀기 위해 소스를 뒤져보겠습니다.

HomeController.java 파일을 찾을 수 있는데요.

 

 

 

소스의 내용을 보면 다음과 같은 내용이 있습니다.

 

 

 

${serverTime} 과 깊은 관련이 있어보이는 부분이 보입니다.

model.addAttribute() 함수를 이용해서 속성(Attribute) 를 추가합니다.

아마도 (key, value) 로 넣는 것이겠죠.

키가 "serverTime", 값은 포맷된 현재 시간의 문자열입니다.

 

이부분이 찾는 부분이 맞는지 확인하기 위해 소스를 조금 바꿔보겠습니다.

소스를 다음과 같이 바꿔줍니다.

 

 

 

만약 위의 예상이 맞다면 화면의 표시되는 시간이 바뀌어야합니다.

 

소스를 변경하고 다시 실행한 모습입니다.

 

 

 

역시 예상대로 화면이 바뀌었습니다.

즉 ${serverTime} 은  model.addAttribute() 를 통해 들어온 속성을 불러온것이라고 볼 수 있겠죠.

 

또 HomeController.java 에서는 주의깊게 봐야 할 부분이 있습니다.

 

 

 

 

바로 밑줄 친  어노테이션 부분입니다.

스프링은 @Controller 어노테이션을 보고 이 클래스가 Controller 라는것을 인지합니다.

 

또 메소드 위에 @RequestMapping 어노테이션을 보고 이것이 요청때 사용되어진다는 것을 확인하죠.

 

 

 @RequestMapping(value = "/", method = RequestMethod.GET)

 

여기서 value 는 패키지 이후의 상세 매핑 주소라고 생각됩니다. 

method 는 아마도 HTTP 의 GET 메소드 방식을 의미하겠죠.

 

확인하기 위해 value 부분을 바꿔보겠습니다.

다음 화면과 같이 바꿔보죠.

 

 

 

이렇게 수정한뒤 아까와 같은 주소로 접속해보겠습니다.

http://localhost:8080/blog 로 접속하면 다음과 같이 화면이 나옵니다.

 

 

 

이제는 아래의 주소로 접근해야 합니다.

http://localhost:8080/blog/home

 

 

 

@RequestMapping 에 의해 Method 가 실행된다는 것을 알 수 있습니다.

 

또 return 부분을 봐야합니다.

 

 

 

여기서 "home" 문자열을 반환하는데, 이것은 어떤 뷰를 실행할것인지 선택하는 중요한 요건입니다.

 

잠시 ServletContext.xml 파일을 보겠습니다.

 

 

소스중 이런 부분이 있습니다.

 

 

 

<beans:bean>  태그에 InternalResourceViewResolver 가 있습니다.

그리고 접두사가

/WEB-INF/views/

 

접미사가 

.jsp

입니다.

 

주석은 @Controller 에 의해 렌더링 하기 위해 선택된 뷰 라고 쓰여 있습니다.

즉 Controller 에서 반환한 "home"  은 

/WEB-INF/views/home.jsp 가 되는 것입니다.

 

역시 이부분도 시험삼아 home2.jsp 를 만들고 @Controller 에서는 "home2" 를 반환해보겠습니다.

 

home2.jsp 를 만들고 다음과 같이 편집합니다.

 

 

 

그리고 Controller 에서는 "home2" 를 반환합니다.

 

 

 

이제 실행해보겠습니다.

 

 

 

예상대로 home2.jsp 가 불리게 되었습니다.

위의 사항을 토대로 페이지가 불리게 되는 순서를 그림으로 그려보죠.

 

 

 

 

아직 저도 배우는 입장이라 정확하지 않지만 현재까지 제가 아는 지식으로 보면 저런 그림이 나옵니다.

 

하지만 이 예제에서는 요청때 아무런 데이터도 전달하지 않았습니다.

대부분 페이지를 요청할때 데이터를 같이 전달합니다.

LIST
블로그 이미지

SeoHW

,