2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with the com.oreilly.servlet library, any library
22 * licensed under the Apache Software License, The Sun (tm) Java Advanced
23 * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24 * the above that use the same license as the above), and distribute linked
25 * combinations including the two. You must obey the GNU General Public
26 * License in all respects for all of the code used other than the above
27 * mentioned libraries. If you modify this file, you may extend this exception
28 * to your version of the file, but you are not obligated to do so. If you do
29 * not wish to do so, delete this exception statement from your version.
34 import java.io.IOException;
35 import java.lang.reflect.InvocationTargetException;
36 import java.lang.reflect.Method;
37 import java.util.Locale;
38 import javax.servlet.ServletConfig;
39 import javax.servlet.ServletException;
40 import javax.servlet.http.HttpServlet;
41 import javax.servlet.http.HttpServletRequest;
42 import javax.servlet.http.HttpServletResponse;
43 import javax.servlet.http.HttpSession;
45 import com.codestudio.util.JDBCPool;
46 import com.codestudio.util.JDBCPoolMetaData;
47 import com.codestudio.util.SQLManager;
48 import mir.config.MirPropertiesConfiguration;
49 import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
50 import mir.log.LoggerWrapper;
51 import mir.storage.DatabaseAdaptor;
55 * Description: Abstract servlet-class
56 * Copyright: Copyright (c) 2001, 2002
57 * Company: Mir-coders group
58 * @author idfx, the Mir-coders group
59 * @version $Id: AbstractServlet.java,v 1.28 2003/04/20 14:42:09 idfx Exp $
62 public abstract class AbstractServlet extends HttpServlet {
63 protected static String lang;
64 protected LoggerWrapper logger;
65 protected MirPropertiesConfiguration configuration;
68 * Constructor for AbstractServlet.
70 public AbstractServlet() {
72 logger = new LoggerWrapper("Servlet");
75 protected void setNoCaching(HttpServletResponse aResponse) {
76 //nothing in Mir can or should be cached as it's all dynamic...
78 //this needs to be done here and not per page (via meta tags) as some
79 //browsers have problems w/ it per-page -mh
80 aResponse.setHeader("Pragma", "no-cache");
81 aResponse.setDateHeader("Expires", 0);
82 aResponse.setHeader("Cache-Control", "no-cache");
86 * Bind the language to the session
88 protected void setLanguage(HttpSession session, String language) {
89 logger.debug("setting language to " + language);
91 session.setAttribute("language", language);
92 session.setAttribute("locale", new Locale(language, ""));
96 * Get the session-bound language
98 protected String getLanguage(HttpServletRequest aRequest, HttpSession session) {
99 String lang = (String) session.getAttribute("language");
101 if (lang == null || lang.length()==0) {
102 lang = getAcceptLanguage(aRequest);
109 * get the locale either from the session or the accept-language header ot the request
110 * this supersedes getLanguage for the new i18n
112 public Locale getLocale(HttpServletRequest aRequest) {
114 HttpSession session = aRequest.getSession(false);
115 if (session != null) {
116 // session can be null in case of logout
117 loc = (Locale) session.getAttribute("locale");
119 // if there is nothing in the session get it fron the accept-language
121 loc = aRequest.getLocale();
124 logger.debug("getting locale: " + loc.getLanguage());
130 * Checks the Accept-Language of the client browser.
131 * If this language is available it returns its country-code,
132 * else it returns the standard-language
134 protected String getAcceptLanguage(HttpServletRequest aRequest) {
135 Locale loc = aRequest.getLocale();
136 lang = loc.getLanguage();
141 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
143 public void init(ServletConfig config) throws ServletException {
146 MirPropertiesConfiguration.setContext(config.getServletContext());
148 configuration = MirPropertiesConfiguration.instance();
150 catch (PropertiesConfigExc e) {
151 throw new ServletException(e);
154 String dbUser = configuration.getString("Database.Username");
155 String dbPassword = configuration.getString("Database.Password");
156 String dbHost = configuration.getString("Database.Host");
157 String dbAdapName = configuration.getString("Database.Adaptor");
158 String dbName = configuration.getString("Database.Name");
160 DatabaseAdaptor adaptor;
162 adaptor = (DatabaseAdaptor) Class.forName(dbAdapName).newInstance();
164 catch (Exception e) {
165 throw new ServletException("Could not load DB adapator: " +
172 dbDriver = adaptor.getDriver();
173 dbUrl = adaptor.getURL(dbUser, dbPassword, dbHost);
175 catch (Exception e) {
176 throw new ServletException(e);
179 JDBCPoolMetaData meta = new JDBCPoolMetaData();
180 meta.setDbname(dbName);
181 meta.setDriver(dbDriver);
183 meta.setUserName(dbUser);
184 meta.setPassword(dbPassword);
185 meta.setJNDIName("mir");
186 meta.setMaximumSize(10);
187 meta.setMinimumSize(1);
188 meta.setPoolPreparedStatements(false);
189 meta.setCacheEnabled(false);
190 meta.setCacheSize(15);
191 meta.setDebugging(false);
192 // meta.setLogFile(dblogfile+".pool");
194 SQLManager manager = SQLManager.getInstance();
195 JDBCPool pool = null;
196 if (manager != null) {
197 pool = manager.createPool(meta);
201 private void setEncoding(HttpServletRequest request){
203 Class reqClass = request.getClass();
204 Method method = reqClass.getMethod("setCharacterEncoding", new Class[]{String.class});
205 String encoding = configuration.getString("Mir.DefaultHTMLCharset");
206 method.invoke(request, new Object[]{encoding});
207 } catch (NoSuchMethodException e) {
208 // TODO set the encoding in a zapata-way
210 logger.error("not yes implemented: " + e.getMessage());
211 } catch (SecurityException e) {
212 logger.error(e.getMessage());
214 } catch (IllegalArgumentException e) {
215 logger.error(e.getMessage());
217 } catch (IllegalAccessException e) {
218 logger.error(e.getMessage());
220 } catch (InvocationTargetException e) {
221 logger.error(e.getMessage());
226 protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
227 doPost(request, response);
230 protected final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
231 if ( (configuration.getString("RootUri") == null) ||
232 configuration.getString("RootUri").equals("")) {
233 configuration.setProperty("RootUri", request.getContextPath());
235 setEncoding(request);
236 process(request, response);
239 abstract public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;