zoukankan      html  css  js  c++  java
  • 将jetty嵌入到应用中的简单案例

      前面说过jetty最广泛的应用是可以方便的嵌入到应用程序中,而不是作为应用服务器,下面就用最简单的demo来演示一个最简单的应用

      1、下载并导入依赖

      首先应该建立一个普通的java项目,然后把依赖包导进去

      关于依赖包的获取,第一种方式是将前面下载的jetty服务器中lib目录中的jar包导入即可

      另外是在jetty下载页面上,上面是jetty服务器的下载链接,下面可以看到程序包的下载入口:

      

      选择第一个Jetty-9进去,会看到9.x的很多版本,点进去下载最新的:

      

      下载下来之后,将plugins中的java包加入到项目classpath即可

      2、写一个demo

      首先编写一个处理器来处理web发过来的请求,TestController.java,代码如下:

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.eclipse.jetty.server.Request;
    import org.eclipse.jetty.server.handler.AbstractHandler;
    
    public class TestController extends AbstractHandler {
    
        @Override
        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException {
            System.out.println(target);
            response.setContentType("text/html; charset=utf-8");
            request.setCharacterEncoding("utf-8");
            response.setStatus(HttpServletResponse.SC_OK);
            baseRequest.setHandled(true);
            PrintWriter out = response.getWriter();
            if(target.equals("/favicon.ico")) {
                System.out.println("1");
                out.println("404");
            } else {
                System.out.println("2");
                out.print("<h3>hello jetty!</h3>");
                if(request.getParameter("name") != null) {
                    out.print(request.getParameter("name"));
                }
            }
        }
    
    }

      准确来说这里得Controller应该是Handler,必须继承于AbstractHandler,并且重写handle方法来处理请求,可以看到这里可以直接使用Servlet的api,默认情况下jetty请求完毕以后会后台有一个/favicon.ico的请求,虽然不影响前端显示,但是为了防止后端重复处理,所以在这里进行了一次过滤

      Handler写完之后,然后写一个入口的服务来加载Handler并且启动服务,这里是JettyService.java

    import org.eclipse.jetty.server.Server;
    
    public class JettyService {
        public static void main(String[] args) throws Exception {
            Server server = new Server(8989);
            server.setHandler(new TestController());
            server.start();
            server.join();
        }
    }

      这样一个简单的demo就写完了,直接运行main方法启动服务

      

      然后打开浏览器访问:http://127.0.0.1:8989/?name=jetty可以看到下面结果

      

      事实上这里输入/xxx?name=xxx都可以被拦截,因为target是后台得到的,所以可以针对不同的请求执行不同的处理

      后台可以看到如下输出:

      

      可以看到嵌入jetty编程是非常简单和灵活的,这里只是一个最简单的案例,实际生产中还要使用很多高级的编程方式和配置

  • 相关阅读:
    docker学习之network:初识网络配置
    原来:HTTP可以复用TCP连接
    git tag的用法及意义
    Android,社招,面淘宝,指南【内部人员为你保驾护航】
    别了,拼多多!再也不想砍一刀了,哔哩哔哩 (゜-゜)つロ 干杯~
    【Android面试宝典】2021年,腾讯等大厂Android高级开发面试完全攻略!
    腾讯40岁老兵现身说法:35岁职业生涯分水岭,架构or管理,到底怎么选?
    【整理合集】Flutter 常用第三方库、插件、学习资料等
    [PAT]1011 World Cup Betting (20 分)Java
    [PAT] 1010 Radix (25 分)Java
  • 原文地址:https://www.cnblogs.com/freeweb/p/5944619.html
Copyright © 2011-2022 走看看