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编程是非常简单和灵活的,这里只是一个最简单的案例,实际生产中还要使用很多高级的编程方式和配置

  • 相关阅读:
    PythonのTkinter基本原理
    使用 Word (VBA) 分割长图到多页
    如何使用 Shebang Line (Python 虚拟环境)
    将常用的 VBScript 脚本放到任务栏 (Pin VBScript to Taskbar)
    关于 VBScript 中的 CreateObject
    Windows Scripting Host (WSH) 是什么?
    Component Object Model (COM) 是什么?
    IOS 打开中文 html 文件,显示乱码的问题
    科技发展时间线(Technology Timeline)
    列置换密码
  • 原文地址:https://www.cnblogs.com/freeweb/p/5944619.html
Copyright © 2011-2022 走看看