Борьба с Jetty 9.4 рендеринг JSP - PullRequest
0 голосов
/ 06 июля 2018

Привет всем,

Я борюсь с причалом. выше пристани 9.1. В настоящее время я пытаюсь с Jetty 9.4, который самый последний. Я могу скомпилировать старый код с новым, но там Есть несколько проблем с миграцией, которые я пытаюсь исправить. Да это так тяжелая работа, но выбора не осталось. Я в настоящее время фокусируюсь, чтобы сделать старые страницы JSP после миграции на Jetty 9.4. Вот образец код, я упомянул проблему в посте ниже. Помоги мне с Вы предлагаете или что-то еще, поскольку я изо всех сил пытаюсь решить эту проблему, так как неделю сейчас. Просто добавление необходимого набора кода из-за ограничения слов.

JettyServer Sample Code : 


public class JettyServer extends AbstractService implements IJettyServer, IStatus {


    @Override
    public void initialize(final ServiceConfiguration genericConfig, final Controller controller, final int serviceId,
        final ServiceLock lock) throws Exception {
        if (genericConfig instanceof JettyServerConfiguration) {
            configuration = (JettyServerConfiguration) genericConfig;
        } else {
            configuration = XmlConfigurable.createInstance(JettyServerConfiguration.class,
                    genericConfig.getXmlConfigElement());
        }

        server = new Server();
        log.info("jetty version = " + Server.getVersion()); //frozen

        maxWaitForSlave = getConfiguration().getMaxWaitForSlave();

        final boolean debug = getConfiguration().getMortBayDebug();
        log.info("Eclipse mortbay debug = '" + debug + "'"); //frozen
        org.eclipse.jetty.util.log.Log.getLog().setDebugEnabled(debug);

        // Configure http
        final boolean httpEnabled = getConfiguration().getHttpEnabled();

        if (httpEnabled) {
            final int mainPort = getConfiguration().getHttpPort();

            log.info("adding default connector on port '" + mainPort + "'"); 
            HttpConfiguration httpConf = new HttpConfiguration();
            httpConf.setSecurePort(mainPort);
            httpConf.setSecureScheme("https");

            // Establish the HTTP ServerConnector
            ServerConnector httpConnector = new ServerConnector(server, new HttpConnectionFactory(httpConf));
            httpConnector.setPort(mainPort);
            server.addConnector(httpConnector);
        }



        // Configure the handlers
        final HandlerCollection handlers = new HandlerCollection();

        //4. Enabling the Annotation based configuration
        org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server);
        classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
            "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration");
        classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
            "org.eclipse.jetty.annotations.AnnotationConfiguration");

        for (final WebAppContext webAppContext : getConfiguration().getWebAppContexts()) {
            log.info("Adding WebAppContext " + webAppContext.getWar() + " at " + webAppContext.getContextPath()); //frozen

            webAppContext.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
                ".*/[^/]*jstl.*\\.jar$");
            handlers.addHandler(webAppContext);
        }

        final boolean accessLogEnabled = getConfiguration().getLogEnabled();



        handlers.addHandler(new DefaultHandler());

        server.setHandler(handlers);

        // server.setUserRealms(new UserRealm[] { new OSMUserRealm() });
        // server.addBean(new LoginService[] { new OSMUserRealm() });

        // HashLoginService loginService = new HashLoginService();
        //loginService.setName("osmRealm");
        //server.addBean(loginService);

        // log.info("initialize...." + loginService.getName());
        JettyServerInfo.install(server);

        super.initialize(configuration, controller, serviceId, lock);
    }

    @Override
    public JettyServerConfiguration getConfiguration() {
        return (JettyServerConfiguration) super.getConfiguration();
    }

    @Override
    public synchronized void start() throws Exception {
        log.info("start()"); //frozen

        registerJetty();

        server.start();

        // finish startup which registers with the controller
        super.start();

        server.join(); //For Jetty 9.3 and above

        log.info("After Jetty 9.3 Services starts..");
    }

    private void registerJetty() throws RemoteException, AlreadyBoundException, AlreadyBoundException {
        final Registry registry = LocateRegistry.getRegistry("127.0.0.1", registryPort); //frozen

        final Remote remote = UnicastRemoteObject.toStub(this);
        log.info("Registering JettyServer"); //frozen
        registry.rebind(IJettyServer.JETTYSERVER_NAME, remote);
    }

   }

Класс конфигурации Jetty:

package com.osm.services.webservice;

import java.io.File;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import org.eclipse.jetty.webapp.WebAppContext;

import org.w3c.dom.Element;

import com.osm.services.configuration.ManagerServiceConfiguration;


public class JettyServerConfiguration extends ManagerServiceConfiguration {


    public JettyServerConfiguration() {
    }

    @Override
    public void configure(final Element xmlConfigElement) {
        super.configure(xmlConfigElement);

        final List<Element> warElements = getChildren(WAR_TAG);

        for (final Element warElement : warElements) {
            final String context = warElement.getAttribute("context"); //frozen
            final String location = warElement.getAttribute("location"); //frozen

            if ((location != null) && !location.isEmpty()) {
                // check file is valid
                final File f = new File(location);

                if (!f.exists()) {
                    log.warning("War location '" + f.getAbsolutePath() + "' does not exists."); //frozen
                }

                final WebAppContext webAppContext = new WebAppContext();
                webAppContext.setContextPath(context);
                webAppContext.setResourceBase(f.getAbsolutePath()); //added in 9.3
                webAppContext.setWar(f.getAbsolutePath());
                webAppContext.setExtractWAR(false);

                warContexts.add(webAppContext);

                log.info("Context Path-->" + context);
                log.info("War location-->" + f.getAbsolutePath());
            } else {
                throw new IllegalStateException("War location must be specified."); //frozen
            }
        }

        maxWaitForSlaves = getChildValueAsInteger(MAX_WAIT_FOR_SLAVE_TAG, 4 * 60 * 1000);
        mortBayDebug = getChildValueAsBoolean(MORTBAY_DEBUG_TAG, false);
        httpEnabled = getChildValueAsBoolean(HTTP_ENABLED_TAG, true);
        nioEnabled = getChildValueAsBoolean(NIO_ENABLED_TAG, false);
        httpPort = getChildValueAsInteger(HTTP_PORT_TAG, 8580);

        sslEnabled = getChildValueAsBoolean(SSL_ENABLED_TAG, false);
        sslPort = getChildValueAsInteger(SSL_PORT_TAG, 8581);
        sslKeyPassword = getChildValue(SSL_KEY_PASSWORD_TAG);
        sslKeyStore = getChildValue(SSL_KEY_STORE_TAG);
        sslPassword = getChildValue(SSL_PASSWORD_TAG);
        sslTrustPassword = getChildValue(SSL_TRUST_PASSWORD_TAG);

        logEnabled = getChildValueAsBoolean(ACCESS_LOG_ENABLED_TAG, true);
        logFormat = getChildValue(ACCESS_LOG_FORMAT_TAG, "logs/access_logs/yyyy_mm_dd.access.log"); //frozen
        logRetain = getChildValueAsInteger(ACCESS_LOG_RETAIN_TAG, 90);
        logAppend = getChildValueAsBoolean(ACCESS_LOG_APPEND_TAG, true);
        logExtended = getChildValueAsBoolean(ACCESS_LOG_EXTENDED_TAG, false);
        logLatency = getChildValueAsBoolean(ACCESS_LOG_LATENCY_TAG, false);
        logTz = getChildValue(ACCESS_LOG_TZ_TAG, "GMT"); //frozen

        log.info("End of Configuration..");
    }




 @Override
    public String prettyPrint() {
        final String s = super.prettyPrint();

        final StringBuilder str = new StringBuilder();
        str.append(s);
        str.append("------------- WebApps \n"); //frozen
        str.append(String.format("%-40s%s\n", "Context", "WarFile")); //frozen

        for (final WebAppContext webapp : warContexts) {
            str.append(String.format("%-40s%s\n", webapp.getContextPath(), webapp.getWar())); //frozen
        }

        return str.toString();
    }
}

Журналы выполнения:

INFO    17:11:46 05/07/2018 [com.osm.services.launcher.ServiceLauncher] ServiceId = 3
SEVERE  17:11:46 05/07/2018 [stderr]    2018-07-05 17:11:46.936:INFO::main: Logging initialized @821ms to org.eclipse.jetty.util.log.StdErrLog
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServerConfiguration]  Context Path-->/mmweb
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServerConfiguration]  War location-->C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServerConfiguration]  Context Path-->/
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServerConfiguration]  War location-->C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\OSMWebServices.war
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServerConfiguration]  End of Configuration..
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServer]   jetty version = 9.4.5.v20170502
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServer]   Eclipse mortbay debug = 'false'
INFO    17:11:46 05/07/2018 [com.osm.services.webservice.JettyServer]   adding default connector on port '8580'
INFO    17:11:47 05/07/2018 [com.osm.services.webservice.JettyServer]   Adding WebAppContext C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb at /mmweb
INFO    17:11:47 05/07/2018 [com.osm.services.webservice.JettyServer]   Adding WebAppContext C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\OSMWebServices.war at /
INFO    17:11:47 05/07/2018 [com.osm.services.webservice.JettyServer]   initialize....osmRealm
INFO    17:11:47 05/07/2018 [com.osm.services.launcher.ServiceLauncher] Configuration 'JettyServer' : 
------------- XML configuration values
AccessLogAppend:                        true
AccessLogEnabled:                       true
AccessLogExtended:                      false
AccessLogFormat:                        logs/access_logs/yyyy_mm_dd.access.log
AccessLogLatency:                       false
AccessLogRetainDays:                    90
AccessLogTimeZone:                      GMT
AdditionalClasspath:                    jar\\jetty\\*
Executable:                             DreoJettyServer.exe
FileHandlerLogLevel:                    FINE
HttpEnabled:                            true
HttpPort:                               8580
JvmArgs:                                -Xms16m -Xmx128m -Djava.rmi.server.hostname=localhost
LogAppend:                              false
MaxLogFileSizeInMB:                     0
MortBayDebug:                           false
SslEnabled:                             false
SslPort:                                8581
StartupTimeoutInMinutes:                5

------------- Configuration class properties
classpath:                              classes;jar\*;jar\custom\*;jar\\jetty\\*
configurationFile:                      custom.xml
debugOptions:                           
defaultUser:                            medmgr
enabled:                                true
executable:                             DreoJettyServer.exe
fileHandlerLevel:                       FINE
httpEnabled:                            true
httpPort:                               8580
javaClass:                              com.osm.services.webservice.JettyServer
jvmArgs:                                -Xms16m -Xmx128m -Djava.rmi.server.hostname=localhost
logAppend:                              false
logEnabled:                             true
logExtended:                            false
logFormat:                              logs/access_logs/yyyy_mm_dd.access.log
logLatency:                             false
logLevels:                              {=INFO, com.osm.ws.QueryService=FINE, com.osm.webservices.legacy.FileService=FINE, com.osm.webservices.legacy.OSMService=FINE, com.osm.webservices.legacy.servlets=FINE, com.osm.ws.UpdateService=FINE}
logRetain:                              90
logTz:                                  GMT
maxLogFileSizeInMB:                     0
maxWaitForSlave:                        240000
mortBayDebug:                           false
nioEnabled:                             false
runLevel:                               5.0
serviceName:                            JettyServer
sslEnabled:                             false
sslPort:                                8581
startupTimeoutInMinutes:                5
webAppContexts:                         [o.e.j.w.WebAppContext@4b553d26{/mmweb,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/mmweb/,UNAVAILABLE}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb}, o.e.j.w.WebAppContext@69a3d1d{/,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/OSMWebServices.war,UNAVAILABLE}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\OSMWebServices.war}]
------------- WebApps 
Context                                 WarFile
/mmweb                                  C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb
/                                       C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\OSMWebServices.war


INFO    17:11:47 05/07/2018 [com.osm.services.webservice.JettyServer]   start()
INFO    17:11:47 05/07/2018 [com.osm.services.webservice.JettyServer]   Registering JettyServer
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.092:INFO:oejs.Server:main: jetty-9.4.5.v20170502
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.217:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=6ms
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.264:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.264:INFO:oejs.session:main: No SessionScavenger set, using defaults
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.264:INFO:oejs.session:main: Scavenging every 660000ms
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.264:WARN:oejs.SecurityHandler:main: ServletContext@o.e.j.w.WebAppContext@4b553d26{/mmweb,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/mmweb/,STARTING}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb} has uncovered http methods for path: /css/*
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.264:WARN:oejs.SecurityHandler:main: ServletContext@o.e.j.w.WebAppContext@4b553d26{/mmweb,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/mmweb/,STARTING}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb} has uncovered http methods for path: /*
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.264:WARN:oejs.SecurityHandler:main: ServletContext@o.e.j.w.WebAppContext@4b553d26{/mmweb,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/mmweb/,STARTING}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb} has uncovered http methods for path: /js/*
SEVERE  17:11:47 05/07/2018 [stderr]    2018-07-05 17:11:47.264:WARN:oejs.SecurityHandler:main: ServletContext@o.e.j.w.WebAppContext@4b553d26{/mmweb,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/mmweb/,STARTING}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb} has uncovered http methods for path: /style/*
INFO    17:11:47 05/07/2018 [com.sun.xml.ws.server.http]    WSSERVLET12: JAX-WS context listener initializing
WARNING 17:11:47 05/07/2018 [com.sun.xml.ws.wsdl.PayloadQNameBasedOperationFinder]  Non unique body parts! In a port, as per BP 1.1 R2710 operations must have unique operation signature on the wire for successful dispatch. Methods [getGroups, getUsers, getUsersAndGroups, getRoutingLists, helpAbout] have the same request body block . Method dispatching may fail, runtime will try to dispatch using SOAPAction. Another option is to enable AddressingFeature to enabled runtime to uniquely identify WSDL operation using wsa:Action header.
WARNING 17:11:47 05/07/2018 [com.sun.xml.ws.wsdl.PayloadQNameBasedOperationFinder]  Non unique body parts! In a port, as per BP 1.1 R2710 operations must have unique operation signature on the wire for successful dispatch. Methods [getGroups, getUsers, getUsersAndGroups, getRoutingLists, helpAbout] have the same request body block . Method dispatching may fail, runtime will try to dispatch using SOAPAction. Another option is to enable AddressingFeature to enabled runtime to uniquely identify WSDL operation using wsa:Action header.
WARNING 17:11:47 05/07/2018 [com.sun.xml.ws.wsdl.PayloadQNameBasedOperationFinder]  Non unique body parts! In a port, as per BP 1.1 R2710 operations must have unique operation signature on the wire for successful dispatch. Methods [getGroups, getUsers, getUsersAndGroups, getRoutingLists, helpAbout] have the same request body block . Method dispatching may fail, runtime will try to dispatch using SOAPAction. Another option is to enable AddressingFeature to enabled runtime to uniquely identify WSDL operation using wsa:Action header.
INFO    17:11:48 05/07/2018 [com.sun.xml.ws.servlet.http]   WSSERVLET14: JAX-WS servlet initializing
SEVERE  17:11:48 05/07/2018 [stderr]    2018-07-05 17:11:48.296:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@4b553d26{/mmweb,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/mmweb/,AVAILABLE}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\mmweb}
SEVERE  17:11:48 05/07/2018 [stderr]    2018-07-05 17:11:48.311:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=0ms
SEVERE  17:11:48 05/07/2018 [stderr]    2018-07-05 17:11:48.327:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@69a3d1d{/,file:///C:/Program%20Files/RTC/Dreo%20Elements/Direct%20Manager%20Server%2020.1/webapps/OSMWebServices.war,AVAILABLE}{C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\webapps\OSMWebServices.war}
SEVERE  17:11:48 05/07/2018 [stderr]    2018-07-05 17:11:48.327:INFO:oejs.AbstractNCSARequestLog:main: Opened C:\Program Files\RTC\Dreo Elements\Direct Manager Server 20.1\logs\access_logs\2018_07_05.access.log
SEVERE  17:11:48 05/07/2018 [stderr]    2018-07-05 17:11:48.433:INFO:oejs.AbstractConnector:main: Started ServerConnector@1b1637e1{HTTP/1.1,[http/1.1]}{0.0.0.0:8580}
SEVERE  17:11:48 05/07/2018 [stderr]    2018-07-05 17:11:48.433:INFO:oejs.Server:main: Started @2313ms
INFO    17:11:58 05/07/2018 [com.osm.services.webservice.JettyServer]   registered(JettySlave2) (ID=5)
INFO    17:12:06 05/07/2018 [com.osm.services.webservice.JettyServer]   registered(JettySlave1) (ID=6)

Все остальные детали были такими же в Jetty 6.1, кроме этой строки:

webAppContexts:

[org.mortbay.jetty.webapp.WebAppContext@5792a0 {/ mmweb, C: \ Program Files (x86) \ RTC \ Dreo Elements \ Direct Manager Server 20.0 \ webapps \ mmweb}, org.mortbay.jetty.webapp .WebAppContext @ 653222 {/, C: \ Program Files (x86) \ RTC \ Dreo Elements \ Direct Manager Server 20.0 \ webapps \ OSMWebServices.war}]

Просто игнорируйте путь mmweb, это другой каталог.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю на ссылку для страницы JSP, я получить ошибку, как показано ниже, который я не получал в более ранней пристани 6,1

Caused by:
javax.servlet.ServletException: org.apache.jasper.JasperException: An exception occurred processing JSP page /include/header.jsp at line 8

5: String style = (String)session.getAttribute("style");
6: if(style==null) {
7:     // controls default style
8:     style = WebConfig.getInstance(getServletContext()).getOption("DefaultTheme");
9:     session.setAttribute("style", style);
10: }
11: 

Stacktrace:
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:564)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
    at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
    at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:126)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.jasper.JasperException: An exception occurred processing JSP page /include/header.jsp at line 8

JSP содержит скриптлет, пожалуйста, не обращайте внимания на то, что я использую скриптлет здесь. Просто пытаюсь показать вам актуальную проблему.

<%@page import="com.osm.jsp.util.WebConfig"%>
<%
request.setAttribute("start.time", (Long)System.currentTimeMillis());

String style = (String)session.getAttribute("style");
if(style==null) {
    // controls default style
    style = WebConfig.getInstance(getServletContext()).getOption("DefaultTheme");
    session.setAttribute("style", style);
}

final String header = "style/" + style + "/header.jsp";
%>
<%@taglib prefix="osm" uri="/WEB-INF/tlds/Manager.tld" %>
<osm:license writeAccess="false"/>
<jsp:include page="<%=header%>"/>

Я не думаю, что это имеет какое-либо отношение к зависимости, так как даже отображение версии Jetty приводит к тому же виду ошибки. Но он получает визуализацию, когда я удаляю вызов импорта и версии JettyServer, то есть обнаруживаются только системные библиотеки .

<%@page import="java.util.ArrayList"%>
<%@page import="org.eclipse.jetty.*"%>
<%@page import="org.eclipse.jetty.server.Server"%>
<html>

<head>
<title>Sample JSP Page</title>
</head>

<body>


    <%-- This is a JSP comment --%>

    <br /> 
    Current date is: <%=new java.util.Date()%>
<tr><th>Server Version:</th><td><%= Server.getVersion() %></td></tr>


</body>
</html>

Вот банки, которые я использовал в classpath:

C:\Users\vkarn\.m2\repository\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar
C:\Users\vkarn\.m2\repository\junit\junit\4.12\junit-4.12.jar
C:\Users\vkarn\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-annotations\9.4.5.v20170502\jetty-annotations-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-plus\9.4.5.v20170502\jetty-plus-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-jndi\9.4.5.v20170502\jetty-jndi-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\javax\annotation\javax.annotation-api\1.2\javax.annotation-api-1.2.jar
C:\Users\vkarn\.m2\repository\org\ow2\asm\asm\5.1\asm-5.1.jar
C:\Users\vkarn\.m2\repository\org\ow2\asm\asm-commons\5.1\asm-commons-5.1.jar
C:\Users\vkarn\.m2\repository\org\ow2\asm\asm-tree\5.1\asm-tree-5.1.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-webapp\9.4.5.v20170502\jetty-webapp-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-xml\9.4.5.v20170502\jetty-xml-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-servlet\9.4.5.v20170502\jetty-servlet-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-security\9.4.5.v20170502\jetty-security-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-server\9.4.5.v20170502\jetty-server-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-http\9.4.5.v20170502\jetty-http-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-io\9.4.5.v20170502\jetty-io-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\apache-jsp\9.4.5.v20170502\apache-jsp-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\jetty-util\9.4.5.v20170502\jetty-util-9.4.5.v20170502.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jetty\toolchain\jetty-schemas\3.1\jetty-schemas-3.1.jar
C:\Users\vkarn\.m2\repository\org\mortbay\jasper\apache-jsp\8.5.9.1\apache-jsp-8.5.9.1.jar
C:\Users\vkarn\.m2\repository\org\mortbay\jasper\apache-el\8.5.9.1\apache-el-8.5.9.1.jar
C:\Users\vkarn\.m2\repository\org\eclipse\jdt\core\compiler\ecj\4.4.2\ecj-4.4.2.jar
C:\Users\vkarn\.m2\repository\org\apache\taglibs\taglibs-standard-spec\1.2.5\taglibs-standard-spec-1.2.5.jar
C:\Users\vkarn\.m2\repository\org\apache\taglibs\taglibs-standard-impl\1.2.5\taglibs-standard-impl-1.2.5.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...