Beruflich habe ich gerade mit einer Webanwendung zu tun, die mit Spring realisiert ist. Spring macht ähnlich viel Spaß wie Ruby und ist bis jetzt das erste J2EE Framework, dass mir von Anfang zusagte und es auch schaffte, mich zu begeistern.
Die Webanwendung ist komplett UTF-8 basiert. Soweit so gut. Leider mußte ich feststellen, dass Eingaben per form nicht so ankamen, wie ich mir das vorgestellt hatte, irgendwo ging das Characterset verloren.
Ich nutze zur Zeit Java 1.5.0.8, Apache Tomcat 5.5.17, Spring 1.2.8 sowie Hibernate 3.1.x. Irgendwo im Zusammenspiel der ersten drei Komponenten trat der Fehler auf, obwohl ich in allen beteiligten JSP Dateien den Content Type angegeben habe. Ich habe mir jetzt mit folgenden Filter beholfen, der dafür sorgt, dass UTF-8 auch als solches ankommt:
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharsetFilter implements Filter {
FilterConfig config;
String encoding = "UTF-8";
/**
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
}
/**
* Sets the character encoding on the request
* @see javax.servlet.Filter#doFilter(javax.servlet.Servle tRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
/**
* @see javax.servlet.Filter#init(javax.servlet.FilterConf ig)
*/
public void init(FilterConfig config) throws ServletException {
this.config = config;
this.encoding = config.getInitParameter("requestEncoding");
}
}
Der Filter kann im web.xml einfach konfiguriert werden:
<filter>
<filter-name>
charsetFilter
</filter-name>
<filter-class>
filter.CharsetFilter
</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/app/html/*</url-pattern>
</filter-mapping>
Share This
Ich nutze gerade das J2EE Framework Spring zusammen mit Hibernate und Oracle für eine Webanwendung.
Die Hibernate DataSource kann entweder über eine DriverManagerDataSource und Angabe der Verbindungsparameter innerhalb der Webanwendung gesteuert werden, oder es kann eine JNDI Datasource des Application Containers (in dem Fall Tomcat) genutzt werden:
<bean id="serverDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/blah"/>
</bean>
Der Trick dabei ist, den vollständigen Namen der DataSource anzugeben, also “java:comp/env/jdbc/blah” statt “jdbc/blah”, ansonsten bekommt nur “javax.naming.NameNotFoundException: Name jdbc is not bound in this Context” um die Ohren geschlagen, auch wenn man die DataSource im Tomcat konfiguriert hat.
Bah, das sowas immer soviel Zeit kosten muss….
Share This
Passend zum vorherigen Eintrag Der Umzug ein kleiner HTTP Redirect Tipp:
Ich habe mich ein bisschen schlau gemacht, wie man der Welt im allgemeinen und Suchmaschinen im speziellen am besten mitteilt, dass sich eine URL geändert hat.
Der goldene Weg ist der entsprechende HTTP Header: 301, permanently moved. Das ist mit wenigen Zeilen PHP schnell erledigt:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://info.michael-simons.eu");
exit();
?>
Diese Methode ist auf jedenfall einem Refresh über Meta Tags vorzuziehen, da die Bots der Suchmaschinen so ihre Indizes aktualisieren.
In dem Zusammen stieß ich auf folgenden Artikel: Redirects using HTTP 301 headers. Dort wird anschaulich dagelegt, dass es für das Suchmaschinen Ranking einer Seite nicht gut ist, wenn z.B. www.michael-simons.eu auf www.michael-simons.eu zeigt, michael-simons.eu auf michael-simons.eu. Suchmaschinenbetreiber stufen dadurch teilweise beide Seiten schlechter ein, weil identischer Content über unterschiedliche Domains zu erreichen sind.
Das kann vermieden werden, indem entweder beide Domains auf michael-simons.eu verweisen oder beide auf www.michael-simons.eu. Beispiel: Wird www.michael-simons.eu als Zieladresse in den Browser eingegeben, landet man genauso auf michael-simons.eu, als wenn man es direkt eingibt. Umgekehrt ist es genauso in Ordnung.
Das Problem lässt sich durch einen Eintrag in die .htaccess Datei mit aktivierten mod_rewrite leicht lösen:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.michael-simons\.eu [nc]
RewriteRule (.*) http://michael-simons.eu/$1 [R=301,L]
Share This
Seit geraumer Zeit nutze ich BBClone für Statistiken. Einfach und gut zu bedienen, wie ich finde.
Leider speichert BBClone in den Top n nur einzelne Suchwörter und keine Phrasen. Das kann man aber leicht ändern, wie ich in diesem Blog gefunden habe. Gleichzeit wird dort auch beschrieben, wie man BBClone die Zusammenarbeit mit WordPress nahe bringt.
Ich habe den BBClone Log Processor entsprechend angepasst. Um ihn im eigenem BBClone zu verwenden, einfach runterladen, die Endung .txt entfernen und die entsprechende log_processor.php im BBClone Verzeichnis ersetzen.
Die Datei basiert auf dem Log Processor von BBClone 0.4.8b.
Share This