001: /* ====================================================================
002: * The Jcorporate Apache Style Software License, Version 1.2 05-07-2002
003: *
004: * Copyright (c) 1995-2002 Jcorporate Ltd. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * 3. The end-user documentation included with the redistribution,
019: * if any, must include the following acknowledgment:
020: * "This product includes software developed by Jcorporate Ltd.
021: * (http://www.jcorporate.com/)."
022: * Alternately, this acknowledgment may appear in the software itself,
023: * if and wherever such third-party acknowledgments normally appear.
024: *
025: * 4. "Jcorporate" and product names such as "Expresso" must
026: * not be used to endorse or promote products derived from this
027: * software without prior written permission. For written permission,
028: * please contact info@jcorporate.com.
029: *
030: * 5. Products derived from this software may not be called "Expresso",
031: * or other Jcorporate product names; nor may "Expresso" or other
032: * Jcorporate product names appear in their name, without prior
033: * written permission of Jcorporate Ltd.
034: *
035: * 6. No product derived from this software may compete in the same
036: * market space, i.e. framework, without prior written permission
037: * of Jcorporate Ltd. For written permission, please contact
038: * partners@jcorporate.com.
039: *
040: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
041: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
042: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
043: * DISCLAIMED. IN NO EVENT SHALL JCORPORATE LTD OR ITS CONTRIBUTORS
044: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
045: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
046: * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
047: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
048: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
049: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
050: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
051: * SUCH DAMAGE.
052: * ====================================================================
053: *
054: * This software consists of voluntary contributions made by many
055: * individuals on behalf of the Jcorporate Ltd. Contributions back
056: * to the project(s) are encouraged when you make modifications.
057: * Please send them to support@jcorporate.com. For more information
058: * on Jcorporate Ltd. and its products, please see
059: * <http://www.jcorporate.com/>.
060: *
061: * Portions of this software are based upon other open source
062: * products and are subject to their respective licenses.
063: */
064:
065: package com.jcorporate.expresso.core.servlet;
066:
067: /*
068: * StdServlet.java
069: *
070: * Copyright 1999, 2000, 2001 Jcorporate Ltd.
071: */
072:
073: import com.jcorporate.expresso.core.i18n.Messages;
074: import com.jcorporate.expresso.core.misc.ConfigManager;
075: import com.jcorporate.expresso.core.misc.HTTPUtil;
076: import com.jcorporate.expresso.core.misc.StringUtil;
077:
078: import javax.servlet.ServletConfig;
079: import javax.servlet.ServletException;
080: import javax.servlet.http.HttpServlet;
081: import javax.servlet.http.HttpServletRequest;
082: import javax.servlet.http.HttpServletResponse;
083: import javax.servlet.http.HttpSession;
084: import java.io.IOException;
085:
086: /**
087: * A Servlet base class adding some basic common functionality to the
088: * core HttpServlet class.
089: *
090: * @author Michael Nash
091: * @see com.jcorporate.expresso.core.servlet.DBServlet
092: */
093: public abstract class StdServlet extends HttpServlet {
094: protected static final String this Class = StdServlet.class
095: .getName()
096: + ".";
097: protected String mySchema = null;
098:
099: /**
100: * Ancestor calls this function (with super.doGet) to handle
101: * making database connection, getting user login info
102: * and other common tasks.
103: *
104: * @param request Standard request object
105: * @param response Standard response object
106: * @throws ServletException If an uncaught exception occurs
107: * @throws IOException If an I/O error occurs while communicating with
108: * the client
109: */
110: public void doGet(HttpServletRequest request,
111: HttpServletResponse response) throws ServletException,
112: IOException {
113: HttpSession session = request.getSession(false);
114:
115: if (session == null) {
116: session = request.getSession(true);
117: }
118: try {
119: handleParam(request, response);
120: } catch (ServletException se) {
121: showError(se, request, response);
122:
123: return;
124: }
125: } /* doGet(HttpServletRequest, HttpServletResponse) */
126:
127: /**
128: * Ancestor calls this method via super.doPost to handle standard
129: * operations.
130: *
131: * @param req Standard request object
132: * @param res Standard response object
133: * @throws ServletException If an uncaught exception occurs
134: * @throws IOException If an I/O error occurs while communicating with
135: * the client
136: */
137: public void doPost(HttpServletRequest req, HttpServletResponse res)
138: throws ServletException, IOException {
139: try {
140: handleParam(req, res);
141: } catch (Exception de) {
142: showError(de, req, res);
143:
144: return;
145: }
146: } /* doPost(HttpServletRequest, HttpServletResponse) */
147:
148: /**
149: * Return the name of the current web server system
150: *
151: * @param request
152: * @return String The name of the current web server
153: */
154: protected String getServerName(HttpServletRequest request) {
155: return request.getServerName();
156: } /* getServerName(HttpServletRequest) */
157:
158: /**
159: * Return the port number the servlet runtime engine is running on
160: *
161: * @param request
162: * @return int The port number for servlets
163: */
164: public int getServerPort(HttpServletRequest request) {
165: return request.getServerPort();
166: } /* getServerPort(HttpServletRequest) */
167:
168: /**
169: * Return a string to be used as part of the URL to call this servlet.
170: * Often used by doGet methods to build the action for a form to call
171: * the doPost method of the same servlet.
172: *
173: * @param request
174: * @return String The string for building a URL
175: * @throws ServletException If the string cannot be built due to
176: * setup information not being available
177: */
178: public String getServletPrefix(HttpServletRequest request)
179: throws ServletException {
180: return (request.getRequestURI());
181: } /* getServletPrefix(HttpServletRequest) */
182:
183: /**
184: * @param request
185: * @param servlet
186: * @return
187: */
188: public String getServletPrefix(HttpServletRequest request,
189: String servlet) throws ServletException {
190: String initPath = getServletPrefix(request);
191: int lastPos = initPath.lastIndexOf("/");
192:
193: if (lastPos > 0) {
194: return initPath.substring(0, lastPos) + "/" + servlet;
195: } else {
196: return initPath + "/" + servlet;
197: }
198: } /* getServletPrefix(HttpServletRequest, String) */
199:
200: /**
201: * Ancestors of this class override this method to return a specific title that is
202: * used by the security administration Controllers to describe the servlet
203: *
204: * @return
205: */
206: public String getTitle() {
207: return ("No Title - " + getClass().getName());
208: } /* getTitle() */
209:
210: /**
211: * Handle the parameters to this servlet & set up standard information
212: *
213: * @param request Standard request object
214: * @param response Standard response object
215: * @throws IOException If an I/O error occurs communicating with the client
216: * @throws ServletException If an uncaught exception occurs
217: */
218: protected void handleParam(HttpServletRequest request,
219: HttpServletResponse response) throws IOException,
220: ServletException {
221: HTTPUtil.setBackURL(request);
222: HTTPUtil.setContinueURLFromQueryString(request);
223: } /* handleParam(HttpServletRequest, HttpServletResponse) */
224:
225: /**
226: * Display an error to the user in a nicely formatted manner
227: *
228: * @param errorMessage Error message
229: * @param request
230: * @param response
231: */
232: protected void showError(String errorMessage,
233: HttpServletRequest request, HttpServletResponse response)
234: throws ServletException {
235: Exception e = new Exception("No specific exception available");
236: showError(e, request, response);
237: } /* showError(String, HttpServletRequest, HttpServletResponse) */
238:
239: /**
240: * Display a throwable (like an exception) to the user in a nicely
241: * formatted manner. Also show the stack trace in an HTML comment
242: *
243: * @param t The throwable error
244: * @param request
245: * @param response
246: */
247: protected void showError(Throwable t, HttpServletRequest request,
248: HttpServletResponse response) throws ServletException {
249: throw new ServletException(t);
250: } /* showError(Throwable, HttpServletRequest, HttpServletResponse) */
251:
252: /**
253: * Servlet initialization. Checks to make sure ConfigManager has been
254: * initialized and starts the configuration process if it hasn't.
255: *
256: * @param sc The ServletConfig. Should contain 'configDir' as a context
257: * parameter, and possibly 'logDir'.
258: */
259: public void init(ServletConfig sc) throws ServletException {
260:
261: super .init(sc);
262:
263: if (!ConfigManager.isInitialized()) {
264: ConfigManager.config(sc);
265: }
266: } /* init(ServletConfig) */
267:
268: /**
269: * Called when the web context is destroyed or reloaded
270: */
271: public void destroy() {
272: }
273:
274: /**
275: * Tell this StdServlet object what Schema it belongs to. This is used
276: * when the Controller tries to use it's "getString(String, Object[])"
277: * method to prepare internationalized messages - it passes the call
278: * along to the appropriate schema which knows how to locate the
279: * proper message file
280: *
281: * @param schemaClass
282: */
283: protected void setSchema(String schemaClass) {
284: StringUtil.assertNotBlank(schemaClass,
285: "Schema cannot be set to blank or null");
286: mySchema = schemaClass;
287: } /* setSchema(String) */
288:
289: /**
290: * Pass on a call to retrieve an appropriate localized string from the
291: * correct Schema object
292: *
293: * @param req
294: * @param stringCode
295: * @param args
296: * @return
297: */
298: public String getString(HttpServletRequest req, String stringCode,
299: Object[] args) throws ServletException {
300: if (mySchema == null) {
301: setSchema("com.jcorporate.expresso.core.ExpressoSchema");
302: }
303:
304: return Messages.getString(getSchema(), req, stringCode, args);
305: } /* getString(HttpServletRequest, String, Object[]) */
306:
307: /**
308: * Convenience method to request a localized message with no parameters
309: *
310: * @param req
311: * @param stringCode
312: * @return
313: */
314: public String getString(HttpServletRequest req, String stringCode)
315: throws ServletException {
316: Object[] args = {};
317:
318: return getString(req, stringCode, args);
319: } /* getString(HttpServletRequest, String) */
320:
321: /**
322: * Return the name of the schema class that this servlet is registered
323: * within
324: *
325: * @return
326: */
327: protected String getSchema() {
328: return mySchema;
329: } /* getSchema() */
330:
331: } /* StdServlet */
|