<HTML> <head><title>hello</title></head> <BODY> <h4>hello</h4> <span id="message">message</span><br/> 日本語が表示されるかのテスト。 </BODY> </HTML> |
package woolpack.samples.hello; import java.util.Date; public class HelloComponent { public String getMessage(){ return "hello " + new Date(); } } |
package woolpack.samples.hello; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import woolpack.action.ActionDef; import woolpack.action.ActionInvoker; import woolpack.action.ForwardDef; import woolpack.container.ComponentDef; import woolpack.container.ComponentScope; import woolpack.container.ScopeContainer; import woolpack.dom.DelegateDomExpression; import woolpack.dom.DomContext; import woolpack.dom.DomExpression; import woolpack.dom.DumpIfCatch; import woolpack.dom.FormatId; import woolpack.dom.ResetId; import woolpack.dom.Serial; import woolpack.dom.XmlToNode; import woolpack.ee.ActionBuilder; import woolpack.ee.HttpSessionMap; import woolpack.ee.ServletContextMap; import woolpack.ee.ServletInputStreamFactory; import woolpack.ee.ServletRequestAttributeMap; import woolpack.el.ELConstants; import woolpack.el.PathEL; import woolpack.html.HtmlConstants; import woolpack.samples.ActionDefMaker; import woolpack.text.RegExpFormat; import woolpack.utils.InputStreamReaderFactory; import woolpack.utils.UtilsConstants; /** * Hello World Web アプリケーション。 * @author nakamura * */ public class HelloServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public final Map<String,ComponentDef> componentDefMap; public final DelegateDomExpression toNode; public final DomExpression domExpression; public HelloServlet(){ // コンテナの定義。 componentDefMap = new HashMap<String,ComponentDef>(); componentDefMap.put("helloComponent", new ComponentDef(ComponentScope.REQUEST){ @Override protected Object newInstance() { return new HelloComponent(); } }); // アクションの定義 final ActionDefMaker maker = new ActionDefMaker(); maker.put("index", new ActionDef(ELConstants.NULL, new ForwardDef("index", new PathEL("container.helloComponent")))); final ActionBuilder actionBuilder = new ActionBuilder(new ActionInvoker(maker.get()), Arrays.asList("name", "id")); // サーブレットを使用せずにテストを可能にするため、 HTML ファイルを読む込む定義を後で設定するための定義。 toNode = new DelegateDomExpression(); // コンストラクタツリー domExpression = new DumpIfCatch(new Serial( // id から無駄な情報を削除する。 new FormatId(new RegExpFormat("^.*/([^/]+)$", "$1")), // Model を呼び出す。 actionBuilder.getActionExpression(), // HTML ファイルを読み込む。 toNode, HtmlConstants.NORMALIZE_CASE, // Modelの出力を HTML に流し込む。 actionBuilder.getAutoUpdateExpression() )); } @Override public void init(final ServletConfig servletConfig) throws ServletException { super.init(servletConfig); // サーブレットのリソースから HTML ファイルを読み込む定義。 toNode.setExpression(new ResetId(new Serial( new FormatId(new RegExpFormat("^(.*)$", "/html/sample/hello/$1.html")), new XmlToNode(new InputStreamReaderFactory(new ServletInputStreamFactory( servletConfig.getServletContext()), "UTF-8"))))); } @Override protected void service( final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException{ // リクエストごとに Context 役を生成する。 final DomContext domContext = new DomContext(); // URI を id として Context 役に設定する。 domContext.setId(request.getRequestURI()); // 入力値を Context 役に設定する。 domContext.setInput(request.getParameterMap()); // 各スコープを Context 役に設定する。 domContext.setRequest(new ServletRequestAttributeMap(request)); domContext.setSession(UtilsConstants.concurrentMap(new HttpSessionMap( request.getSession()), request.getSession())); domContext.setApplication(UtilsConstants.concurrentMap(new ServletContextMap( request.getSession().getServletContext()), request.getSession().getServletContext())); // コンテナを Context役に設定する。好みのコンテナで置き換えることができる。 domContext.setContainer(new ScopeContainer(domContext.getRequest(), domContext.getSession(), domContext.getApplication(), componentDefMap)); // Context 役を Expression 役に作用させる。 domExpression.interpret(domContext); // HTMLを出力する。 final Writer w = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); try{ UtilsConstants.TRANSFORMER_FACTORY.newInstance().transform( new DOMSource(domContext.getNode()), new StreamResult(w) ); }finally{ w.close(); } } } |
<?xml version="1.0"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>woolpack.samples.hello.HelloServlet</servlet-class> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> </web-app> |
<HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>hello</TITLE> </HEAD> <BODY> <H4>hello</H4> <SPAN id="message">hello Mon Jul 17 18:23:32 JST 2006</SPAN> <BR> 日本語が表示されるかのテスト。 </BODY> </HTML> |