示例项目

JavaWeb 后台(JAVA程序)部署

路由配置

必须实现 spark.servlet.SparkApplication,并且所有路由在

init()方法中定义,否者部署时会报不是 Servlet 异常,具体路由

定义可以参考 sparkjava

public class Application implements SparkApplication {
    @Override
    public void init() {
        get("/hello", (req, res) -> "Hello World");
        get("/hello/:name", (request, response) -> {
            return "Hello: " + request.params(":name");
        });
    }

WEB配置文件

在项目目录下创建 WEB-INF/web.xml,也可以在其他位置指定此文件(注意此文件的路径,后续需要用到),文件

内容如下:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
		<filter>
	    <filter-name>SparkFilter</filter-name>
	    <filter-class>spark.servlet.SparkFilter</filter-class>
	    <init-param>
	        <param-name>applicationClass</param-name>
	        <!-- 此处是路由配置的完整路径名称,此程序配置如下 -->
	        <param-value>teclan.web.Application</param-value>
	    </init-param>
	</filter>
	<filter-mapping>
	    <filter-name>SparkFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

项目配置

以Maven项目为例,pom.xml配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>teclan.web</groupId>
	<artifactId>teclan-web</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- 这里指定打包成 war 包 -->
	<packaging>war</packaging>
	<name>teclan-web</name>
	<url>http://maven.apache.org</url>
	<dependencies>
	   <!-- 这里添加项目的依赖 -->
		<dependency>
			<groupId>com.sparkjava</groupId>
			<artifactId>spark-core</artifactId>
			<version>2.5</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.1.3</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.1.1</version>
				<configuration>
				   <!-- 这里指定WEB配置文件,就是上一步的配置文件路径 -->
					<webXml>WEB-INF\web.xml</webXml>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

打包

执行以下命令打包,如果没有错误,在target下就会生成我们的 war 包,为后续使用方便,

将war包改成一个简短的名字,例如 teclan.war。

mvn package -Dmaven.test.skip

tomcat 部署

将 teclan.war 包复制到 tomcat 的 webapps 目录下,将原来的其他的东西全部删除, 如果在 linxu 下,在 tomcat 目录下执行

chmod +x bin/*sh

授予 bin 目录下的脚本执行权限,然后执行

./bin/startup.sh

即可启动 tomcat ,对于本示例,访问 http://localhost:8080/teclan/hello 即可映射到项目定义的 /hello 路由,返回 “Hello World”, 可以执行

tail -f logs/catalina.out

查看 tomcat实时日志 访问的路由结构为: host:port/war-name/you-route 如果需要更改端口,更改 conf/server.xml中以下片段的端口部分即可```

更改端口后可能需要 root 权限方可启动

### jetty 部署

将 teclan.war 包复制到 jetty 的 webapps 目录下,将原来的其他的东西全部删除,
如果在 linxu 下,在 jetty 目录下执行

java -jar start.jar

即可启动 jetty ,对于本示例,访问
http://localhost:8080/teclan/hello
即可映射到项目定义的 /hello 路由,返回 "Hello World"
如果需要更改端口,在 jetty/start.init 中添加

jetty.http.port=更改后的端口 ``` 访问的路由结构为: host:port/war-name/you-route

更改端口后可能需要 root 权限方可启动