web.xml filter, 自分で Dispatch
Lift 見つつ最低限な部分を自分で再実装
- 全部のリクエストを受け取ってなんかしたいなら filter を使う
- filter では、何もせずに chain.doFilter すれば static ファイルとかをいい感じにやってくれる。
web.xml
<?xml version="1.0" encoding="utf-8"?> <!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 xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <filter> <filter-name>HttpRequestDispatcher</filter-name> <filter-class>net.lowreal.skirts.HttpRequestDispatcher</filter-class> </filter> <filter-mapping> <filter-name>HttpRequestDispatcher</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
package net.lowreal.skirts
import javax.servlet._
import javax.servlet.http.{HttpServlet, HttpServletResponse, HttpServletRequest}
class HttpRequestDispatcher extends Filter {
val static = """^/(?:css|js|images|static).*""".r
def init (filterConfig: FilterConfig) = {
println("init")
}
def doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) = {
println("doFilter")
(request, response) match {
case (req: HttpServletRequest, res: HttpServletResponse) =>
println("")
println(req)
req.getRequestURI match {
case static() =>
println("static")
chain.doFilter(request, response)
case _ =>
println("dispatch")
res.setContentType("text/html")
res.getWriter.println { """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">""" }
res.getWriter.println {
<html>
<head><title>Hello World</title></head>
<link rel="stylesheet" type="text/css" href="/css/base.css" media="screen,tv"/>
<!-- script type="text/javascript" src="/js/site-script.js"></script -->
<body>
<h1>Request</h1>
<pre>Method: { req.getMethod }</pre>
<pre>RequestURI: { req.getRequestURI }</pre>
<pre>QueryString: { req.getQueryString }</pre>
<h1>Raw</h1>
<pre>{ req }</pre>
</body>
</html>
}
}
case _ => chain.doFilter(request, response)
}
}
def destroy () = {
println("destroy")
}
}skirts っていう名前で簡単なフレームワークを作ろうと思ってる。とりあえず Lift は気にいらなかったので、コードは参考にしつつも使わない方向に……
skirts = scala / 周りをとりまく何か / 美少女