Took me a day and a couple experiments to figure out what went wrong. Maven web application archetype creates project for J2EE 1.3 and has a web.xml with web-app_2_3.dtd, which seems to be the cause why JSTL is not working.
<!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> <display-name>Archetype Created Web Application</display-name> </web-app>
The solution? Simply copy over a web.xml in web-app_2_5.dtd seems to fix the problem.
<⁞?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
I am surprised that I cannot find a solution by searching the net, either I am very bad at search or the problem is too obvious to fix. Anyhow, hope this post would help people like me.