在Raspberry Pi上使用Java 8的Tomcat 7

col*_*nic 9 java tomcat7 raspbian

更新 tomcat8似乎在这种情况下工作,因为我可以根据需要打开/ manager/page.虽然这并没有解决原来的问题状态,但我建议你在这种情况下使用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)
Run Code Online (Sandbox Code Playgroud)

安装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
Run Code Online (Sandbox Code Playgroud)

根据tomcat7没有编译jsp的例子应该可行.但是,这不是这种情况,因为管理器页面给我留下了以下错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*pel 21

如问题中所述,Raspbian提供的Tomcat不能与Java 8一起使用.我设法按照此博客上的说明安装Tomcat 8 .为了避免linkrot并纠正一个小错误,我将几乎字面引用文本(更新版本8.0.24):

在Raspberry Pi上安装Apache Tomcat 8

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

$ sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

确认已安装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)
Run Code Online (Sandbox Code Playgroud)

登录pi用户的主目录并下载所需的Tomcat版本:

$ wget http://mirrors.axint.net/apache/tomcat/tomcat-8/v8.0.24/bin/apache-tomcat-8.0.24.tar.gz
Run Code Online (Sandbox Code Playgroud)

解压缩压缩的tarball:

$ tar xvf apache-tomcat-8.0.24.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

<user username="system" password="raspberry" roles="manager-gui"/>
Run Code Online (Sandbox Code Playgroud)

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

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

将名为tomcat的启动脚本添加到/etc/init.d目录,该目录包含以下内容:

#!/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
Run Code Online (Sandbox Code Playgroud)

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

$ sudo update-rc.d tomcat defaults
Run Code Online (Sandbox Code Playgroud)

测试tomcat服务器启动:

$ sudo /etc/init.d/tomcat start
Run Code Online (Sandbox Code Playgroud)

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

Tomcat截图

测试tomcat服务器是否停止:

$ sudo /etc/init.d/tomcat stop
Run Code Online (Sandbox Code Playgroud)

最后,重新启动系统,Tomcat应用程序服务器现在应该在启动时自动启动,同样在系统关闭时启动.

所有学分都归入星期五晚上项目.

有一点需要指出:对我来说,作为一个核心Linux用户,这个解决方案听起来有点hacky,在用户的主目录中安装软件,但它的工作原理.

  • +1就像魅力一样,只缺少一小步,我不得不使用$ sudo chmod 755 /etc/init.d/tomcat给新的tomcat脚本提供正确的权限. (3认同)