Jetty Hello World 入门

scala 代码 ,包含路由,handler,servlet,代理。


import java.io.IOException
import javax.servlet.ServletException
import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse}
import org.eclipse.jetty.http.HttpURI
import org.eclipse.jetty.server.handler.{AbstractHandler, ContextHandler, HandlerList, ResourceHandler}
import org.eclipse.jetty.server.{Request, Server}
import org.eclipse.jetty.servlet.{ServletContextHandler, ServletHolder}
import org.eclipse.jetty.servlets.ProxyServlet

/**
  * https://wiki.eclipse.org/Jetty/Tutorial
  */
object TestJetty {

  class HelloHandler(name: String = "") extends AbstractHandler {
    @throws[IOException]
    @throws[ServletException]
    def handle(target: String, baseRequest: Request, request: HttpServletRequest, response: HttpServletResponse): Unit = {
      response.setContentType("text/html;charset=utf-8")
      response.setStatus(HttpServletResponse.SC_OK)
      println(baseRequest.getContext)
      println("===========")
      println(baseRequest.getServletContext)
      baseRequest.setHandled(true)
      response.getWriter.println(s"<h1>Hello $name</h1>")
    }
  }

  class HelloServlet() extends HttpServlet {
    private var greeting = "Hello World"

    def this(greeting: String) {
      this()
      this.greeting = greeting
    }

    @throws[ServletException]
    @throws[IOException]
    override protected def doGet(request: HttpServletRequest, response: HttpServletResponse): Unit = {
      response.setContentType("text/html")
      response.setStatus(HttpServletResponse.SC_OK)
      response.getWriter.println("<h1>" + greeting + "</h1>")
      response.getWriter.println("session=" + request.getSession(true).getId)
    }
  }

  class HelloProxy() extends ProxyServlet {
    override def proxyHttpURI(scheme: String, serverName: String, serverPort: Int, uri: String): HttpURI = {
      println("#########" + scheme + "://" + serverName + ":" + serverPort + uri)

      if (!validateDestination(serverName, uri))
        return null

      return new HttpURI(scheme + "://" + "localhost" + ":" + "8080" + uri)

    }
  }

  def T1_hello(): Unit = {
    val server = new Server(8080)
    server.setHandler(new HelloHandler())
    server.start
    server.join
  }

  // 路由设置
  def T2_hello(): Unit = {
    val server = new Server(8080)
    // Add a single handler on context "/Tom"
    val context = new ContextHandler
    context.setContextPath("/Tom")
    context.setHandler(new HelloHandler("Tom"))
    // Can be accessed using http://localhost:8080/Tom
    server.setHandler(context)
    // Start the server
    server.start
    server.join
  }

  // 多个handle
  def T3_multi_handle(): Unit = {
    val server = new Server(8080)
    val handlers = new HandlerList()
    // Add a single handler on context "/Tom"
    val hello_ch = new ContextHandler
    hello_ch.setContextPath("/Tom")
    hello_ch.setHandler(new HelloHandler("Tom"))
    // Can be accessed using http://localhost:8080/Tom
    handlers.addHandler(hello_ch)

    // 获取目录
    val resource_ch = new ContextHandler
    val resource_handler = new ResourceHandler();
    resource_handler.setDirectoriesListed(true);
    resource_handler.setResourceBase(".")
    resource_ch.setHandler(resource_handler)
    resource_ch.setContextPath("/static")
    handlers.addHandler(resource_ch)
    server.setHandler(handlers)
    // Start the server
    server.start
    server.join
  }

  def T4_hello_servlet(): Unit = {
    println(">>>>>>>>>>>>>>>T4_hello_servlet>>>>>>>>>>>>>>>>>>>>")
    val server = new Server(8080)
    val context = new ServletContextHandler(ServletContextHandler.SESSIONS)
    context.setContextPath("/")
    server.setHandler(context)
    context.addServlet(new ServletHolder(new HelloServlet), "/*")
    context.addServlet(new ServletHolder(new HelloServlet("Buongiorno Mondo")), "/it/*")
    context.addServlet(new ServletHolder(new HelloServlet("Bonjour le Monde")), "/fr/*")
    server.start
    server.join
  }

  def T5_proxy_servlet(): Unit = {
    println(">>>>>>>>>>>>>>>T5_proxy_servlet>>>>>>>>>>>>>>>>>>>>")
    val server = new Server(8081)
    val context = new ServletContextHandler(ServletContextHandler.SESSIONS)
    context.setContextPath("/")
    server.setHandler(context)
    context.addServlet(new ServletHolder(new HelloProxy), "/*")
    //context.addServlet(new ServletHolder())
    server.start
    server.join
  }

  def main(args: Array[String]): Unit = {
    //T1_hello
    //T2_hello
    //T3_multi_handle
    //T4_hello_servlet
    val t1 = new Thread() {
      override def run(): Unit = T3_multi_handle
    }
    val t2 = new Thread() {
      override def run(): Unit = T5_proxy_servlet
    }
    t1.start()
    t2.start()
  }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值