Servletを作る
Eclipseインストールとか
- Tomcat6
- http://tomcat.apache.org/
- $HOME/とかに展開するだけでOK
- Eclipse3.4
- Tomcatプラグイン
Eclipse設定
プロジェクト作成
プログラム
WEB-INF/src/Hello.java
いや、動かしてないですけどね、、、さすがに動くはず。笑
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Hello extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse responce) throws ServletException, IOException { responce.getWriter().println("hello"); } }
注意事項
invokerサーブレット
<servlet> <servlet-name>invoker</servlet-name> <servlet-class> org.apache.catalina.servlets.InvokerServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> ... <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> ...
- んでもってTomcat6の場合は、Tomcat起動時に下記エラーが出るので
致命的: 設定記述子 .xml を配備中のエラーです java.lang.SecurityException: クラス org.apache.catalina.servlets.InvokerServlet のサーブレットは特権を与えられているので、このWebアプリケーションによってロードできません at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1145) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1217) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590) at java.lang.Thread.run(Thread.java:619)
$TOMCAT_HOME/conf/context.xmlを編集して、Contextにprivileged="true"を追加
<Context privileged="true">
日本語を表示させる
conf/server.xmlのConnectorに下記を追加します。
<Connector port="8080" ... UseBodyEncodingForURI="true" URIEncoding="UTF-8" />
http://tomcat.apache.org/tomcat-6.0-doc/config/http.htmlより。英訳は適当ですので、ぜひ原本を見てください。
- URIEncoding
- UseBodyEncodingForURI
Trueを指定すると、GETパラメータ使用時、URIEncodingの代わりにcontentTypeで指定した文字エンコーディングが使用されます。
Tomcat 4.1.xの互換設定で、contentTypeや明示的にRequest.setCharacterEncodingが指定された時にURLのGETパラメータに使用されます。デフォルトはfalse。
URIEncodingを指定しておけば、その指定も文字コード以外はRequest.setCharacterEncodingで指定しても反映されないようなので、やはりUseBodyEncodingForURIも指定する必要があるのかもしれません。
が、詳しくはよくわかりませんでした。
サーブレットAPIのソースを見る
http://tomcat.apache.org/download-60.cgiより、Source Code Distributions > zipファイルのダウンロード。
その後、ダウンロードしたファイルを$TOMCAT_HOME/に移動させ、Eclipseから宣言ジャンプ時に「Atatch Source」を押下し、先ほどのzipファイルを指定する。