您的位置:首页 > 编程语言 > Java开发

【JAVA】内嵌JettyServer结合springMVC、mybatis实现轻量化系统部署

2016-07-22 17:01 435 查看
有些项目中,可能WEB功能并不是这个系统的核心功能,但是为了部署这个web服务,往往我们都是将工程打成WAR包,丢给WEB容器去启动,这样就有点偏离主题了,不太友好,机器上还得装上个WEB容器,配置一下,WAR包丢到指定目录,启动容器。。。。

面对这种系统,我们完全可以将WEB容器内嵌到我们系统中,使得我们的工程仍然是打包成jar包,一条java -jar命令就可以快速的将服务启动起来

1、工程目录结构



2、pom文件

<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>web</groupId>
<artifactId>web</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>web</name>

<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project></project>
</properties>

<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all-server</artifactId>
<version>8.1.19.v20160209</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.3</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>oro</groupId>
<artifactId>oro</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.jmock</groupId>
<artifactId>jmock</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>

<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.4</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>

</dependencies>

<build>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.vm</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib</classpathPrefix>
<mainClass>jetty.server.JettySpringMVCStart</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/${groupId}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<finalName>${groupId}/web-demo</finalName>
</build>
</project>



pom文件负责打包jar,并且将依赖复制到lib文件夹下



3、JettyServer的核心代码

package jetty.server;

import org.apache.log4j.xml.DOMConfigurator;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.webapp.WebAppContext;

/**
* ClassName:JettySpringMVCStart <br/>
* Function: TODO ADD FUNCTION. <br/>
* Reason: TODO ADD REASON. <br/>
* Date: 2016年7月21日 下午4:46:33 <br/>
*
* @author chiwei
* @version
* @since JDK 1.6
* @see
*/
public class JettySpringMVCStart {

public static final int PORT = 2656;

// web访问的根路径http://ip:port/,相当于项目名,/即忽略项目名
public static final String CONTEXT = "/";

private static final String DEFAULT_WEBAPP_PATH = "src/main/webapp";

public static Server createServerIn(int port) {
// 创建Server
Server server = new Server();
// 添加ThreadPool
QueuedThreadPool queuedThreadPool = new QueuedThreadPool();
queuedThreadPool.setName("queuedTreadPool");
queuedThreadPool.setMinThreads(10);
queuedThreadPool.setMaxThreads(200);
server.setThreadPool(queuedThreadPool);
// 添加Connector
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(port);
connector.setAcceptors(4);// 同时监听read事件的线程数
connector.setMaxBuffers(2048);
connector.setMaxIdleTime(10000);
server.addConnector(connector);

WebAppContext webContext = new WebAppContext(DEFAULT_WEBAPP_PATH, CONTEXT);
webContext.setDescriptor("src/main/webapp/WEB-INF/web.xml");
webContext.setResourceBase(DEFAULT_WEBAPP_PATH);
webContext.setClassLoader(Thread.currentThread().getContextClassLoader());
server.setHandler(webContext);

return server;
}

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
DOMConfigurator.configure(Thread.currentThread().getContextClassLoader()
.getResource("log4j.xml"));
Server server = createServerIn(PORT);
server.stop();
server.start();
server.join();
}
}
web.xml里有contextloadlistener,config等等,将其和spring连接起来
其它代码和平时做web项目的一模一样

4、系统启动



-D系统属性在log4j.xml里会读取

5、系统访问





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息