title: Tag-lib issue with Struts2 and Tomcat 8
body: <p>I have been searching for days to resolve this issue.  I have used Struts2 for years, but now I am at a new company and trying to get Struts2 set up in my development environment.  I don't have a choice as to what gets installed.  We have an extremely controlled environment so it's totally out of my hands.  However, I will attempt to install the environment on my personal computer and see what happens.</p>
  
  <p>I have Eclipse LUNA (4.4.2), Apache Tomcat 8.0.38 and Java version 1.8.0_92 installed on my workstation.  In Eclipse I have a Dynamic Web Project set up using Maven. </p>
  
  <p>In Maven I just left the configuration as provided by the tutorial.  It is bringing in javax.servlet-api v3.1.0 and struts2-core v2.3.20.  The Maven Dependencies are included in the Web Deployment Assembly.  I have checked the directory after Tomcat unpacks the WAR file.  Struts2 core is definitely there.</p>
  
  <p>I get no errors or warnings in the Eclipse project.  However when I attempt to execute the first jsp I get an error 500 from Tomcat with "Unable to find taglib "s" for URI: /struts-tags".</p>
  
  <p>My struts.xml file contains:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
  &lt;!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
  
  &lt;struts&gt;
    &lt;constant name="struts.enable.DynamicMethodInvocation"
       value="false" /&gt;
  
    &lt;constant name="struts.devMode" value="true" /&gt;
    &lt;constant name="struts.custom.i18n.resources"
        value="ApplicationResources" /&gt;
  
    &lt;package name="default" namespace="/" extends="struts-default"&gt;
        &lt;action name="login"
            class="org.o7planning.tutorial.struts2xml.action.LoginAction"&gt;
            &lt;result name="success"&gt;/WEB-INF/pages/UserInfo.jsp&lt;/result&gt;
            &lt;result name="error"&gt;/WEB-INF/pages/Login.jsp&lt;/result&gt;
        &lt;/action&gt;
    &lt;/package&gt;  
  
   &lt;/struts&gt;
  </code></pre>
  
  <p>The web.xml file contains:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/javaee"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id="WebApp_ID" version="3.0"&gt;
  
   &lt;display-name&gt;Struts2XML&lt;/display-name&gt;
  
  
   &lt;filter&gt;
     &lt;filter-name&gt;struts2&lt;/filter-name&gt;
     &lt;filter-class&gt;
               org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
     &lt;/filter-class&gt;
   &lt;/filter&gt;
  
   &lt;filter-mapping&gt;
     &lt;filter-name&gt;struts2&lt;/filter-name&gt;
     &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
   &lt;/filter-mapping&gt;
  
   &lt;welcome-file-list&gt;
     &lt;welcome-file&gt;/WEB-INF/pages/Login.jsp&lt;/welcome-file&gt;
  
  &lt;/web-app&gt;
  </code></pre>
  
  <p>And the jsp contains:</p>
  
  <pre><code>&lt;%@ page contentType="text/html; charset=UTF-8"%&gt;
  &lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;
  &lt;html&gt;
  &lt;head&gt;
  &lt;title&gt;Struts 2 - Login Application &lt;/title&gt;
  &lt;/head&gt;
  
  &lt;body&gt;
  &lt;h2&gt;Struts 2 - Login Application&lt;/h2&gt;
  &lt;s:actionerror /&gt;
  &lt;s:form action="/login" method="post"&gt;
    &lt;s:textfield name="username" key="label.username" size="20" /&gt;
    &lt;s:password name="password" key="label.password" size="20" /&gt;
    &lt;s:submit method="execute" key="label.login" align="center" /&gt;
  &lt;/s:form&gt;
  &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>Every question I have found, and there have been many, has revolved around Eclipse.  I don't have that problem.  I'm not getting any Eclipse messages regarding this and all the files appear to be in the right place. So I'm stumped!!</p>
  
  <p>Contents of the Maven pom file:</p>
  
  <pre><code>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
      &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
      &lt;groupId&gt;net.codejava.web&lt;/groupId&gt;
      &lt;artifactId&gt;SpringStrutsDemo&lt;/artifactId&gt;
      &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  
  &lt;properties&gt;
      &lt;java-version&gt;1.8&lt;/java-version&gt;
      &lt;org.springframework-version&gt;4.2.6.RELEASE&lt;/org.springframework-version&gt;
      &lt;struts2-version&gt;2.5.1&lt;/struts2-version&gt;
      &lt;javax-servlet-api-version&gt;3.1.0&lt;/javax-servlet-api-version&gt;
      &lt;javax-servlet-jsp-version&gt;2.3.1&lt;/javax-servlet-jsp-version&gt;
  &lt;/properties&gt;
  
  &lt;dependencies&gt;
      &lt;dependency&gt;
          &lt;groupId&gt;org.springframework&lt;/groupId&gt;
          &lt;artifactId&gt;spring-context&lt;/artifactId&gt;
          &lt;version&gt;${org.springframework-version}&lt;/version&gt;
      &lt;/dependency&gt;
  
      &lt;dependency&gt;
          &lt;groupId&gt;org.springframework&lt;/groupId&gt;
          &lt;artifactId&gt;spring-context-support&lt;/artifactId&gt;
          &lt;version&gt;${org.springframework-version}&lt;/version&gt;
      &lt;/dependency&gt;
  
      &lt;dependency&gt;
          &lt;groupId&gt;org.springframework&lt;/groupId&gt;
          &lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;
          &lt;version&gt;${org.springframework-version}&lt;/version&gt;
      &lt;/dependency&gt;
  
      &lt;dependency&gt;
          &lt;groupId&gt;org.apache.struts&lt;/groupId&gt;
          &lt;version&gt;${struts2-version}&lt;/version&gt;
      &lt;/dependency&gt;
  
      &lt;dependency&gt;
          &lt;groupId&gt;org.apache.struts&lt;/groupId&gt;
          &lt;artifactId&gt;struts2-spring-plugin&lt;/artifactId&gt;
          &lt;version&gt;${struts2-version}&lt;/version&gt;
      &lt;/dependency&gt;
  
      &lt;dependency&gt;
          &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
          &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;
          &lt;version&gt;${javax-servlet-api-version}&lt;/version&gt;
          &lt;scope&gt;provided&lt;/scope&gt;
      &lt;/dependency&gt;
  
      &lt;dependency&gt;
          &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt;
          &lt;artifactId&gt;javax.servlet.jsp-api&lt;/artifactId&gt;
          &lt;version&gt;${javax-servlet-jsp-version}&lt;/version&gt;
          &lt;scope&gt;provided&lt;/scope&gt;
      &lt;/dependency&gt;
  &lt;/dependencies&gt;
  </code></pre>
  
  <p></p>
  
  <p>List of jar files in WEB-INF/lib</p>
  
  <pre><code>aopalliance-1.0.jar
  asm-3.3.jar
  sm-commons-3.3.jar
  sm-tree-3.3.jar
  commons-fileupload-1.3.1.jar
  commons-io-2.4.jar
  commons-lang3-3.4.jar
  commons-logging-1.2.jar
  freemarker-2.3.23.jar
  javassist-3.20.0-GA.jar
  javax.servlet-api-3.1.0.jar
  javax.servlet.jsp-api-2.3.1.jar
  libs.txt
  log4j-api-2.5.jar
  ognl-3.1.8.jar
  spring-aop-4.2.6.RELEASE.jar
  spring-beans-4.2.6.RELEASE.jar
  spring-context-4.2.6.RELEASE.jar
  spring-context-support-4.2.6.RELEASE.jar
  spring-core-4.2.6.RELEASE.jar
  spring-expression-4.2.6.RELEASE.jar
  spring-web-4.2.6.RELEASE.jar
  spring-webmvc-4.2.6.RELEASE.jar
  struts2-core-2.5.1.jar
  struts2-spring-plugin-2.5.1.jar
  </code></pre>
  
  <p>I am unable to try other platforms on this machine.  What we can install is completely out of our hands.  We don't even have admin rights on our development workstations.  What I have is what I have to use.  We have a software portal that performs installs of "approved" software.  If there is a mistake in the install I have to discover it, prove it and go to the support group and request a fix.</p>