A couple of bugfixes.
[jsvc.git] / src / dolda / jsvc / j2ee / Servlet.java
... / ...
CommitLineData
1package dolda.jsvc.j2ee;
2
3import dolda.jsvc.*;
4import java.lang.reflect.*;
5import java.util.*;
6import java.io.*;
7import javax.servlet.http.*;
8import javax.servlet.*;
9
10public 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 ServerContext ctx = J2eeContext.create(cfg);
35 String tgn;
36 if(ctx.name() != null)
37 tgn = "JSvc service for " + ctx.name();
38 else
39 tgn = "JSvc service";
40 tg = new ThreadContext(null, tgn, ctx, bc);
41 }
42
43 public void destroy() {
44 tg.shutdown();
45 }
46
47 public void service(HttpServletRequest req, HttpServletResponse resp) {
48 try {
49 req.setCharacterEncoding("UTF-8");
50 resp.setCharacterEncoding("UTF-8");
51 } catch(UnsupportedEncodingException e) {
52 throw(new Error(e));
53 }
54 Request rr = new J2eeRequest(getServletConfig(), req, resp);
55 RequestThread w = tg.respond(rr);
56 w.start();
57 try {
58 w.join();
59 } catch(InterruptedException e) {
60 w.interrupt();
61 return;
62 }
63 }
64}