001 package com.croftsoft.core.servlet; 002 003 import java.io.*; 004 005 import javax.servlet.*; 006 import javax.servlet.http.*; 007 008 import com.croftsoft.core.io.Encoder; 009 import com.croftsoft.core.io.Parser; 010 import com.croftsoft.core.role.Server; 011 012 /********************************************************************* 013 * Relays HTTP requests to a Server. 014 * 015 * @version 016 * $Id: HttpGatewayServlet.java,v 1.2 2006/11/28 01:31:07 croft Exp $ 017 * @since 018 * 2003-05-13 019 * @author 020 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 021 *********************************************************************/ 022 023 public abstract class HttpGatewayServlet 024 extends HttpServlet 025 ////////////////////////////////////////////////////////////////////// 026 ////////////////////////////////////////////////////////////////////// 027 { 028 029 private final Server server; 030 031 private final Parser parser; 032 033 private final Encoder encoder; 034 035 ////////////////////////////////////////////////////////////////////// 036 // protected and public constructor methods 037 ////////////////////////////////////////////////////////////////////// 038 039 protected HttpGatewayServlet ( 040 Server server, 041 Parser parser, 042 Encoder encoder ) 043 ////////////////////////////////////////////////////////////////////// 044 { 045 this.server = server; 046 047 this.parser = parser; 048 049 this.encoder = encoder; 050 } 051 052 public HttpGatewayServlet ( ) 053 ////////////////////////////////////////////////////////////////////// 054 { 055 this ( ( Server ) null, ( Parser ) null, ( Encoder ) null ); 056 } 057 058 ////////////////////////////////////////////////////////////////////// 059 // protected Encoder/Parser/Server methods that may be overridden 060 ////////////////////////////////////////////////////////////////////// 061 062 protected byte [ ] encode ( Object object ) 063 throws IOException 064 ////////////////////////////////////////////////////////////////////// 065 { 066 return encoder.encode ( object ); 067 } 068 069 protected Object parse ( 070 InputStream inputStream, 071 int contentLength ) 072 throws IOException 073 ////////////////////////////////////////////////////////////////////// 074 { 075 return parser.parse ( inputStream, contentLength ); 076 } 077 078 protected Object serve ( Object request ) 079 ////////////////////////////////////////////////////////////////////// 080 { 081 return server.serve ( request ); 082 } 083 084 ////////////////////////////////////////////////////////////////////// 085 // public final service method 086 ////////////////////////////////////////////////////////////////////// 087 088 @Override 089 public final void service ( 090 HttpServletRequest httpServletRequest, 091 HttpServletResponse httpServletResponse ) 092 throws IOException, ServletException 093 ////////////////////////////////////////////////////////////////////// 094 { 095 try 096 { 097 Object request = null; 098 099 try 100 { 101 request = parse ( 102 httpServletRequest.getInputStream ( ), -1 ); 103 } 104 catch ( IOException ex ) 105 { 106 httpServletResponse.setStatus ( 107 HttpServletResponse.SC_BAD_REQUEST ); 108 } 109 110 if ( request != null ) 111 { 112 Object response = serve ( request ); 113 114 if ( response != null ) 115 { 116 httpServletResponse.setStatus ( HttpServletResponse.SC_OK ); 117 118 byte [ ] bytes = encode ( response ); 119 120 httpServletResponse.getOutputStream ( ).write ( bytes ); 121 } 122 else 123 { 124 httpServletResponse.setStatus ( 125 HttpServletResponse.SC_ACCEPTED ); 126 } 127 } 128 } 129 catch ( Exception ex ) 130 { 131 httpServletResponse.setStatus ( 132 HttpServletResponse.SC_INTERNAL_SERVER_ERROR ); 133 134 log ( ex.getMessage ( ), ex ); 135 } 136 } 137 138 ////////////////////////////////////////////////////////////////////// 139 ////////////////////////////////////////////////////////////////////// 140 }