[servlets] url-pattern und Framework Fragen

xardias

Mitglied
Guten Tag,

ich bastel schon länger an einem Framework für Java Webapps (ch weiß es gibt viele, doch ich habe meine Gründe).
Ich stehe doch gerade vor einem Problem:

Das Servlet wird über das url-pattern: *.page eingebunden.
Jede Webseite wird durch eine Klasse abgeleitet von HtmlPage repräsentiert.
Um die herauszusuchen wird die Request URI geparst. So wird bei einem aufruf der Seite "beispiel.com/testfolder/Test.page" Die Klasse "irgendeinpackage.testfolder.TestPage" instanziert und ausgegeben.
Dabei ergeben sich 2 Probleme:
Es lassen sich keine Index Seiten erstellen, also z.B. so dass "beispiel.com/testfolder/" die HtmlPage "irgendeinpackage.testfolder.IndexPage" öffnet. Dazu müsste ich sämtliche urls an das servlet leiten anstatt sie an das Default Servlet zu senden.
Doch dazu müsste ich wiederum sämtliche anderen Dateianforderungen selbst behandeln, was ich vermeiden möchte (ich wüsste auch nicht wie).
Das nächste problem ist ganz trivial:
die URLs sind komplett case sensitive. Und es lässt sich kaum umgehen.

Das "Rendern" einer HtmlSeite funktionerit komplett nur die frage, wie die Seiten letztenendes ausgewählt werden stört mich daran momentan. Wie würdet ihr das machen?
So dass man in einer properties Datei sämtlichen URI's eine Klasse zuordnet? Und wie würdet ihr das Problem mit den Index Seiten lösen?

Vielen Dank
Dennis 'xardias' Kempin
 
xardias hat gesagt.:
Das "Rendern" einer HtmlSeite funktionerit komplett nur die frage, wie die Seiten letztenendes ausgewählt werden stört mich daran momentan. Wie würdet ihr das machen?
So dass man in einer properties Datei sämtlichen URI's eine Klasse zuordnet? Und wie würdet ihr das Problem mit den Index Seiten lösen?

Schreib ein Servlet das du auf
/folder/* mappest. Dieses Mapping sollte unter jenem stehen das dafür zuständig ist
das /folder/bla.site ausgeliefert wird.

Das /folder/* Servlet kann dann einen forward an die betreffende page Seite liefern.

PS: Nur aus Interresse: Gibt es ein besonderen Grund weshalb du
auf Ableitungen von HtmlPage baust?
 
Vielen dank. Ich habe dafür jedoch ein Filter statt eines Servlets genommen udn es funktionerit wunderbar.

Christian Fein hat gesagt.:
PS: Nur aus Interresse: Gibt es ein besonderen Grund weshalb du auf Ableitungen von HtmlPage baust?
Das Framework soll GUI änhnliches Programmieren von Webseiten erlauben. Sowas gibt es bereits zu hauf, doch bei allen mir bekannten Frameworks wurde dieses Konzept IMO komplett übertrieben. So werden die gesamten Klassenverbände in der Benutzersession gespeichert, oder gar als POST Daten.
Darum bastel ich momentan an einem eigenen Framework. Statische Daten werden gecached (menüs oder so) und sofort ausgegeben, so dass nur noch dynamische inhalte (Topic Liste eines forums oder so) neu generiert werden müssen. Letzten endes hab ich erstaunliche performance damit erreichen können.
Statische Seiten (1,4kb) werden in ~1ms angefordert. Und Dynamsiche Seiten (Formular mit Fehlermeldungen, etc) in rund 2ms. Ich war selbst erstaunt, dass java da so schnell ist. jediglich Mysql queries sind noch relativ langsam.

Hier ein kleines Beispiel wie sowas ausschaut (Eine kleine Seite um einen Eintrag in eine DB zu machen. ich weiß dass das mit der MySQL connection unglücklich gelöst ist, da fehtl noch ein ConnectionManager)
Code:
public class AddPage extends HtmlPage
  {
  	Statement stmt;
  	public AddPage() throws Exception
  	{
  		// sql kram
  		Class.forName("com.mysql.jdbc.Driver").newInstance(); 
 		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/boi?user=java&password=thehammer");
  		stmt = conn.createStatement();
  
  		// rahmen setzen (enthält menüs etc)
  		setPageBorder( new IrcBorder( this, "Hinzufügen" ) );
  		
  		// formular mit TextArea erzeugen
  		ComplexForm f = new ComplexForm( "submitForm", "Add.page", true )
  		{
 			public void onPost( ThorData requestData, Map<String,String> values ) throws Exception
  			{
 				if( values.get( "text" ).length() <= 1 )
  				{
 		 		FormWidget w = (FormWidget)requestData.get( "text" );
 		 		w.setError( "Nachricht eingeben" );
  					return;
  				}
 		 		 		
  				// füge zur tabelle hinzu
 		 	stmt.execute("INSERT INTO entries(content) VALUES (\""+values.get( "text" )+"\")");
  			
  			}
  		};
  				
  		TextArea text = new TextArea( "text", true );
  		text.setTitle( "Text:" );
  		
  		TextField name = new TextField( "name", true );
  		name.setTitle( "Name:" );
  		
  		f.add( name );
  		f.add( text );
  		f.add( new SubmitButton() );
  		
  		add(f);
  	}
  }

[edit} es wird übrigends xhtml1.1 valid code ausgegeben, der mit css formatiert werden kann.
 
Zuletzt bearbeitet:
Zurück