さぁぶれっとを作ろう (5)

今度は webapps/servlets-examples/WEB-INF/classes/RequestInfoExample.javaScala で書き直してみる。

import javax.servlet._
import javax.servlet.http._

class RequestInfo extends HttpServlet {
  override def doGet(req: HttpServletRequest, res: HttpServletResponse) {
    val title = "Request Information"
    val content =
      <html>
        <head><title>{title}</title></head>
        <body>
          <h1>{title}</h1>
          <dl>
            <dt>Method</dt><dd>{req.getMethod()}</dd>
            <dt>Request URI</dt><dd>{req.getRequestURI()}</dd>
            <dt>Protocol</dt><dd>{req.getProtocol()}</dd>
            <dt>PathInfo</dt><dd>{req.getPathInfo()}</dd>
            <dt>Query String</dt><dd>{req.getQueryString()}</dd>
            <dt>Remote Address</dt><dd>{req.getRemoteAddr()}</dd>
          </dl>
        </body>
      </html>

    res.setContentType("text/html; charset=utf-8")
    res.getWriter.print(content)
  }
}

あとは HelloWorld と同じように web.xml を書いて、http://localhost:8080/sandbox/RequestInfo にブラウザでアクセスすれば、Tomcat へのリクエスト情報が確認できる。おけおけ。URI の後ろに ?hogehoge と付け足せば Query String が hogehoge となるし、/hogehoge と付け足せば、PathInfo が、

あれ 404 ?

あ、そーか、~/Sandbox/java/servlet/WEB-INF/classes/RequestInfo.class に対応するのは、http://localhost:8080/sandbox/RequestInfo であって、http://localhost:8080/sandbox/RequestInfo/hogehoge なんつー URI は知らん、ということね。もとの servlet-example はどーしてんのかなぁ、と見てみたら、単に web.xml の url-pattern にワイルドカードを使うだけみたい。

そんなわけで、web.xml はこうなる。前回までの servlet についても書いてあるんだけど省略。

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">

  <servlet>
    <servlet-name>RequestInfo</servlet-name>
    <servlet-class>RequestInfo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RequestInfo</servlet-name>
    <url-pattern>/RequestInfo/*</url-pattern>
  </servlet-mapping>

</web-app>

つか、このパターンで /sandbox/RequestInfo もマップされるのね。