annotate web/src/luan/modules/web/LuanServlet.java @ 467:f86bf532f87c

improve LuanServlet to allow for URL mapping
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 08 May 2015 12:10:53 -0600
parents 8f1be9704726
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
399
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.modules.web;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.io.IOException;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import javax.servlet.ServletException;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 import javax.servlet.http.HttpServlet;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 import javax.servlet.http.HttpServletRequest;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 import javax.servlet.http.HttpServletResponse;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 import luan.LuanState;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 import luan.LuanException;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 public class LuanServlet extends HttpServlet {
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 protected final String uriPrefix;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 protected final LuanState luan;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 public LuanServlet(String uriPrefix,LuanState luan) {
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 this.uriPrefix = uriPrefix;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 this.luan = luan;
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 }
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 public LuanServlet(String uriPrefix) {
400
8f1be9704726 change LuanState.newStandard() to newInstance() which doesn't preload anything
Franklin Schmidt <fschmidt@gmail.com>
parents: 399
diff changeset
22 this(uriPrefix,LuanState.newInstance());
399
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 }
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
467
f86bf532f87c improve LuanServlet to allow for URL mapping
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
25 @Override protected void service(HttpServletRequest request,HttpServletResponse response)
399
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 throws IOException
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 {
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 String path = request.getRequestURI();
467
f86bf532f87c improve LuanServlet to allow for URL mapping
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
29 service(request,response,path);
f86bf532f87c improve LuanServlet to allow for URL mapping
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
30 }
f86bf532f87c improve LuanServlet to allow for URL mapping
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
31
f86bf532f87c improve LuanServlet to allow for URL mapping
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
32 public void service(HttpServletRequest request,HttpServletResponse response,String path)
f86bf532f87c improve LuanServlet to allow for URL mapping
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
33 throws IOException
f86bf532f87c improve LuanServlet to allow for URL mapping
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
34 {
399
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 if( !path.endsWith(".luan") )
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 throw new RuntimeException("'"+path+"' doesn't end with '.luan'");
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 String uri = uriPrefix + path.substring(0,path.length()-5);
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 try {
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 if( !HttpServicer.service(luan,request,response,uri) )
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 response.sendError(HttpServletResponse.SC_NOT_FOUND);
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 } catch(LuanException e) {
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 throw new RuntimeException(e);
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 }
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 }
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45
199eb7f1b828 add LuanServlet
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 }