SAStrutsチュートリアルを、SDLoaderで動かす。

SAStrutsをSDLoaderで動かそうとしたら ServletException。

javax.servlet.ServletException: javax.servlet.jsp.tagext.TagAttributeInfo.<init>(Ljava/lang/String;ZLjava/lang/String;ZZLjava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)V
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:275)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
	at sdloader.javaee.impl.FilterChainImpl.doFilter(FilterChainImpl.java:50)
	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	at sdloader.javaee.impl.FilterChainImpl.doFilter(FilterChainImpl.java:48)
        〜略〜

エラーメッセージの内容が、TagAttributeInfoのコンストラクタで何かあったらしいので、調べると。

SAStrutsが同梱している geronimo-jsp_2.0_spec-1.0.jar は JSP2.0。
SDLoaderの中に含まれるJasperは、JSP2.1。

なので、geronimo-jsp_2.0_spec-1.0.jar をはずして起動で解決。

と思ったら、JSP2.0版のSDLoaderがあった。

なお、JSPがないもの、JSP20を使用するものは、Downloadsのタブの一覧からダウンロードできます。

Google Code Archive - Long-term storage for Google Code Project Hosting.

これをいれたら、geronimo-jsp_2.0_spec-1.0.jar を入れてても普通に動いた。。

以下は、SAStrutsをSDLoaderで起動するコード。

package boot;

import sdloader.SDLoader;
import sdloader.javaee.WebAppContext;
import sdloader.util.Browser;

public class Main {
    public static void main(String[] args) {
        
        String contextPath = "/sa-struts-tutorial";
        
        SDLoader loader = new SDLoader(true);
        loader.addWebAppContext(
            new WebAppContext(contextPath, "src/main/webapp"));
        loader.setPort(8080);
        
        loader.start();
        
        Browser.open("http://localhost:" + loader.getPort() + contextPath);
    }
}