jsp 에서 스피링 MVC controller 호출...

4,565 views
Skip to first unread message

규우

unread,
Aug 7, 2009, 12:46:54 AM8/7/09
to Korea Spring User Group
안녕하세요 ^^
오늘도 어김없이 스프링을 가지고 삽질중인 규우입니다.ㅋㅋㅋ

이번 삽질 내용은
jsp 에서 스프링 bean 에 등록되어있는 controller 를 호출하는 것인데요..

아래와 같은 코드로는 계속 bean 을 못찾는다고 나오네여.ㅠㅠ

ServletContext servletContext = this.getServletContext();
WebApplicationContext wac =
WebApplicationContextUtils.getRequiredWebApplicationContext
(servletContext);
WapController wap = (WapController)wac.getBean("wap");

Sanghyuk Jung

unread,
Aug 7, 2009, 12:52:37 AM8/7/09
to ks...@googlegroups.com
에러 메시지를 한번 긁어서 보여주셨으면 합니다~

2009년 8월 7일오후 1:46, 규우 <lng...@gmail.com>님의 말:

안영회

unread,
Aug 7, 2009, 1:03:43 AM8/7/09
to ks...@googlegroups.com
JSP라면 URL만으로 Controller를 호출할 수 있는데 왜 굳이 자바빈도 아니고 Controller를 Context를 통해 호출하시는지 궁금하군요.

규우

unread,
Aug 7, 2009, 1:04:00 AM8/7/09
to Korea Spring User Group
2009-08-07 13:22:10,588 [TP-Processor2] ERROR -
StandardWrapperValve.invoke(250) | Servlet.service() for servlet jsp
threw exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
bean named 'wap' is defined
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition
(DefaultListableBeanFactory.java:345)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getMergedBeanDefinition
(AbstractBeanFactory.java:894)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:243)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:160)
at
org.springframework.context.support.AbstractApplicationContext.getBean
(AbstractApplicationContext.java:703)
at org.apache.jsp.wap.i_jsp._jspService(i_jsp.java:193)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service
(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile
(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:188)
at
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal
(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter
(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service
(CoyoteAdapter.java:151)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:
200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:
283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at org.apache.jk.common.ChannelSocket.processConnection
(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt
(ChannelSocket.java:895)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:619)

action-servlet.xml 파일에 controller bean 이 등록되어 있습니다..

규우

unread,
Aug 7, 2009, 1:07:13 AM8/7/09
to Korea Spring User Group
통계 관련하여 개발중인데 사용자가 페이지 접근시에 접근한 jsp 페이지 name을 request 객체에서 가져오고, 이 정보를
이용하여 DB 에 접근하여 page_ID 를 가져오는 식으로 개발하고 있기 때문에 jsp 에서 화면 전환 없이
controller 를 호출해야 하는 것입니다..ㅎㅎ

안영회

unread,
Aug 7, 2009, 1:33:23 AM8/7/09
to ks...@googlegroups.com
통계 관련하여 개발중인데 사용자가 페이지 접근시에 접근한 jsp 페이지 name을 request 객체에서 가져오고, 이 정보를
이용하여 DB 에 접근하여 page_ID 를 가져오는 식으로 개발하고 있기 때문에 jsp 에서 화면 전환 없이
controller 를 호출해야 하는 것입니다..ㅎㅎ

request 객체는 JSP에서 접근할 수 있고, DB는 controller가 아니더라도 접근할 수 있는데 Controller를 호출해야 하는 이유는 뭔가요?

sungchul park

unread,
Aug 7, 2009, 3:28:22 AM8/7/09
to ks...@googlegroups.com
> request 객체는 JSP에서 접근할 수 있고, DB는 controller가 아니더라도 접근할 수 있는데 Controller를 호출해야 하는 이유는 뭔가요?

아마도 jsp를 재활용하려는 것 같은데요.
여러 컨트롤러가 통계 출력시 한 jsp를 view로 사용하고 그 view는 url에서 컨트롤러를 얻어 그 컨트롤러에 공통적으로 구현된 메소드를 실행시켜서 어떤 값을 가지고 오려는...

그런데 규우님... 그냥 컨트롤러가 자기 자신의 레퍼런스를 model에 넣어주면 안 되나요?
그리고 미리 DB에서 읽어야하는 그 값을 model에 넣어줄 수 없는 상황인가요?

2009년 8월 7일오후 2:33, 안영회 <ahnyo...@gmail.com>님의 말:

규우

unread,
Aug 8, 2009, 4:06:38 PM8/8/09
to Korea Spring User Group
흠.....요건 정리를 다시해보겠습니다..
개발 목적은 사용자가 wap 에 접속했을때 접속 로그를 쌓는게 그 목적입니다..
모든 jsp 페이지에는 common.jsp 라는 파일이 include되어 있는 상태이구, 이 include 되어 있는 공통 파
일에서 접속 로그를 쌓으려고 합니다..
현재 설계상으로는 jsp 페이지마다 유일한 page_ID를 부여하였는데 이 부여된 page_ID 를 뽑아오려면
request.getRequestURI() 을 이용하여 176_intro.jsp 와 같은 식으로 페이지명을 얻어와 DB 조회를
하여 page_id를 뽑아온 후에 이 페이지 아이디를 DB에 insert를 하려고 하는 것입니다..
그렇기에 사용자 화면에서는 페이지 전환이 안 이루어지게끔 저는 bean를 가져와 insert, select를 하려고 하는것인
데 , 이게 좋은 방법인지는 잘 모르겠네여..

혹시 controller를 호출안하고, jsp 단에서 DB 작업을 할 수 있는 좋은 방법이 있으면 조언 부탁드리겠습니다.

On 8월7일, 오후4시28분, sungchul park <gyu...@gmail.com> wrote:
> > request 객체는 JSP에서 접근할 수 있고, DB는 controller가 아니더라도 접근할 수 있는데 Controller를
>
> 호출해야 하는 이유는 뭔가요?
>
> 아마도 jsp를 재활용하려는 것 같은데요.
> 여러 컨트롤러가 통계 출력시 한 jsp를 view로 사용하고 그 view는 url에서 컨트롤러를 얻어 그 컨트롤러에 공통적으로 구현된
> 메소드를 실행시켜서 어떤 값을 가지고 오려는...
>
> 그런데 규우님... 그냥 컨트롤러가 자기 자신의 레퍼런스를 model에 넣어주면 안 되나요?
> 그리고 미리 DB에서 읽어야하는 그 값을 model에 넣어줄 수 없는 상황인가요?
>

> 2009년 8월 7일오후 2:33, 안영회 <ahnyoung...@gmail.com>님의 말:


>
>
>
> > 통계 관련하여 개발중인데 사용자가 페이지 접근시에 접근한 jsp 페이지 name을 request 객체에서 가져오고, 이 정보를
> >> 이용하여 DB 에 접근하여 page_ID 를 가져오는 식으로 개발하고 있기 때문에 jsp 에서 화면 전환 없이
> >> controller 를 호출해야 하는 것입니다..ㅎㅎ
>
> > request 객체는 JSP에서 접근할 수 있고, DB는 controller가 아니더라도 접근할 수 있는데 Controller를

> > 호출해야 하는 이유는 뭔가요?- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -

안영회

unread,
Aug 9, 2009, 11:10:37 AM8/9/09
to ks...@googlegroups.com
...

모든 jsp 페이지에는 common.jsp 라는 파일이 include되어 있는 상태이구,  이 include 되어 있는 공통 파 일에서 접속 로그를 쌓으려고 합니다..
현재 설계상으로는 jsp 페이지마다 유일한 page_ID를 부여하였는데 이 부여된 page_ID 를 뽑아오려면
request.getRequestURI() 을 이용하여 176_intro.jsp 와 같은 식으로 페이지명을 얻어와 DB 조회를
하여 page_id를 뽑아온 후에 이 페이지 아이디를 DB에 insert를 하려고 하는 것입니다..
그렇기에 사용자 화면에서는 페이지 전환이 안 이루어지게끔 저는 bean를 가져와 insert, select를 하려고 하는것인
데 , 이게 좋은 방법인지는 잘 모르겠네여..

혹시 controller를 호출안하고, jsp 단에서 DB 작업을 할 수 있는 좋은 방법이 있으면 조언 부탁드리겠습니다.

 
글만 보아선 상황이 정확하게 이해하기 힘들지만, 현재 방식은 무언가 자연스럽지 못하네요. 특정 HTTP 요청마다 로그를 찍는 목적이라면 JSP 보다는 Handler Interceptor를 사용하는 방법이 어떨까요? 한글 설명도 찾을 수 있군요.

Toby Lee

unread,
Aug 9, 2009, 6:24:42 PM8/9/09
to ks...@googlegroups.com
특정 HTTP 요청마다 로그를 찍는 목적이라면 JSP 보다는 Handler Interceptor를 사용하는 방법이 어떨까요? 한글 설명도 찾을 수 있군요.

스프링MVC(DispatcherServlet)를 통해서 들어오는 것이 아니고 JSP가 전방에 있는(아마도 고정된 URL때문?) Model1인데 HandlerInterceptor라니 말도 안되는 얘기군요.

기술적으로는 접근방법은 전혀 문제가 없습니다. JSP Model1에서 스프링 컨텍스트를 가져와 스프링을 이용하는 가장 전형적인 구조이니 스프링 컨텍스트를 제대로 못가져올 이유는 없습니다. 설정 어딘가가 제대로 안되어있는 것일테고, 그건 프로젝트의 설정관련 파일 전체를 보여주지 않으시면 잡을 방법이 없습니다.

일단 로그목적이라면 구지 컨트롤러를 호출해야 할 이유는 없습니다. 간단한 로그용 서비스 빈을 만들어서 사용하시고, URL만 넘겨주면 되겠죠.

설정이 바르게 됐다면 JSP의 include에서 해도 되고, 좀 폼나게 한다면 ServletFilter를 이용하는 방법도 괜찮을 것 같습니다.

문제가 발생하는 풀 프로젝트 파일(최소한의 것이라도)을 올려주기 전에는 더 이상 조언 가지고는 현재 문제해결 자체에는 도움이 될게 없습니다. 간단한 방법인데 안된다면 분명 설정 어딘가에 실수를 한 것입니다. 차근차근 설정파일 만드는 것부터 해보시던가요.

2009/8/10 안영회 <ahnyo...@gmail.com>

sungchul park

unread,
Aug 9, 2009, 9:02:18 PM8/9/09
to ks...@googlegroups.com
jsp에서 직접 서비스나 Dao Bean을 가지고 와서 써도 되고요.
Darasource에서 connection을 직접 얻어올 수도 있습니다.
그런데 이런 일은 jsp 대신 intercepter에서 처리하는 게 더 낫지 않을까요?
아니면 servlet filter...
꼭 jsp 단에서 해야 한다면 JstlView를 확장해서 jsp 처리 전에 작업하실 수도 있겠네요.


2009/8/9 규우 <lng...@gmail.com>

박성철

unread,
Aug 9, 2009, 9:16:10 PM8/9/09
to Korea Spring User Group
아! model 1 방식인가요?

On 8월10일, 오전7시24분, Toby Lee <tobyi...@gmail.com> wrote:
> > 특정 HTTP 요청마다 로그를 찍는 목적이라면 JSP 보다는 Handler Interceptor<http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html#m...>를
> > 사용하는 방법이 어떨까요? 한글 설명<http://www.javajigi.net/pages/viewpage.action?pageId=2528>도


> > 찾을 수 있군요.
>
> 스프링MVC(DispatcherServlet)를 통해서 들어오는 것이 아니고 JSP가 전방에 있는(아마도 고정된 URL때문?)
> Model1인데 HandlerInterceptor라니 말도 안되는 얘기군요.
>
> 기술적으로는 접근방법은 전혀 문제가 없습니다. JSP Model1에서 스프링 컨텍스트를 가져와 스프링을 이용하는 가장 전형적인 구조이니
> 스프링 컨텍스트를 제대로 못가져올 이유는 없습니다. 설정 어딘가가 제대로 안되어있는 것일테고, 그건 프로젝트의 설정관련 파일 전체를
> 보여주지 않으시면 잡을 방법이 없습니다.
>
> 일단 로그목적이라면 구지 컨트롤러를 호출해야 할 이유는 없습니다. 간단한 로그용 서비스 빈을 만들어서 사용하시고, URL만 넘겨주면
> 되겠죠.
>
> 설정이 바르게 됐다면 JSP의 include에서 해도 되고, 좀 폼나게 한다면 ServletFilter를 이용하는 방법도 괜찮을 것
> 같습니다.
>
> 문제가 발생하는 풀 프로젝트 파일(최소한의 것이라도)을 올려주기 전에는 더 이상 조언 가지고는 현재 문제해결 자체에는 도움이 될게
> 없습니다. 간단한 방법인데 안된다면 분명 설정 어딘가에 실수를 한 것입니다. 차근차근 설정파일 만드는 것부터 해보시던가요.
>

> 2009/8/10 안영회 <ahnyoung...@gmail.com>


>
> > ...
> >> 모든 jsp 페이지에는 common.jsp 라는 파일이 include되어 있는 상태이구, 이 include 되어 있는 공통 파
> >> 일에서 접속 로그를 쌓으려고 합니다..
> >> 현재 설계상으로는 jsp 페이지마다 유일한 page_ID를 부여하였는데 이 부여된 page_ID 를 뽑아오려면
> >> request.getRequestURI() 을 이용하여 176_intro.jsp 와 같은 식으로 페이지명을 얻어와 DB 조회를
> >> 하여 page_id를 뽑아온 후에 이 페이지 아이디를 DB에 insert를 하려고 하는 것입니다..
> >> 그렇기에 사용자 화면에서는 페이지 전환이 안 이루어지게끔 저는 bean를 가져와 insert, select를 하려고 하는것인
> >> 데 , 이게 좋은 방법인지는 잘 모르겠네여..
>
> >> 혹시 controller를 호출안하고, jsp 단에서 DB 작업을 할 수 있는 좋은 방법이 있으면 조언 부탁드리겠습니다.
>
> > 글만 보아선 상황이 정확하게 이해하기 힘들지만, 현재 방식은 무언가 자연스럽지 못하네요. 특정 HTTP 요청마다 로그를 찍는 목적이라면

> > JSP 보다는 Handler Interceptor<http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html#m...>를
> > 사용하는 방법이 어떨까요? 한글 설명<http://www.javajigi.net/pages/viewpage.action?pageId=2528>도
> > 찾을 수 있군요.

Reply all
Reply to author
Forward
0 new messages