【问题标题】:Tomcat 7 with Java 8 on Raspberry PiTomcat 7 和 Raspberry Pi 上的 Java 8
【发布时间】:2015-02-21 09:45:14
【问题描述】:

UPDATE tomcat8 似乎在这种情况下工作,因为我可以根据需要打开 /manager/ 页面。虽然这并不能解决这里的原始问题状态,但我建议您在这种情况下使用来自 debian backports 的 tomcat8!

Raspbian 提供当前的 Java 8 版本

root@raspberrypi:/etc/apt# java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

安装tomcat 7后,我恢复到debian backports提供的tomcat7版本

root@raspberrypi:/etc/apt# dpkg -l |grep tomcat
ii  libtomcat7-java                       7.0.56-1~bpo70+2                        all          Servlet and JSP engine -- core libraries
ii  tomcat7                               7.0.56-1~bpo70+2                        all          Servlet and JSP engine
ii  tomcat7-admin                         7.0.56-1~bpo70+2                        all          Servlet and JSP engine -- admin web applications
ii  tomcat7-common                        7.0.56-1~bpo70+2                        all          Servlet and JSP engine -- common files

根据tomcat7 not compiling jsp examples 应该可以工作。但是,情况并非如此,因为管理器页面给我留下了以下错误:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: [1] in the generated java file: [/var/lib/tomcat7/work/Catalina/localhost/manager/org/apache/jsp/index_jsp.java]
The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files

Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:477)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:213)
    org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)

有人知道这里的实际问题可能是什么吗?

【问题讨论】:

  • 您运行的是 Java SDK 还是 Java JRE?
  • oracle-java8-jdk 默认安装在 raspbian 中。正如刚刚更新的那样,tomcat8 运行。
  • @col.panic 你是如何在 raspbian 上的 raspberry 上获得 tomcat8 的?你必须自己编译吗?
  • @flindeberg 我添加了一个答案,解释了我是如何让它工作的,虽然不是“最好的”解决方案,恕我直言。请,col.panic,添加一个答案来解释你是如何做到的。

标签: java tomcat7 raspbian


【解决方案1】:

如问题所述,Raspbian 提供的 Tomcat 不适用于 Java 8。我设法按照this blog 上的说明安装了 Tomcat 8。为了避免链接腐烂并纠正一个小错误,我将几乎逐字引用那里的文字(针对 8.0.24 版更新):

在树莓派上安装 Apache Tomcat 8

在我的 Raspberry Pi 上,我已经安装了 Apache 2 HTTP 服务器和 因此本文对 Tomcat 进行了基本的安装和配置。 首先,更新所有已安装的包:

$ sudo apt-get update

确认 Java 已经安装:

pi@raspberrypi /usr/bin $ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

登录pi用户的主目录,下载需要的 Tomcat 发布:

$ wget http://mirrors.axint.net/apache/tomcat/tomcat-8/v8.0.24/bin/apache-tomcat-8.0.24.tar.gz

解压压缩包:

$ tar xvf apache-tomcat-8.0.24.tar.gz

添加以下用户 XML 元素作为 tomcat-users 的父元素 ~/apache-tomcat-8.0.24/conf/tomcat-users.xml(这会创建一个管理员 名为“system”的帐号,密码为“raspberry”):

<user username="system" password="raspberry" roles="manager-gui"/>

更改以下目录的目录权限,因为通过 默认情况下,pi Linux 用户无法写入:

[注意:我不必执行此步骤,因为在 8.0.24 版本中,没有目录apache-tomcat-8.0.24/work/Catalina]

在 /etc/init.d 目录下添加一个名为 tomcat 的启动脚本 有以下内容:

#!/bin/sh
# /etc/init.d/tomcat
# starts the Apache Tomcat service
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop tomcat application server
### END INIT INFO

export CATALINA_HOME="/home/pi/apache-tomcat-8.0.24"
case "$1" in
start)
  if [ -f $CATALINA_HOME/bin/startup.sh ];
  then
    echo $"Starting Tomcat"
    /bin/su pi $CATALINA_HOME/bin/startup.sh
  fi
  ;;
stop)
  if [ -f $CATALINA_HOME/bin/shutdown.sh ];
  then
    echo $"Stopping Tomcat"
    /bin/su pi $CATALINA_HOME/bin/shutdown.sh
  fi
  ;;
*)
  echo $"Usage: $0 {start|stop}"
  exit 1
  ;;
esac

使用 update-rc.d 命令将适当的链接添加到 /etc/rc?.d 目录:

$ sudo update-rc.d tomcat defaults

测试tomcat服务器是否启动:

$ sudo /etc/init.d/tomcat start

在网络客户端上,将浏览器指向http://”Raspberry Pi IP Address”:8080

测试tomcat服务器是否停止:

$ sudo /etc/init.d/tomcat stop

最后,重启系统,Tomcat 应用服务器应该 现在在启动时自动启动,同样在系统关闭时启动 下来。

所有学分都归于 The Friday Night Project。

需要指出的一点:对我来说,作为一个 Linux 铁杆用户,这个解决方案听起来有点老套,在用户的主目录中安装软件,但它确实有效。

【讨论】:

  • +1 就像一个魅力,只少了一小步,我必须使用 $ sudo chmod 755 /etc/init.d/tomcat 为新的 tomcat 脚本授予正确的权限。
【解决方案2】:

在树莓派上安装Apache tomcat新版本的步骤:

1)sudo apt-get 更新

2)sudo apt-get install default-jdk

3)sudo wget http://mirrors.estointernet.in/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.zip

4)sudo apt-get install unzip

5)sudo 解压 apache-tomcat-8.5.47.zip

6)cd apache-tomcat-8.5.47/bin/

7)sudo chmod 700 *.sh

8)sudo ./startup.sh

如果您遇到 404 错误,或者您想在端口 80 上安装 apache tomcat,请访问以下链接了解如何操作。

http://www.bytesofgigabytes.com/raspberrypi/install-apache-tomcat-on-raspberry-pi/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2013-04-19
    • 2014-01-08
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多