2b149c910bb36ae340a4c2a977ea1da56845bba1
[jsvc.git] / src / dolda / jsvc / j2ee / Servlet.java
1 package dolda.jsvc.j2ee;
2
3 import dolda.jsvc.*;
4 import java.lang.reflect.*;
5 import java.util.*;
6 import java.io.*;
7 import javax.servlet.http.*;
8 import javax.servlet.*;
9
10 public class Servlet extends HttpServlet {
11     private ThreadContext tg;
12
13     public void init(ServletConfig cfg) throws ServletException {
14         Properties sprop = new Properties();
15         try {
16             InputStream pi = Servlet.class.getClassLoader().getResourceAsStream("jsvc.properties");
17             try {
18                 sprop.load(pi);
19             } finally {
20                 pi.close();
21             }
22         } catch(IOException e) {
23             throw(new Error(e));
24         }
25         String clnm = (String)sprop.get("jsvc.bootstrap");
26         if(clnm == null)
27             throw(new ServletException("No JSvc bootstrapper specified"));
28         Class<?> bc;
29         try {
30             bc = Class.forName(clnm);
31         } catch(ClassNotFoundException e) {
32             throw(new ServletException("Invalid JSvc bootstrapper specified", e));
33         }
34         tg = new ThreadContext(null, "JSvc service", J2eeContext.create(cfg), bc);
35     }
36     
37     public void destroy() {
38         tg.shutdown();
39     }
40     
41     public void service(HttpServletRequest req, HttpServletResponse resp) {
42         try {
43             req.setCharacterEncoding("UTF-8");
44             resp.setCharacterEncoding("UTF-8");
45         } catch(UnsupportedEncodingException e) {
46             throw(new Error(e));
47         }
48         Request rr = new J2eeRequest(getServletConfig(), req, resp);
49         RequestThread w = tg.respond(rr);
50         w.start();
51         try {
52             w.join();
53         } catch(InterruptedException e) {
54             w.interrupt();
55             return;
56         }
57     }
58 }