原则上是不推荐 war 方式运行（有点过时了）。但总会有需要的时候。


| 兼容中间件      | 说明         | 
| ----------- | -------- | 
| WebLogic       |                 | 
| Jboss             |                 | 
| WildFly           |                 | 
| Tomcat           |                 | 
| Jetty               |                  | 
| TongWeb         | 东方通（国产）     | 
| Smart-Servlet  | 开源项目（国产）   |
| 等...                |                             | 



### 1、操作指南：

普通的 web 项目，增加几项内容即可打 war 包（仍可打 jar 包）：

* 添加 `webapp/WEB-INF/web.xml` 配置（参考模板里的内容）
* 添加 `solon-web-servlet`（for javax）或者 `solon-web-servlet-jakarta`（for jakarta）插件依赖
* 使用 `solon-maven-plugin` 或者 `maven-war-plugin` 打包

具体模板下载：

* 打包成 war，需要放到 war 容器下运行（比如：Tomcat, WebLogic, TongWeb 等...）
  * [solon/learn/helloworld_web_war.zip](/img/solon/learn/helloworld_web_war.zip?t=2)


### 2、具体说明：

#### a) 添加 webapp/WEB-INF/web.xml 配置，把 solonMainClass 的参数值改成 main 函数类

```xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
		 version="4.0">
	<display-name>Solon war app</display-name>

	<context-param>
		<param-name>solonMainClass</param-name>
		<param-value>org.example.demo.DemoApp</param-value>
	</context-param>
	
	<listener>
		<listener-class>org.noear.solon.web.servlet.SolonServletContextListener</listener-class>
	</listener>

	<welcome-file-list>
		<welcome-file>/</welcome-file>
	</welcome-file-list>
</web-app>
```


#### b) 添加 solon-web-servlet 插件依赖

提供 servlet 容器对接支持。注意下面的包注释说明：

```xml
<!-- javax 的用这个包 -->
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>solon-web-servlet</artifactId>
</dependency>

<!-- jakarta 的用这个包 -->
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon-web-servlet-jakarta</artifactId>
</dependency>
```

#### c) 使用 solon-maven-plugin 或者 maven-war-plugin 打包

solon-maven-plugin 同时支持打 jar 和 war（由 packaging 配置指定）

```xml
<parent>
    <groupId>org.noear</groupId>
    <artifactId>solon-parent</artifactId>
    <version>${solon.version}</version>
    <relativePath />
</parent>

<packaging>war</packaging>
...
<plugin>
  <groupId>org.noear</groupId>
  <artifactId>solon-maven-plugin</artifactId>
</plugin>
```

或者 maven-war-plugin，它只支持打 war 包（如果不使用 solon-parent，需要指定插件版本）

```xml
<parent>
    <groupId>org.noear</groupId>
    <artifactId>solon-parent</artifactId>
    <version>${solon.version}</version>
    <relativePath />
</parent>

<packaging>war</packaging>
...
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
</plugin>
```



