view 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
line wrap: on
line source

package luan.modules.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import luan.LuanState;
import luan.LuanException;


public class LuanServlet extends HttpServlet {
	protected final String uriPrefix;
	protected final LuanState luan;

	public LuanServlet(String uriPrefix,LuanState luan) {
		this.uriPrefix = uriPrefix;
		this.luan = luan;
	}

	public LuanServlet(String uriPrefix) {
		this(uriPrefix,LuanState.newInstance());
	}

	@Override protected void service(HttpServletRequest request,HttpServletResponse response)
		throws IOException
	{
		String path = request.getRequestURI();
		service(request,response,path);
	}

	public void service(HttpServletRequest request,HttpServletResponse response,String path)
		throws IOException
	{
		if( !path.endsWith(".luan") )
			throw new RuntimeException("'"+path+"' doesn't end with '.luan'");
		String uri = uriPrefix + path.substring(0,path.length()-5);
		try {
			if( !HttpServicer.service(luan,request,response,uri) )
				response.sendError(HttpServletResponse.SC_NOT_FOUND);
		} catch(LuanException e) {
			throw new RuntimeException(e);
		}
	}

}