【问题标题】:Why do axis2's jsps give compiler errors when running in tomcat6?为什么axis2的jsps在tomcat6中运行时会报编译错误?
【发布时间】:2011-11-05 19:02:41
【问题描述】:

在 Ubuntu 中,我运行的是 Tomcat 6,浏览器底部的 Tomcat 版本显示:

Apache Tomcat/6.0.28

我通过apt-get 安装了Tomcat。我制作了一些“hello world”servlet,并确认 Tomcat 6 似乎工作正常。

因为我的最终目标是做一个网络服务,所以我去找了axis2。我找不到axis2的任何Ubuntu软件包,所以接下来我从here下载了axis2 v 1.6.1并将其解压缩到我的主目录中。首先,我指出了一个符号链接 /var/lib/tomcat6/webapps/axis2 -> /home/doug/.../axis2-1.6.1/webapp/ 基于these instructions

浏览到http://localhost:8080/axis2/ 我希望看到基本的axis2(管理员?)页面。相反,我收到大量错误,抱怨无法编译axis2的jsp:

类型异常报告 信息 描述 服务器遇到一个内部错误 () 阻止它完成这个请求。 例外 org.apache.jasper.JasperException:无法为 JSP 编译类: 生成的 java 文件中的第 6 行出现错误 只能导入一个类型。 org.apache.axis2.Constants 解析为一个包 生成的 java 文件中的第 7 行出现错误 只能导入一个类型。 org.apache.axis2.context.ConfigurationContext 解析为一个包 生成的 java 文件中的第 8 行出现错误 只能导入一个类型。 org.apache.axis2.description.Parameter 解析为一个包 生成的 java 文件中的第 9 行发生错误 只能导入一个类型。 org.apache.axis2.transport.http.AxisServlet 解析为一个包 生成的 java 文件中的第 10 行发生错误 只能导入一个类型。 org.apache.axis2.transport.TransportListener 解析为一个包 在 jsp 文件中的第 31 行发生错误:/axis2-web/include/httpbase.jsp ConfigurationContext 无法解析为类型 28: 29: 公共无效 jspInit() { 30: ServletContext 上下文 = this.getServletConfig().getServletContext(); 31:ConfigurationContext configctx = (ConfigurationContext) context.getAttribute(AxisServlet.CONFIGURATION_CONTEXT); 32: if (configctx != null) { 33:参数参数 = configctx.getAxisConfiguration().getParameter(Constants.HTTP_FRONTEND_HOST_URL); 34:如果(参数!= null){ 在 jsp 文件中的第 31 行发生错误:/axis2-web/include/httpbase.jsp ConfigurationContext 无法解析为类型 28: 29: 公共无效 jspInit() { 30: ServletContext 上下文 = this.getServletConfig().getServletContext(); 31:ConfigurationContext configctx = (ConfigurationContext) context.getAttribute(AxisServlet.CONFIGURATION_CONTEXT); 32: if (configctx != null) { 33:参数参数 = configctx.getAxisConfiguration().getParameter(Constants.HTTP_FRONTEND_HOST_URL); 34:如果(参数!= null){ 在 jsp 文件中的第 31 行发生错误:/axis2-web/include/httpbase.jsp AxisServlet.CONFIGURATION_CONTEXT 无法解析为类型 28: 29: 公共无效 jspInit() { 30: ServletContext 上下文 = this.getServletConfig().getServletContext(); 31:ConfigurationContext configctx = (ConfigurationContext) context.getAttribute(AxisServlet.CONFIGURATION_CONTEXT); 32: if (configctx != null) { 33:参数参数 = configctx.getAxisConfiguration().getParameter(Constants.HTTP_FRONTEND_HOST_URL); 34:如果(参数!= null){ 在 jsp 文件中的第 33 行发生错误:/axis2-web/include/httpbase.jsp 参数无法解析为类型 30: ServletContext 上下文 = this.getServletConfig().getServletContext(); 31:ConfigurationContext configctx = (ConfigurationContext) context.getAttribute(AxisServlet.CONFIGURATION_CONTEXT); 32: if (configctx != null) { 33:参数参数 = configctx.getAxisConfiguration().getParameter(Constants.HTTP_FRONTEND_HOST_URL); 34:如果(参数!= null){ 35: frontendHostUrl = (String) 参数.getValue(); 36:} 在 jsp 文件中的第 33 行发生错误:/axis2-web/include/httpbase.jsp Constants.HTTP_FRONTEND_HOST_URL 无法解析为类型 30: ServletContext 上下文 = this.getServletConfig().getServletContext(); 31:ConfigurationContext configctx = (ConfigurationContext) context.getAttribute(AxisServlet.CONFIGURATION_CONTEXT); 32: if (configctx != null) { 33:参数参数 = configctx.getAxisConfiguration().getParameter(Constants.HTTP_FRONTEND_HOST_URL); 34:如果(参数!= null){ 35: frontendHostUrl = (String) 参数.getValue(); 36:} 在 jsp 文件中的第 37 行发生错误:/axis2-web/include/httpbase.jsp 参数无法解析为类型 34:如果(参数!= null){ 35: frontendHostUrl = (String) 参数.getValue(); 36:} 37:参数hostnameParam = configctx.getAxisConfiguration().getParameter(TransportListener.HOST_ADDRESS); 38:如果(主机名参数!=空){ 39:主机名=(字符串)主机名Param.getValue(); 40:} 在 jsp 文件中的第 37 行发生错误:/axis2-web/include/httpbase.jsp TransportListener.HOST_ADDRESS 无法解析为类型 34:如果(参数!= null){ 35: frontendHostUrl = (String) 参数.getValue(); 36:} 37:参数hostnameParam = configctx.getAxisConfiguration().getParameter(TransportListener.HOST_ADDRESS); 38:如果(主机名参数!=空){ 39:主机名=(字符串)主机名Param.getValue(); 40:} 堆栈跟踪: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439) org.apache.jasper.compiler.Compiler.compile(Compiler.java:349) org.apache.jasper.compiler.Compiler.compile(Compiler.java:327) org.apache.jasper.compiler.Compiler.compile(Compiler.java:314) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968) org.apache.jsp.axis2_002dweb.index_jsp._jspService(index_jsp.java:59) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

我不应该在 Tomcat 6 中尝试最新的axis2吗?有没有我应该使用的 Ubuntu 软件包?

【问题讨论】:

  • 从未见过,但我真的建议您获取自己的 Tomcat 并将其放入您自己的目录之一,然后将轴 webapp 复制到其中。通过这种方式,您可以更好地控制整个过程。
  • 顺便问一下,为什么要选择相当老式的 Axis+JSP?为什么不是 JAX-WS/RS?从 Java EE 5 开始,Web 服务在 Java EE 中实现了标准化,使用 JAX-WS API 并且从 Java EE 6 开始也使用了很棒的 RESTful JAX-RS API。对于 JAX-WS,请参阅 metro.java.net/guide,对于 JAX-RS,请参阅 jersey.java.net/nonav/documentation/latest/user-guide.html

标签: java jsp tomcat axis2


【解决方案1】:

那些令人困惑的 JSP 编译错误隐藏在 实际上 NoClassDefFoundErrors,在您的特定情况下,这反过来意味着与 Axis 相关的库(JAR 文件)不存在于 webapp 的运行时类路径中. webapp 的 /WEB-INF/lib 文件夹是 webapp 的运行时类路径的一部分,所以把它们放在那里。

【讨论】:

  • 是的,显然 Tomcat 不是通灵的,我想我可以做的另一件事是弄清楚如何使用 Tomcat 的类路径来指向我的轴库。
【解决方案2】:

您所指的快速入门指南并没有说您应该从 /var/lib/tomcat6/webapps/axis2 -> /home/doug/.../axis2-1.6.1 创建一个“符号链接” /webapp/”。它说你应该“将axis2.war文件复制到你的servlet引擎的webapps目录”。获取axis2.war文件有两种方式:

  • 下载 WAR 分发包。
  • 下载二进制分发包并在 webapp 文件夹中执行 Ant 脚本。

【讨论】:

    【解决方案3】:

    我已经下载了axis2-1.6.2-bin.zip并使用Window -> Preferences -> Web Services -> Axis2 Preferences ->Axis2 Runtime将其添加到eclipse中

    然后从java类创建webservice。

    使用axis2-1.6.2-bin 代替axis2-1.7.3-bin 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 2013-08-05
      • 2021-04-28
      • 1970-01-01
      相关资源
      最近更新 更多