티스토리 뷰

Computer/SPRING

[SPRING] javax.servlet.jsp.JspTagException

인생이글케쉬우냐 2009. 9. 9. 11:38

========================================================================================
심각: Servlet.service() for servlet action threw exception
javax.servlet.jsp.JspTagException: Neither BindingResult nor plain target object for bean name 'email' available as request attribute
    at org.springframework.web.servlet.tags.BindTag.doStartTagInternal(BindTag.java:121)
    at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:77)
    at org.apache.jsp.jsp.mail.EmailSend_jsp._jspService(EmailSend_jsp.java:401)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
    at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

========================================================================================
스프링의 소스인 BindTag.java안에 있는 해당 메소드를 검색해보니 익셉션이 아래와 같은 경우에 생성이 되었다.

protected final int doStartTagInternal() throws Exception {
....

        try {
            this.status = new BindStatus(getRequestContext(), resolvedPath, isHtmlEscape());
        }
        catch (IllegalStateException ex) {
            throw new JspTagException(ex.getMessage());
        }
.....
    }

그 전까지는 저런 익셉션 없었는데,
업데이트문을 하나 추가하고 난 뒤에 벌어진 일이라, 업데이트 문의 문제라고 생각했었다.
그래서 쿼리에 문제가 있었다고 생각했는데 디버깅한다고 다 찍어보니 그건 아니었다.

문제는 해쉬맵에 있었다.
나름 별도로 띄워두겠다고 컨트롤러내에서 내가 따로 정의한 Map을 리턴하게 해둔 메소드에서
null을 리턴하고(당당히 return null;이라 적었음),
view에선 해당 맵을 찾고 있으니 생각해보면 당연한 오류였다.

이런 멍청한 행동은 하지 말아야지;;;

반응형