Mercurial Hosting > luan
annotate http/src/luan/modules/http/LuanHandler.java @ 743:2c41f2aec92f
improve Rpc and implement rpc call for local webserver
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 13 Jul 2016 17:27:35 -0600 |
parents | ca169567ce07 |
children | 3f461f85243d |
rev | line source |
---|---|
494
2b9bc97f0439
change luan:web to luan:http
Franklin Schmidt <fschmidt@gmail.com>
parents:
493
diff
changeset
|
1 package luan.modules.http; |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
3 import java.io.IOException; |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
4 import javax.servlet.ServletException; |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
5 import javax.servlet.http.HttpServlet; |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
6 import javax.servlet.http.HttpServletRequest; |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
7 import javax.servlet.http.HttpServletResponse; |
280
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
8 import org.slf4j.Logger; |
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
9 import org.slf4j.LoggerFactory; |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
10 import org.eclipse.jetty.server.Request; |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
11 import org.eclipse.jetty.server.handler.AbstractHandler; |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
12 import luan.LuanState; |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
13 import luan.LuanTable; |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
14 import luan.LuanFunction; |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
15 import luan.LuanException; |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
16 import luan.modules.PackageLuan; |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
17 |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
18 |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
19 public class LuanHandler extends AbstractHandler { |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 private final LuanState luan; |
627
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
21 private final Logger logger; |
183
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
22 private String welcomeFile = "index.html"; |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
23 |
627
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
24 public LuanHandler(LuanState luan,String loggerRoot) { |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
25 this.luan = luan; |
627
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
26 if( loggerRoot==null ) |
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
27 loggerRoot = ""; |
a98812908fbc
add loggerRoot param to LuanHandler
Franklin Schmidt <fschmidt@gmail.com>
parents:
531
diff
changeset
|
28 logger = LoggerFactory.getLogger(loggerRoot+LuanHandler.class.getName()); |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
29 } |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
30 |
517
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
31 @Override public void handle(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response) |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
32 throws IOException |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
33 { |
183
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
34 if( target.endsWith("/") ) |
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
35 target += welcomeFile; |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
36 try { |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
627
diff
changeset
|
37 if( !HttpServicer.service(luan,request,response,"site:"+target+".luan") ) |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
38 return; |
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 } catch(LuanException e) { |
531
f99c79b0b426
change LuanException.getFullMessage() to not require LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents:
521
diff
changeset
|
40 String err = e.getFullMessage(); |
280
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
41 logger.error(err); |
2164b4479661
log web exceptions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
42 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,err); |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
43 } |
176
88ad4fc4c643
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
175
diff
changeset
|
44 baseRequest.setHandled(true); |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
45 } |
183
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
46 |
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
47 public void setWelcomeFile(String welcomeFile) { |
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
48 this.welcomeFile = welcomeFile; |
ed19d14360fa
add LuanHandler.setWelcomeFile()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
177
diff
changeset
|
49 } |
517
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
50 |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
51 @Override protected void doStop() throws Exception { |
521
8a217fe5b4f3
cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents:
517
diff
changeset
|
52 synchronized(luan) { |
8a217fe5b4f3
cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents:
517
diff
changeset
|
53 luan.close(); |
8a217fe5b4f3
cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents:
517
diff
changeset
|
54 } |
517
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
55 //System.out.println("qqqqqqqqqqqqqqqqqqqq doStop "+this); |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
56 super.doStop(); |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
57 } |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
58 /* |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
59 @Override public void destroy() { |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
60 System.out.println("qqqqqqqqqqqqqqqqqqqq destroy "+this); |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
61 super.destroy(); |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
62 } |
8dcf9e12446b
add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents:
494
diff
changeset
|
63 */ |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
64 |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
65 public Object call_rpc(String fnName,Object... args) throws LuanException { |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
66 return callRpc(luan,fnName,args); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
67 } |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
68 |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
69 public static Object callRpc(LuanState luan,String fnName,Object... args) throws LuanException { |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
70 synchronized(luan) { |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
71 LuanTable rpc = (LuanTable)PackageLuan.require(luan,"luan:Rpc.luan"); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
72 LuanTable fns = (LuanTable)rpc.get(luan,"functions"); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
73 LuanFunction fn = (LuanFunction)fns.get(luan,fnName); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
74 if( fn == null ) |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
75 throw new LuanException( "function not found: " + fnName ); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
76 return fn.call(luan,args); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
77 } |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
78 } |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
79 |
175
bdbd4740121f
finish web server
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
80 } |