Tomcat отображает статус ошибки 404 после развертывания войны - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в Tomcat, и следующая проблема доставляет мне трудности.Итак, я сделал очень простой проект сервлета, который работает на glassfish, jetty и wildfly, но он не работает на tomcat, когда я развертываю его как файл войны (он работает с развертыванием внешнего контекста).

Когда я запускаю tomcat, я использую менеджер для развертывания файла войны, и все работает, я могу получить доступ к недавно развернутому сервлету без проблем.Проблемы начинаются, когда я закрываю tomcat и запускаю его снова (после обычной процедуры закрытия из xampp или полного перезапуска компьютера).После этого при работающем предыдущем файле war я пытаюсь запустить что-нибудь на localhost: 8080, и ни одна страница не работает.Даже страница приветствия, страница менеджера или сам сервлет - все, что дает мне статус ошибки 404.

В журналах я получаю следующие ошибки

SEVERE: завершение события вызвало исключениеjava.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet в org.apache.tomcat.util.IntrospectionUtils.callMethod1 (IntrospectionUtils.java:849) в org.apache.teeg.SetNextRule.java:201) в org.apache.tomcat.util.digester.Digester.endElement (Digester.java:1063) в com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement (AbstractSAXParser.j:609) по адресу com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement (XMLDocumentFragmentScannerImpl.java:1782) по адресу com.sun.org.apache.xerces.internal.impl.XMLDocumentFmpan.Java: 2967) на com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (XMLDocumentScannerImpl.java: 602) на com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument (XMLDocumentFragmentScannerImpl.java:505) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.farJava: 842) в com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:771) в com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.Java: 141) на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1213) на com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXarSar (SAXParserImpl.java:643) в org.apache.tomcat.util.digester.Digester.parse (Digester.java:1561) в org.apache.catalina.startup.ContextConfig.parseWebXml (ContextConfig.java:1825) в org.ap.catalina.startup.ContextConfig.getDefaultWebXmlFragment (ContextConfig.java:1480) в org.apache.catalina.startup.ContextConfig.webConfig (ContextConfig.java:1257) в org.apache.catalina.startup.configureart (ContextConfig.java:889) в org.apache.catalina.startup.ContextConfig.lifecycleEvent (ContextConfig.java:386) в org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:11ap) в org.catalina.util.LifecycleBase.fireLifecycleEvent (LifecycleBase.java:90) в org.apache.catalina.core.StandardContext.startInternal (StandardContext.java:5380) в org.apache.catalina.util.LifecycleBase.start (LifecycleBase: 150) в org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:901) в org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:877) в org.apache.catalina.core.StandardHost.addChild (StandardHost.java:649) в org.apache.catalina.startup.HostConfig.deployWAR (HostConfig.java:1083) в org.apache.catalina.startup.HostConfig $ DeployWar.run (HostConfig.java:18)в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) вjava.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в java.lang.Thread.run (Thread.java:748)

12 декабря 2018 14:11:11 org.apache.catalina.startup.ContextConfig parseWebXml SEVERE: ошибка синтаксического анализа в файле web.xml приложения в файле: / C: /xampp/tomcat/conf/web.xml org.xml.sax.SAXParseException;systemId: file: / C: /xampp/tomcat/conf/web.xml;номер строки: 114;номер столбца: 15;Ошибка в (114, 15): org.apache.catalina.deploy.WebXml addServlet в org.apache.tomcat.util.digester.Digester.createSAXException (Digester.java:2711) в org.apache.tomcat.util.digester.Digester.createSAXException (Digester.java:2743) в org.apache.tomcat.util.digester.Digester.endElement (Digester.java:1066) в com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement (AbstractSAXParser.java:609) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement (XMLDocumentFragmentScannerImpl.java:1782) в com.sun.org.apache.xerces.XScgment.rampraImpraImpImplIntдалее (XMLDocumentFragmentScannerImpl.java:2967) по адресу com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (XMLDocumentScannerImpl.java:602) по адресу com.sun.org.apache.xerces.internal.implanFra .ScMLscanDocument (XMLDocumentFragmentScannerImpl.java:505) в com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:842) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:771) на com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:141) на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1213) на com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPS.parse (SAXParserImpl.java:643) в org.apache.tomcat.util.digester.Digester.parse (Digester.java:1561) в org.apache.catalina.startup.ContextConfig.parseWebXml (ContextConfig.java:1825) в org.apache.catalina.startup.ContextConfig.getDefaultWebXmlFragment (ContextConfig.java:1480) при org.apache.catalina.startup.ContextConfig.webConfig (ContextConfig.java:1257) в org.apache.catalina.startup.ContextConfig.configureStart (ContextConfig.java: 889) в org.apache.catalina.startup.ContextConfig.lifecycleEvent (ContextConfig.java:386) в org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:117) в org.apache.catalina.util.LifecycleBase.fireLifecycleEvent (LifecycleBase.java:90) в org.apache.catalina.core.StandardContext.startInternal (StandardContext.java:5380) в org.apache.catalina.util.LifecycleBase.start (LifecycleBase.j.150) в org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:901) в org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:877) в org.apache.catalina.core.Standard.addChild (StandardHost.java:649) в org.apache.catalina.startup.HostConfig.deployWAR (HostConfig.java:1083) в org.apache.catalina.startup.HostConfig $ DeployWar.run (HostConfig.java:1879)java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.FutureTask.run (FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker (поток)1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в java.lang.Thread.run (Thread.java:748). Вызывается: java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet в org.apache.tomcat.util.IntrospectionUtils.callMethod1 (IntrospectionUtils.java:849) в org.apache.tomcat.util.digester.SetNextRule.end (SetNext.ule) в org.apache.tomcat.util.digester.Digester.endElement (Digester.java:1063) ... еще 30

Вот мой код сервлета:

LoginSuccesAdmin

@WebServlet(name = "succesAdmin", urlPatterns = { "/succesAdmin" })
public class LoginSuccesAdmin extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doPost(req, resp);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String usr = request.getParameter("userName");
        String pass = request.getParameter("userPass");
        System.out.println(usr + " " + pass);
        out.print("Welcome " + usr + " ");
        out.print("Your password is: " + pass);
        response.setStatus(200);
        out.close();
    }

}

LoginSuccesServlet

@WebServlet(name = "succesServlet", urlPatterns = { "/succesServlet" })
public class LoginSuccesServlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        doPost(req, resp);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String usr = request.getParameter("userName");
        System.out.println(usr);
        out.print("Welcome " + usr);
        response.setStatus(200);
        out.close();
    }

}

LoginUser

@WebServlet(name = "loginServlet", urlPatterns = { "/loginServlet" })
public class LoginUser extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        doPost(req, resp);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<html>\n" +
                "  <form action=\"loginServlet\" method=\"post\">");
        out.println("Name:<input type=\"text\" name=\"userName\"/><br/>\n" +
                "      Password:<input type=\"password\" name=\"userPass\"/><br/>\n" +
                "      <input type=\"submit\" name=\"press\" value=\"login\"/>");
        out.println("  </form>\n" +
                "</html>");

        String press = request.getParameter("press");
        if (press == null) {
            //no button has been selected
        } else if (press.equals("login")) {
            String userName = request.getParameter("userName");
            String userPass = request.getParameter("userPass");

            if (userName.equals("servlet") && userPass.equals("servlet")) {
                RequestDispatcher rd=request.getRequestDispatcher("succesServlet");
                if(rd == null) {
                    response.sendError(404);
                    return;
                }
                rd.forward(request, response);
            } else if (userName.equals("admin") && userPass.equals("admin")) {
                RequestDispatcher rd=request.getRequestDispatcher("succesAdmin");
                if(rd == null) {
                    response.sendError(404);
                    return;
                }
                rd.forward(request, response);
            } else {
                out.print("Wrong username or password");
            }
        }
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1"
         metadata-complete="false">
</web-app>

build.gradle

    plugins {
    id 'java'
    id 'war'
    id 'application'
}

group 'LoginServletTJAP'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    providedCompile 'javax.servlet:javax.servlet-api:+'
    compile 'org.eclipse.jetty:jetty-server:9.0.0.RC2'
    compile 'org.eclipse.jetty:jetty-servlet:9.0.0.RC2'
    compile 'org.apache.tomcat:tomcat-catalina:7.0.41'
    compile 'org.apache.tomcat:tomcat-util:7.0.41'
    compile 'org.apache.tomcat.embed:tomcat-embed-core:7.0.41'
}


sourceSets {
    main {
        java {
            srcDirs = ['src']
        }
    }
}

war {
    webInf { from 'src' } // adds a file-set to the WEB-INF dir.
    webXml = file('web/WEB-INF/web.xml') // copies a file to WEB-INF/web.xml
}

war.doLast {
    ant.unzip(src: war.archivePath, dest: "$buildDir/exploded")
}

jar {
    manifest {
        attributes(
                'Main-Class': 'Main'
        )
    }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}

task(selectServer, dependsOn: 'classes', type: JavaExec) {
    main = 'Main'
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
}

defaultTasks 'selectServer'

Я попытался переустановить xampp, создать новый проект, развернуть его, скопировав войну в веб-приложениях самостоятельно (без использования менеджера).Сервлет отлично работает во всем, включая встроенный Tomcat и Jetty встроенный, а также, как я сказал, используя внешний контекст, но он работает не только на Tomcat, просто развернув файл .war.В tomcat я ничего не изменил, кроме развертывания войны и добавления пользователя с ролью manager-gui.Все остальное - настройки по умолчанию для кота xampp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...