在 Ubuntu 上部署 Tomcat Web 应用
Posted 程序猿小火龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在 Ubuntu 上部署 Tomcat Web 应用相关的知识,希望对你有一定的参考价值。
在 Ubuntu 上部署 Tomcat Web 应用
目录
前言
本篇是我在实验室部署考勤java后端的时候遇到了一些问题,于是重新下载安装tomcat部署了一遍,总结以下操作以及遇到的bug修复。
步骤
1、安装java
在 Ubuntu 上安装 Java 的命令是:
sudo apt-get update
sudo apt-get install default-jdk
2、下载和安装 Tomcat
下载 Tomcat 安装包:
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.22/bin/apache-tomcat-9.0.22.tar.gz
解压缩安装包:
tar -xzvf apache-tomcat-9.0.22.tar.gz
3、启动 Tomcat
在终端中输入以下命令启动 Tomcat:
cd apache-tomcat-9.0.22/bin
sudo sh startup.sh
4访问应用
Tomcat默认启动端口是8080(可以修改,下面讲)在浏览器中输入 http://localhost:8080
访问 Tomcat 主页。如果一切正常,应该能够看到一个 Apache Tomcat 页面。
5、部署 Web 应用程序
为了部署 Web 应用程序,需要将 WAR 文件复制到 Tomcat 的 webapps 目录中,因为配置文件默认读取的目录是webapps(下面讲如何用其他路径)。在终端中使用以下命令进入 webapps 目录:
cd apache-tomcat-9.0.22/webapps/
将 WAR 文件复制到该目录中:
sudo cp /path/to/your-application.war /path/to/tomcat/webapps/
其中path是你自己项目打包的路径
6、重启 Tomcat
在终端中输入以下命令重启 Tomcat:
cd apache-tomcat-9.0.22/bin
sudo sh shutdown.sh
sudo sh startup.sh
到此就可以在浏览器中输入 http://localhost:8080/your-application
访问你的 Web 应用程序。
配置文件
这是我的服务器安装的Tomcat目录:下面有一个conf文件就是专门放配置文件的
server.xml
修改端口
修改port就行,我这里把默认的改成了8888端口。
Tomcat 默认使用 8080 端口启动 Web 服务器,但这并不意味着无法在 Tomcat 上使用不同的端口。你可以更改 Tomcat 的默认端口来使用其他端口,例如你的后端应用程序的端口号。
要更改 Tomcat 的默认端口,请修改 Tomcat 配置文件中的 server.xml
文件。打开该文件并找到以下行:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
如果将 Tomcat 的端口更改为 8888,则 URL 应更改为:
http://localhost:8888/your-application
确保该 URL 中的端口号与本地后端应用程序的端口号相匹配。这样,就可以通过 Tomcat 访问本地后端应用程序来提供 Web 服务。
开启端口
在 Ubuntu 中,可以使用 ufw
( Uncomplicated Firewall ) 命令管理防火墙来打开端口。以下是打开指定端口的步骤:
在终端中输入以下命令:
sudo ufw status
输出应该显示当前防火墙的状态,例如:
Status: inactive
如果输出显示防火墙已启用,则显示当前打开的端口,例如:
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
打开需要的端口
打开指定的端口,例如 8888,可以使用以下命令:
sudo ufw allow 8888/tcp
如果希望设置允许指定 IP 地址访问该端口,则可以使用以下命令:
sudo ufw allow from [IP地址] to any port 8888
重载防火墙规则配置
sudo ufw reload
修改项目配置路径
server.xml 是 Tomcat 的核心配置文件之一。你可以在其中指定 WAR 文件的路径,告诉 Tomcat 如何加载Web应用程序。以下是在 server.xml 中配置 WAR 文件的步骤:
- 打开 server.xml 文件,该文件通常位于 Tomcat 安装目录下的 conf 目录中。
- 在
<Host>
元素内,找到<Context>
元素,该元素指定 Tomcat 加载 Web 应用程序的上下文路径和 WAR 文件的路径。如果<Context>
元素不存在,则可以添加一个新的<Context>
元素。 - 在
<Context>
元素中,设置docBase
属性为你的 WAR 文件的路径。
以下是一个示例 <Context>
元素配置,其中 docBase
属性指向 WAR 文件的路径:
<Context path="/your-webapp" docBase="/path/to/your-webapp.war" />
在这个示例中,配置的上下文路径是 /your-webapp
,WAR 文件在 /path/to/your-webapp.war
路径下。
- 保存 server.xml 文件,并重新启动 Tomcat 以使更改生效。
当 Tomcat 启动时,它会自动加载你指定的 WAR 文件,并将其部署为 Web 应用程序。请注意,如果更改了 server.xml 文件,请谨慎检查文件是否存在语法错误,并备份原始文件,以便在需要时可以还原配置。
报错
404错误
404表示File Not Found, 文件不存在错误。
正确的端口号
出现404错误证明,TOMCAT是启动成功了的。 但是在一台计算机上,可以启动多个端口号不一样的TOMCAT, 所以请确保自己访问的是正确的那个端口号,别自己启动的是8080端口号的TOMCAT,但是访问的地址却用的是80端口(默认),这样肯定会出现404错误的。
环境变量
假设有两个Tomcat A和 B,自己分明运行的是B 下的startup.bat, 但是启动的却是A,为什么会这样呢? 这就是环境变量在作祟了。
在环境变量中有两个属性:分别是CATALINA_HOME和CATALNIA_BASE,如果这个值指向的是A,那么即便运行的是B下的startup.bat, 真正启动的还会是A。
确定Web应用是否成功启动
虽然Tomcat启动成功了,但是对应的Web应用启动失败,依然会导致404错误。
怎么判断Web应用成功与失败呢? 倘若Web引用启动失败,那么就一定会在Tomcat的logs目录下的 localhost.当前日期.log 里留下错误信息。
打开这个文件,检查对应的Web应用是否启动过程中报错了。 也许是web.xml多写了一个标签结束,也许是对应的servlet类找不到。
webapps下的ROOT目录
有的时候,在server.xml 中配置的<context 是以“/"为开始路径的,与此同时,在webapps目录下还存在一个ROOT目录,这个ROOT目录其实也是告诉tomcat,以“/” 为开始路径,那么这样就发生冲突了,Tomcat只能二选一,通常情况下都会选择ROOT目录,那么在server.xml中配置的<context 就无法启动了,导致访问对应的资源提示404错误。
解决办法就是:删除掉ROOT目录,或者把ROOT目录重命名
不能访问WEB-INF目录下的资源
安全角度出发,TOMCAT不允许访问WEB-INF目录下的html,JSP文件。 所以如果你的资源文件放在WEB-INF下,也会提示404错误
访问地址后面多加了一个斜杠
如图,本来应该访问
http://127.0.0.1:8080/hello
但是却访问了地址:
http://127.0.0.1:8080/hello/
如何在 Tomcat 6 上手动部署 Web 服务?
【中文标题】如何在 Tomcat 6 上手动部署 Web 服务?【英文标题】:How to manually deploy a web service on Tomcat 6? 【发布时间】:2011-01-31 11:28:18 【问题描述】:我正在学习如何使用 Java 开发 SOAP Web 服务。
到目前为止,我一直在关注这个优秀的教程
http://web.archive.org/web/20120626005333/http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/
一切顺利,我的 Web 服务在命令行中使用它的嵌入式服务器运行,然后在 NetBeans 的帮助下我将它部署在 Tomcat 上。
我想知道在 Tomcat 上手动部署它的步骤,以便了解它是如何完成的,因为我不喜欢依赖 IDE。
我的意思是,我想知道如何通过命令行和文本编辑器完成所有操作。
我还找到了解释如何手动将 servlet 部署到 Tomcat 的链接,
http://linux-sxs.org/internet_serving/c292.html
但我找不到任何说明如何部署 Web 服务的文章。
非常感谢。
【问题讨论】:
由于某种原因,可能是愚蠢的oracle在切换域后没有维护所有资源,发布的链接不再起作用。您可以点击以下链接。可能不如上述有用,但肯定非常好。 java-forums.org/blogs/web-service/… @Bagira 是的,有大量 Sun 的网页没有正确迁移。但是对于这种情况,可以使用Wayback Machine。我更新了 OP 的链接以指向来自 Wayback Machine 的存档页面。 【参考方案1】:如何手动构建 jax-ws Web 服务并将其部署到 tomcat
我试图弄清楚如何手动构建和部署一个用于学习 pourposes 的网络服务。
我从这篇优秀的文章开始
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/ (新网址:http://www.oracle.com/technetwork/articles/javase/jax-ws-2-141894.html)
这个想法是只使用记事本和命令行来完成整个事情。
我能实现的唯一方法是使用 netbeans 部署一个 Web 服务,然后在 \dist\.war 中查看 war 生成的文件(它只是一个 zip 文件,你可以用 7zip 打开它)
如果有人感兴趣并出于文档目的,我会留下这个......
如果有人知道更简单的方法,请告诉我!!!
测试于:
C:\tomcat6\bin>version
Server version: Apache Tomcat/6.0.26
Server built: March 9 2010 1805
Server number: 6.0.26.0
OS Name: Windows XP
OS Version: 5.1
Architecture: x86
JVM Version: 1.6.0_18-b07
JVM Vendor: Sun Microsystems Inc.
感谢
sas
1。创建以下目录c:\java\src\ws
2。创建以下文件c:\java\src\ws\Adder.java
// c:\java\src\ws\Adder.java
package ws;
import javax.jws.WebService;
@WebService
public class Adder
public double add( double value1, double value2 )
return value1 + value2;
3。站在c:\java\src\ execute
c:\java\src> javac ws\Adder.java
文件c:\java\src\ws\Adder.class will be generated
4。使用以下文件创建以下目录结构
c:\tomcat6\webapps\adder_ws
META-INF
context.xml
WEB-INF
classes
ws
Adder.class
lib
activation.jar
webservices-api.jar
webservices-extra.jar
webservices-extra-api.jar
webservices-rt.jar
webservices-tools.jar
sun-jaxws.xml
web.xml
5。复制编译好的文件
复制c:\java\src\ws\Adder.class
c:\tomcat6\webapps\adder_ws\WEB-INF\classes\ws\Adder.class
6。 c:\tomcat6\webapps\adder_ws\META-INF\context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/adder_ws"/>
7。 c:\tomcat6\webapps\adder_ws\WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>Adder</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Adder</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
<!-- not needed
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
-->
</web-app>
8。配置WEB-INF\sun-jaxws.xml
文件:c:\tomcat6\webapps\adder_ws\WEB-INF\sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8"?>
<endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
<endpoint implementation="ws.Adder" name="Adder" url-pattern="/add"/>
</endpoints>
9。复制库
c:\tomcat6\webapps\adder_ws\WEB-INF\lib 中的文件
从
复制netbeans文件[netbeans dir]\enterprise\modules\ext\metro\*.*
和
[netbeans dir]\ide\modules\ext\jaxb\activation.jar
10.重启阿帕奇
关机:c:\tomcat6\bin\shutdown.bat
启动:c:\tomcat6\bin\startup.bat
11.测试
打开网络浏览器并转到http://localhost:8080/adder_ws/add?wsdl
你也可以使用soapui(http://www.soapui.org/)之类的工具来测试web服务
就是这样,我想现在我将看看 eclipses 是如何做到的......
【讨论】:
在一个大多数人只想知道如何通过魔法点击找到解决方案的世界里,很高兴找到其他想首先知道如何使用 vi 和命令行!你接受捐款吗? (开玩笑。) 一点信息。你的解决方案对我有用,但因为我不使用 Netbeans,所以我没有你列出的罐子,不得不使用我从 Metro 网站获得的一组不同的罐子。罐子列表和获取它们的位置在以下问题/答案中。请务必阅读我的评论,因为回答者留下了一个罐子,而且我还提供了下载罐子的链接。 ***.com/questions/6585948/… 不错的指南,但实际上我遇到了一些问题。我创建了一个 EE 7 /ear 项目,我想要的服务器是 WildFly 8.2,我收到下一个错误:17:34:00,652 INFO [javax.enterprise.resource.webservices.jaxws.server.http](MSC 服务线程 1 -8)WSSERVLET12:JAX-WS 上下文侦听器正在初始化 17:34:00,722 严重 [javax.enterprise.resource.webservices.jaxws.server.http](MSC 服务线程 1-8)WSSERVLET11:无法解析运行时描述符:运行时 【参考方案2】:这是另一篇有用的文章
这有点回答我自己的问题
http://java.dzone.com/articles/jax-ws-deployment-five-minute
【讨论】:
【参考方案3】:以下文章提供了手动构建和部署 JAX-WS Web 服务的分步指南。它使用 Ant 作为构建工具。
Building JAX-WS Web service
【讨论】:
【参考方案4】:我希望 web 服务和 servlet 的可部署性相同。即,.war
文件。所以你应该能够以同样的方式部署它。
【讨论】:
好吧,我只需要找出如何将整个内容放入战争文件中...【参考方案5】:我看到没有人在 Mkyong.com 上提到过JAX-WS Tutorials。
在“JAX-WS 教程”页面上的“Tomcat 中的 JAX-WS 安全性”部分,有一个简短的、带有图片的教程,正是 OP 想要的:Deploy JAX-WS web services on Tomcat
【讨论】:
以上是关于在 Ubuntu 上部署 Tomcat Web 应用的主要内容,如果未能解决你的问题,请参考以下文章