Tag-lib issue with Struts2 and Tomcat 8
<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>