LoginSignup
1
1

More than 5 years have passed since last update.

JavaのWebアプリケーションでサーブレットが読み込めなかった話

Posted at

ちょっとしたデータ編集作業の用が生じ、簡易的なWebアプリケーションを作成してGUIで進めることにした。
個人的に使うので、保守性も何も気にする必要がない。とにかくさくっと作れればよい。
端末にEclipseが入っていたので、EclipseでJavaで動的Webアプリを作るぞ。ポチポチポチっとプロジェクトやServletをテンプレートから作成して、あとはにょろにょろっとコーディングじゃい。

しかしjspからajaxでJavaサーブレットにアクセスしようにも応答しない。これはおおいに困った。

web.xml
<web-app>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>TestServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
test.js
$ajax({
    url:'/testapp/test',
    type:'POST',
    data:{
        'param1':'aaa',
        'param2':'bbb'
    }
})
.done((data)=> {console.log("done!");})
.fail((data)=> {console.log("fail!");})
.always((data)=> {console.log("always!");})
TestServlet.java
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    public TestServlet() {...}
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {...}
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {...}
}
console.log
fail!
always!

どうやってもTestServletに届かず、何が原因かさっぱりわからない。
で、よくよく見たところ、TestServlet.javaを自動生成した際に入っていた @WebServlet("/TestServlet") が気になった。
やれやれ。僕は検索した。

@WebServletでURLパターンを指定

げろげろ。web.xmlってわざわざ書く必要ないのね……。
web.xmlの記述を削除して、ajaxのurlを '/testapp/TestServlet' にしたら難なく動いた。

普段フレームワークやテンプレートに頼りっきりだと化石エンジニアになってしまいますね。日頃の研鑽はいざという瞬間の開発速度に如実に現れますな。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1