使用Jetty作为嵌入式服务器

发表时间:2017-07-18 21:25:45 浏览量( 21 ) 留言数( 0 )

学习目标:

1、为什么使用jetty

2、jetty作为嵌入式开发


学习过程:

    这个作为扩展的内容。Jetty有一个口号:不要把你的应用部署到Jetty中,把Jetty部署到你的应用中。Jetty可以在Java应用程序中向其他POJO一样被实例化,换句话说,以嵌入式的模式运行Jetty是指将Http模块放入你的应用程序中,而非部署你的程序到一个HTTP服务器。因为Jetty非常的轻巧,所以很多使用可以嵌入到你的应用程序中一起发布,也可以说是目前非常流行的微服务的思想的一种实践吧。使用这种方式开发的应用程序可以打包成为一个jar包进行直接发送,然后使用jar命令就可以直接启动了,非常简单。

    这节课我们也是大概了解一下jetty作为嵌入式开发的一下简单的例子,而且jetty对jsp的支持不是很好,以后我们可以使用spring boot框架来帮做我们进行开发,spring boot默认就是吧服务嵌入到程序中的。


jetty嵌入开发的官方文档: Embedding

http://www.eclipse.org/jetty/documentation/current/jetty-dev-guide.html

一、新建一个普通的jar项目,导入jetty的包

		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-server</artifactId>
			<version>9.4.6.v20170531</version>
		</dependency>

		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-webapp</artifactId>
			<version>9.4.6.v20170531</version>
		</dependency>



二、文件服务器的代码示例

1、建立启动类

/**
 * 文件服务器示例
 * @author liubao
 *
 */
public class FileApp {
	public static void main( String[] args ) throws Exception{

        Server server=new Server(8080);

        //设置文件路径
        ResourceHandler resourceHandler=new ResourceHandler();
        resourceHandler.setResourceBase("D:/test");
        resourceHandler.setDirectoriesListed(true);
        
        resourceHandler.setDirectoriesListed(true);
        //设置欢迎页面
        resourceHandler.setWelcomeFiles(new String[]{ "index.html" });
 
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { resourceHandler, new DefaultHandler() });
        server.setHandler(handlers);
        
        server.setHandler(handlers);

        //启动
		server.start();
		server.join();

    }
}

2、直接运行,然后就可以通过浏览器访问了。你可以在D盘的test目录下面,新建一个index.html的页面


三、基于Servlet的代码示例

1、新建一个servlet类

public class HelloServlet extends HttpServlet {
	private String name = "Hello World";

	public HelloServlet() {
	}

	public HelloServlet(String name) {
		this.name = name;
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html");
		response.setStatus(HttpServletResponse.SC_OK);
		response.getWriter().println("<h1>" + name + "</h1>");
		response.getWriter().println("session=" + request.getSession(true).getId());
	}
}

2、建立启动类,启动后也是可以直接使用浏览器访问

public class ServletApp {
	public static void main(String[] args) throws Exception {
		Server server = new Server(8080);

		ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
		context.setContextPath("/");
		server.setHandler(context);

		context.addServlet(new ServletHolder(new HelloServlet()), "/*");
		context.addServlet(new ServletHolder(new HelloServlet("Java day up")), "/java/*");
		context.addServlet(new ServletHolder(new HelloServlet("liubao")), "/liu/*");

		server.start();
		server.join();
	}
}

四、基于Context的代码示例

1、在项目中建立相关的目录结构

attcontent/cbc00241-cff3-408b-b856-e47c90821a29.png

2、建立启动类,启动后也是可以直接使用浏览器访问,注意如果新建的是jsp文件会不支持的。

public class WebAppContextApp {
	public static void main(String[] args) throws Exception {

		int port = 8080;
		Server server = new Server(port);
		
		WebAppContext webAppContext = new WebAppContext("webapp", "/web");

		webAppContext.setDescriptor("webapp/WEB-INF/web.xml");
		//默认对jsp并不支持的
		webAppContext.setResourceBase("src/main/webapp");
		webAppContext.setDisplayName("web");
		webAppContext.setClassLoader(Thread.currentThread().getContextClassLoader());
		webAppContext.setConfigurationDiscovered(true);
		webAppContext.setParentLoaderPriority(true);

		server.setHandler(webAppContext);
		
		//设置war。
		//WebAppContext webapp = new WebAppContext();
       // webapp.setContextPath("/");
       // webapp.setWar(jetty_home+"/webapps/test.war");
        //server.setHandler(webapp);


		server.start();
		server.join();

		System.out.println("server is  start, port is " + port + "............");
	}

启动就可以访问了。