代码之家  ›  专栏  ›  技术社区  ›  toolkit

Equinox中的Jasper-不解析jstl核心uri

  •  1
  • toolkit  · 技术社区  · 16 年前

    我目前正在用Spring研究OSGi,并通过来自 Pro Spring Dynamic Modules for OSGi

    我的示例web应用程序只有一个控制器,如:

    @Controller
    public class HelloWorldController {
        private HelloWorldService helloWorldService;
    
        @RequestMapping(method = RequestMethod.GET)
        @ModelAttribute("helloworld")
        public HelloWorld home() {
            return this.helloWorldService.find();
        }
    
        // injected in - spring looks up the service from OSGi
        public void setHelloWorldService(HelloWorldService helloWorldService) {
            this.helloWorldService = helloWorldService;
        }
    }
    

    视图解析器配置为:

    <bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="viewClass" 
        value="org.springframework.web.servlet.view.JstlView"/>
      <property name="prefix" value="/jsp/" />
      <property name="suffix" value=".jsp" />
    </bean>
    

    正在调用url 'http://localhost:8080/helloworld-web/spring/home' 应该引起注意 jsp/home.jsp helloworld 包含单个bean:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <html>
    <head>
    <title>Spring DM HelloWorld</title>
    </head>
    <body>
    <p>Results from accessing Spring-DM service bundle:</p>
    <p>Message <c:out value="${helloworld.message}" /></p>
    <p>Current Time: <c:out value="${helloworld.currentTime}" /></p>
    <p>Model Version: <c:out value="${helloworld.modelVersion}" /></p>
    </body>
    </html>
    

    但是,我看到了以下跟踪:

    org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
        org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
        org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
        org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116)
        org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:317)
        org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:148)
        org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:424)
        org.apache.jasper.compiler.Parser.parseDirective(Parser.java:493)
        org.apache.jasper.compiler.Parser.parseElements(Parser.java:1557)
        org.apache.jasper.compiler.Parser.parse(Parser.java:127)
        org.apache.jasper.compiler.ParserController.doParse(ParserController.java:212)
        org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
        org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:156)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:296)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
        org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
        org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:299)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
        org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
        org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    

    WEB-INF/lib

    我的理解是,OSGi版本的jasper将在单个web应用程序之外寻找taglib描述符和jar?

    2 回复  |  直到 13 年前
        1
  •  2
  •   toolkit    16 年前

    一定是一些微妙的捆绑版本问题。我下载了 example code

    这个 Spring-DM reference

    springdm扩展了JSP约定,通过检测bundle类路径(导入的包或所需的bundle)中定义的任何taglib,将taglib打包为jar放在WEB-INF/lib下或解包放在WEB-INF/classes下。

    我已经做了。。。

        2
  •  0
  •   Vincent Demeester    16 年前

    什么包含你的舱单.MF(在进口包装和/或所需捆绑包中?)

    Bundle-ManifestVersion: 2
    Bundle-Classpath: .,
     WEB-INF/classes
    Bundle-Version: 0.0.1.SNAPSHOT
    Bundle-Name: iki-admin
    Import-Package: javax.servlet,
     javax.servlet.http,
     javax.servlet.resources,
     [..]
     net.sf.navigator.taglib.el,
     [..]
     org.ikiproject.lib.exception,
     [..]
     org.springframework.web.servlet.tags,
     uk.ltd.getahead.dwr
    Bundle-SymbolicName: org.ikiproject.admin
    Web-ContextPath: iki-admin
    Application-TraceLevels: *=info,org.ikiproject.*=verbose
    Bundle-RequiredExecutionEnvironment: JavaSE-1.6
    Require-Bundle: com.springsource.javax.servlet.jsp.jstl,
     com.springsource.org.apache.taglibs.standard,
     org.springframework.security.taglibs