added default JSP file and statistics measurement for attachment downloads
This commit is contained in:
		
							parent
							
								
									7e72407b84
								
							
						
					
					
						commit
						257537e869
					
				@ -312,6 +312,12 @@
 | 
			
		||||
    <url-pattern>/dump/*</url-pattern>
 | 
			
		||||
  </servlet-mapping>
 | 
			
		||||
 | 
			
		||||
  <!-- The list of "welcome files" for the application -->
 | 
			
		||||
  <welcome-file-list>
 | 
			
		||||
    <welcome-file>default.jsp</welcome-file>
 | 
			
		||||
    <welcome-file>index.html</welcome-file>
 | 
			
		||||
  </welcome-file-list>
 | 
			
		||||
 | 
			
		||||
  <!-- Global parameters for the HTTP session -->
 | 
			
		||||
  <session-config>
 | 
			
		||||
    <session-timeout>60</session-timeout>    <!-- 1 hour -->
 | 
			
		||||
 | 
			
		||||
@ -377,9 +377,12 @@ CREATE TABLE postdata (
 | 
			
		||||
CREATE TABLE postattach (
 | 
			
		||||
    postid BIGINT NOT NULL PRIMARY KEY,
 | 
			
		||||
    datalen INT,
 | 
			
		||||
    hits INT DEFAULT 0,
 | 
			
		||||
    last_hit DATETIME,
 | 
			
		||||
    stgmethod SMALLINT DEFAULT 0,
 | 
			
		||||
    priority SMALLINT DEFAULT 0,
 | 
			
		||||
    filename VARCHAR(255),
 | 
			
		||||
    mimetype VARCHAR(128),
 | 
			
		||||
    stgmethod SMALLINT DEFAULT 0,
 | 
			
		||||
    data MEDIUMBLOB
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ package com.silverwrist.venice.core.impl;
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.sql.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.zip.*;
 | 
			
		||||
import org.apache.log4j.*;
 | 
			
		||||
import com.silverwrist.util.StringUtil;
 | 
			
		||||
import com.silverwrist.util.collections.*;
 | 
			
		||||
@ -60,6 +61,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
  private int datalen;
 | 
			
		||||
  private String filename;
 | 
			
		||||
  private String mimetype;
 | 
			
		||||
  private int stgmethod;
 | 
			
		||||
  private boolean nuked = false;
 | 
			
		||||
  private String creator_cache = null;
 | 
			
		||||
  private String text_cache = null;
 | 
			
		||||
@ -73,7 +75,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
					long postid, long parent, int num, int linecount, int creator_uid,
 | 
			
		||||
					java.util.Date posted, boolean hidden, int scribble_uid,
 | 
			
		||||
					java.util.Date scribble_date, String pseud, int datalen,
 | 
			
		||||
					String filename, String mimetype)
 | 
			
		||||
					String filename, String mimetype, int stgmethod)
 | 
			
		||||
  {
 | 
			
		||||
    this.engine = engine;
 | 
			
		||||
    this.conf = conf;
 | 
			
		||||
@ -91,6 +93,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
    this.datalen = datalen;
 | 
			
		||||
    this.filename = filename;
 | 
			
		||||
    this.mimetype = mimetype;
 | 
			
		||||
    this.stgmethod = stgmethod;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -114,6 +117,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
    this.datalen = 0;
 | 
			
		||||
    this.filename = null;
 | 
			
		||||
    this.mimetype = null;
 | 
			
		||||
    this.stgmethod = -1;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -138,8 +142,9 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
    Statement stmt = conn.createStatement();
 | 
			
		||||
    StringBuffer sql = new StringBuffer("SELECT posts.hidden, posts.scribble_uid, posts.scribble_date, "
 | 
			
		||||
					+ "posts.pseud, postattach.datalen, postattach.filename, "
 | 
			
		||||
					+ "postattach.mimetype FROM posts LEFT JOIN postattach ON "
 | 
			
		||||
					+ "posts.postid = postattach.postid WHERE posts.postid = ");
 | 
			
		||||
					+ "postattach.mimetype, postattach.stgmethod FROM posts "
 | 
			
		||||
					+ "LEFT JOIN postattach ON posts.postid = postattach.postid "
 | 
			
		||||
					+ "WHERE posts.postid = ");
 | 
			
		||||
    sql.append(postid).append(';');
 | 
			
		||||
    ResultSet rs = stmt.executeQuery(sql.toString());
 | 
			
		||||
    if (rs.next())
 | 
			
		||||
@ -151,6 +156,9 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
      datalen = rs.getInt(5);
 | 
			
		||||
      filename = rs.getString(6);
 | 
			
		||||
      mimetype = rs.getString(7);
 | 
			
		||||
      stgmethod = rs.getInt(8);
 | 
			
		||||
      if (rs.wasNull())
 | 
			
		||||
	stgmethod = -1;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else
 | 
			
		||||
@ -165,6 +173,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
      datalen = 0;
 | 
			
		||||
      filename = null;
 | 
			
		||||
      mimetype = null;
 | 
			
		||||
      stgmethod = -1;
 | 
			
		||||
      nuked = true;
 | 
			
		||||
      creator_cache = null;
 | 
			
		||||
      text_cache = null;
 | 
			
		||||
@ -384,10 +393,16 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
 | 
			
		||||
      } // end if
 | 
			
		||||
 | 
			
		||||
      // Create the statement and the SQL we need to retrieve the attachment.
 | 
			
		||||
      // This will cause a "hit" on the attachment data.  Update that record.
 | 
			
		||||
      Statement stmt = conn.createStatement();
 | 
			
		||||
      StringBuffer sql = new StringBuffer("SELECT data FROM postattach WHERE postid = ");
 | 
			
		||||
      sql.append(postid).append(';');
 | 
			
		||||
      StringBuffer sql = new StringBuffer("UPDATE postattach SET hits = hits + 1, last_hit = '");
 | 
			
		||||
      sql.append(SQLUtil.encodeDate(new java.util.Date())).append("' WHERE postid = ").append(postid);
 | 
			
		||||
      sql.append(';');
 | 
			
		||||
      stmt.executeUpdate(sql.toString());
 | 
			
		||||
 | 
			
		||||
      // Create the SQL we need to retrieve the attachment.
 | 
			
		||||
      sql.setLength(0);
 | 
			
		||||
      sql.append("SELECT data FROM postattach WHERE postid = ").append(postid).append(';');
 | 
			
		||||
 | 
			
		||||
      // Execute the query!
 | 
			
		||||
      ResultSet rs = stmt.executeQuery(sql.toString());
 | 
			
		||||
@ -402,19 +417,35 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
      // need to make a temporary copy of it, to a ByteArrayOutputStream.  (Attachments can only be
 | 
			
		||||
      // 1 Mb in size, so this shouldn't be a big problem.)
 | 
			
		||||
      InputStream sqldata = rs.getBinaryStream(1);
 | 
			
		||||
      InputStream real_input;
 | 
			
		||||
      switch (stgmethod)
 | 
			
		||||
      { // where's our input really coming from
 | 
			
		||||
	case 0:   // copy verbatim
 | 
			
		||||
	  real_input = sqldata;
 | 
			
		||||
	  break;
 | 
			
		||||
 | 
			
		||||
	case 1:   // gunzip it first
 | 
			
		||||
	  real_input = new GZIPInputStream(sqldata);
 | 
			
		||||
	  break;
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
	  throw new DataException("Unknown storage method value: " + stgmethod);
 | 
			
		||||
 | 
			
		||||
      } // end switch
 | 
			
		||||
 | 
			
		||||
      ByteArrayOutputStream copy = new ByteArrayOutputStream(datalen);
 | 
			
		||||
      byte[] buffer = new byte[4096];
 | 
			
		||||
      int rd = sqldata.read(buffer);
 | 
			
		||||
      int rd = real_input.read(buffer);
 | 
			
		||||
      while (rd>=0)
 | 
			
		||||
      { // write, then read again
 | 
			
		||||
	if (rd>0)
 | 
			
		||||
	  copy.write(buffer,0,rd);
 | 
			
		||||
	rd = sqldata.read(buffer);
 | 
			
		||||
	rd = real_input.read(buffer);
 | 
			
		||||
 | 
			
		||||
      } // end while
 | 
			
		||||
 | 
			
		||||
      // Close both our streams, making sure we create the stream we need for the return value.
 | 
			
		||||
      sqldata.close();
 | 
			
		||||
      real_input.close();
 | 
			
		||||
      rc = new ByteArrayInputStream(copy.toByteArray());
 | 
			
		||||
      copy.close();
 | 
			
		||||
 | 
			
		||||
@ -816,6 +847,40 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
 | 
			
		||||
    } // end else if
 | 
			
		||||
 | 
			
		||||
    // Compress the attachment data in memory.
 | 
			
		||||
    InputStream real_data = null;
 | 
			
		||||
    int real_length = 0;
 | 
			
		||||
    try
 | 
			
		||||
    { // create a compressor into a memory buffer
 | 
			
		||||
      ByteArrayOutputStream bytestm = new ByteArrayOutputStream(length);
 | 
			
		||||
      GZIPOutputStream gzipstm = new GZIPOutputStream(bytestm);
 | 
			
		||||
 | 
			
		||||
      // do the usual read/write loop to get the data compressed
 | 
			
		||||
      byte[] buffer = new byte[4096];
 | 
			
		||||
      int rd = data.read(buffer);
 | 
			
		||||
      while (rd>=0)
 | 
			
		||||
      { // write, then read
 | 
			
		||||
	if (rd>0)
 | 
			
		||||
	  gzipstm.write(buffer,0,rd);
 | 
			
		||||
	rd = data.read(buffer);
 | 
			
		||||
 | 
			
		||||
      } // end while
 | 
			
		||||
 | 
			
		||||
      // finish compression, then get the data and the real length
 | 
			
		||||
      gzipstm.finish();
 | 
			
		||||
      buffer = bytestm.toByteArray();
 | 
			
		||||
      real_length = buffer.length;
 | 
			
		||||
      real_data = new ByteArrayInputStream(buffer);
 | 
			
		||||
      gzipstm.close();
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (IOException ioe)
 | 
			
		||||
    { // the big error
 | 
			
		||||
      logger.error("IOException in compressor loop: " + ioe.getMessage(),ioe);
 | 
			
		||||
      throw new DataException("Failure in compressing read data: " + ioe.getMessage());
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
    
 | 
			
		||||
    Connection conn = null;
 | 
			
		||||
    AuditRecord ar = null;
 | 
			
		||||
 | 
			
		||||
@ -834,20 +899,23 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
 | 
			
		||||
      // Build the SQL statement that inserts the attachment.  Note the use of the "?" to specify the
 | 
			
		||||
      // BLOB parameter (the attachment data itself); this comes later.
 | 
			
		||||
      StringBuffer sql =
 | 
			
		||||
          new StringBuffer("INSERT INTO postattach (postid, datalen, filename, mimetype, data) VALUES (");
 | 
			
		||||
      sql.append(postid).append(", ").append(length).append(", '").append(SQLUtil.encodeString(file));
 | 
			
		||||
      sql.append("', '").append(SQLUtil.encodeString(m_type)).append("', ?);");
 | 
			
		||||
      StringBuffer sql = new StringBuffer("INSERT INTO postattach (postid, datalen, last_hit, stgmethod, "
 | 
			
		||||
					  + "filename, mimetype, data) VALUES (");
 | 
			
		||||
      sql.append(postid).append(", ").append(length).append(", '");
 | 
			
		||||
      sql.append(SQLUtil.encodeDate(new java.util.Date())).append("', 1, '");
 | 
			
		||||
      sql.append(SQLUtil.encodeString(file)).append("', '").append(SQLUtil.encodeString(m_type));
 | 
			
		||||
      sql.append("', ?);");
 | 
			
		||||
 | 
			
		||||
      // Prepare the statement, set the BLOB parameter, and execute it.
 | 
			
		||||
      PreparedStatement stmt = conn.prepareStatement(sql.toString());
 | 
			
		||||
      stmt.setBinaryStream(1,data,length);
 | 
			
		||||
      stmt.setBinaryStream(1,real_data,real_length);
 | 
			
		||||
      stmt.executeUpdate();
 | 
			
		||||
 | 
			
		||||
      // Save off the local attachment values.
 | 
			
		||||
      datalen = length;
 | 
			
		||||
      filename = file;
 | 
			
		||||
      mimetype = m_type;
 | 
			
		||||
      stgmethod = 1;
 | 
			
		||||
 | 
			
		||||
      // Generate an audit record indicating what we did.
 | 
			
		||||
      ar = new AuditRecord(AuditRecord.UPLOAD_ATTACHMENT,conf.realUID(),conf.userRemoteAddress(),
 | 
			
		||||
@ -1036,8 +1104,8 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
      StringBuffer sql =
 | 
			
		||||
	  new StringBuffer("SELECT p.postid, p.parent, p.num, p.linecount, p.creator_uid, p.posted, "
 | 
			
		||||
			   + "p.hidden, p.scribble_uid,	p.scribble_date, p.pseud, a.datalen, a.filename, "
 | 
			
		||||
			   + "a.mimetype FROM posts p LEFT JOIN postattach a ON p.postid = a.postid "
 | 
			
		||||
			   + "WHERE p.topicid = ");
 | 
			
		||||
			   + "a.mimetype, a.stgmethod FROM posts p LEFT JOIN postattach a ON "
 | 
			
		||||
			   + "p.postid = a.postid WHERE p.topicid = ");
 | 
			
		||||
      sql.append(topicid).append(" AND p.num >= ").append(post_low).append(" AND p.num <= ");
 | 
			
		||||
      sql.append(post_high).append(" ORDER BY p.num ASC;");
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
@ -1050,7 +1118,8 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
	  new TopicMessageUserContextImpl(engine,conf,datapool,rs.getLong(1),rs.getLong(2),rs.getInt(3),
 | 
			
		||||
					  rs.getInt(4),rs.getInt(5),SQLUtil.getFullDateTime(rs,6),
 | 
			
		||||
					  rs.getBoolean(7),rs.getInt(8),SQLUtil.getFullDateTime(rs,9),
 | 
			
		||||
					  rs.getString(10),rs.getInt(11),rs.getString(12),rs.getString(13));
 | 
			
		||||
					  rs.getString(10),rs.getInt(11),rs.getString(12),rs.getString(13),
 | 
			
		||||
					  rs.getInt(14));
 | 
			
		||||
	rc.add(val);
 | 
			
		||||
 | 
			
		||||
      } // end while
 | 
			
		||||
@ -1091,8 +1160,8 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
      StringBuffer sql =
 | 
			
		||||
	  new StringBuffer("SELECT p.postid, p.parent, p.num, p.linecount, p.creator_uid, p.posted, "
 | 
			
		||||
			   + "p.hidden, p.scribble_uid,	p.scribble_date, p.pseud, a.datalen, a.filename, "
 | 
			
		||||
			   + "a.mimetype FROM posts p LEFT JOIN postattach a ON p.postid = a.postid "
 | 
			
		||||
			   + "WHERE p.topicid = ");
 | 
			
		||||
			   + "a.mimetype, a.stgmethod FROM posts p LEFT JOIN postattach a ON "
 | 
			
		||||
			   + "p.postid = a.postid WHERE p.topicid = ");
 | 
			
		||||
      sql.append(topicid).append(" AND p.num = ").append(message_num).append(';');
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
	logger.debug("SQL: " + sql.toString());
 | 
			
		||||
@ -1103,7 +1172,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
		                               rs.getInt(4),rs.getInt(5),SQLUtil.getFullDateTime(rs,6),
 | 
			
		||||
					       rs.getBoolean(7),rs.getInt(8),SQLUtil.getFullDateTime(rs,9),
 | 
			
		||||
					       rs.getString(10),rs.getInt(11),rs.getString(12),
 | 
			
		||||
					       rs.getString(13));
 | 
			
		||||
					       rs.getString(13),rs.getInt(14));
 | 
			
		||||
 | 
			
		||||
      // indicates an error...
 | 
			
		||||
      throw new DataException("Message not found.");
 | 
			
		||||
@ -1140,8 +1209,8 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
      StringBuffer sql =
 | 
			
		||||
	  new StringBuffer("SELECT p.postid, p.parent, p.num, p.linecount, p.creator_uid, p.posted, "
 | 
			
		||||
			   + "p.hidden, p.scribble_uid,	p.scribble_date, p.pseud, a.datalen, a.filename, "
 | 
			
		||||
			   + "a.mimetype FROM topics t, posts p LEFT JOIN postattach a ON p.postid = a.postid "
 | 
			
		||||
			   + "WHERE t.topicid = p.topicid AND t.confid = ");
 | 
			
		||||
			   + "a.mimetype, a.stgmethod FROM topics t, posts p LEFT JOIN postattach a "
 | 
			
		||||
			   + "ON p.postid = a.postid WHERE t.topicid = p.topicid AND t.confid = ");
 | 
			
		||||
      sql.append(conf.realConfID()).append(" AND p.postid = ").append(postid).append(';');
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
	logger.debug("SQL: " + sql.toString());
 | 
			
		||||
@ -1152,7 +1221,7 @@ class TopicMessageUserContextImpl implements TopicMessageContext
 | 
			
		||||
		                               rs.getInt(4),rs.getInt(5),SQLUtil.getFullDateTime(rs,6),
 | 
			
		||||
					       rs.getBoolean(7),rs.getInt(8),SQLUtil.getFullDateTime(rs,9),
 | 
			
		||||
					       rs.getString(10),rs.getInt(11),rs.getString(12),
 | 
			
		||||
					       rs.getString(13));
 | 
			
		||||
					       rs.getString(13),rs.getInt(14));
 | 
			
		||||
 | 
			
		||||
      // indicates an error...
 | 
			
		||||
      throw new DataException("Message not found.");
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@
 | 
			
		||||
 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
			
		||||
 * language governing rights and limitations under the License.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Original Code is the Venice Web Community System.
 | 
			
		||||
 * The Original Code is the Venice Web Communities System.
 | 
			
		||||
 * 
 | 
			
		||||
 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
@ -23,6 +23,13 @@ import com.silverwrist.util.StringUtil;
 | 
			
		||||
 | 
			
		||||
public class SQLUtil
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Static data members
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private static SimpleTimeZone utc = new SimpleTimeZone(0,"UTC");
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Internal functions
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
@ -35,7 +42,7 @@ public class SQLUtil
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    { // do almost the reverse process of formatting it into a string
 | 
			
		||||
      GregorianCalendar cal = new GregorianCalendar(new SimpleTimeZone(0,"UTC"));
 | 
			
		||||
      GregorianCalendar cal = new GregorianCalendar(utc);
 | 
			
		||||
      cal.set(Calendar.YEAR,Integer.parseInt(dstr.substring(0,4)));
 | 
			
		||||
      cal.set(Calendar.MONTH,Integer.parseInt(dstr.substring(5,7)) - 1 + Calendar.JANUARY);
 | 
			
		||||
      cal.set(Calendar.DAY_OF_MONTH,Integer.parseInt(dstr.substring(8,10)));
 | 
			
		||||
@ -112,7 +119,7 @@ public class SQLUtil
 | 
			
		||||
  public static String encodeDate(java.util.Date d)
 | 
			
		||||
  {
 | 
			
		||||
    // Break down the date as a UTC value.
 | 
			
		||||
    GregorianCalendar cal = new GregorianCalendar(new SimpleTimeZone(0,"UTC"));
 | 
			
		||||
    GregorianCalendar cal = new GregorianCalendar(utc);
 | 
			
		||||
    cal.setTime(d);
 | 
			
		||||
 | 
			
		||||
    // Create the two string buffers converting the date.
 | 
			
		||||
 | 
			
		||||
@ -111,14 +111,14 @@ public class Attachment extends VeniceServlet
 | 
			
		||||
      return new ErrorBox(null,"Internal Error: 'thefile' should be a file param",target);
 | 
			
		||||
 | 
			
		||||
    // get the SIG
 | 
			
		||||
    SIGContext sig = getSIGParameter(request,user,true,"top");
 | 
			
		||||
    SIGContext sig = getSIGParameter(mphandler,user,true,"top");
 | 
			
		||||
    changeMenuSIG(request,sig);
 | 
			
		||||
 | 
			
		||||
    // get the conference
 | 
			
		||||
    ConferenceContext conf = getConferenceParameter(request,sig,true,"top");
 | 
			
		||||
    ConferenceContext conf = getConferenceParameter(mphandler,sig,true,"top");
 | 
			
		||||
 | 
			
		||||
    // get the message we want to use
 | 
			
		||||
    TopicMessageContext msg = getMessageParameter(request,conf,true,"top");
 | 
			
		||||
    TopicMessageContext msg = getMessageParameter(mphandler,conf,true,"top");
 | 
			
		||||
 | 
			
		||||
    try
 | 
			
		||||
    { // attach the data to the message!
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								web/default.jsp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								web/default.jsp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
<%--
 | 
			
		||||
  The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
			
		||||
  (the "License"); you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
			
		||||
 | 
			
		||||
  Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
			
		||||
  WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
			
		||||
  language governing rights and limitations under the License.
 | 
			
		||||
  
 | 
			
		||||
  The Original Code is the Venice Web Communities System.
 | 
			
		||||
  
 | 
			
		||||
  The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
 | 
			
		||||
  for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
			
		||||
  Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
 | 
			
		||||
  Contributor(s): 
 | 
			
		||||
--%>
 | 
			
		||||
<%
 | 
			
		||||
ServletContext ctxt = getServletConfig().getServletContext();
 | 
			
		||||
RequestDispatcher disp = ctxt.getNamedDispatcher("top");
 | 
			
		||||
disp.forward(request,response);
 | 
			
		||||
%>
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user