JSP にアクセスしようとしたら(コンパイルもされずに:表示までの時間に注意)Tomcat からエラーコード 500 (Internal Server Error) が返ってくる。メッセージは次のような感じ。
: org.apache.jasper.JasperException: ????/WEB-INF/web.xml?XML?????: (? 11, ? 16) : org.xml.sax.SAXParseException: The prefix "xsi" for attribute "xsi:schemaLocation" associated with an element type "web-app" is not bound. :
このような場合、web.xml の web-app 要素をチェック。
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsl="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">
この部分を、強引だとは思うがこうしてしまう。
<!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 だけ動かす場合には、前者のままでも構わない(というか、DOCTYPE も無しで
エラーの原因はよく分からない。xsi は "XML Schema Instance" の acronym ということは分かったけど内容についてはさっぱり。 XML を勉強する必要がありそうだ……。
「強引だ」というのは、Tomcat5 は Servlet API 2.4 に準拠している(というかそもそも実装参照じゃなかったっけ)のだけれど、DTD は Servlet API 2.3 のものを指しているから。