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()
}
}