2017-07-24 2 views
0

Ich habe 3 jquery tabs. Wenn ich auf die Registerkarte Start klicke, meldet die Firefox-Konsole "GET http://localhost:8080/MedAI/jsp/homeTab.jsp [404 Not Found]".
Warum? Hier ist Code-Schnipsel aus index.jspjquery Registerkarte nicht gefunden

<div id="tabs"> 
<ul> 
    <li><a href="jsp/homeTab.jsp">Home</a></li> 
    <li><a href="<c:url value='jsp/geneNetworkTab' />">Gene Network</a></li> 
    <li><a href="<c:url value='jsp/diseaseNetworkTab' />">Disease Network</a></li> 
</ul> 
</div> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
     $('#tabs') 
      .tabs() 
     });  
    </script> 

Mein homeTab.jsp existiert in NetBeans-Projekt bei medai/WebPages/Web-INF/jsp/homeTab.jsp. Es zeigt nur "Hallo Welt".

Ich versuchte es mit JSTL-Methode und Straight-URL-Methode, sowohl mit als auch ohne die JSP-Erweiterung. Nichts funktioniert. Warum wird es das nicht finden?

Dispatcher-servlet.xml

<?xml version='1.0' encoding='UTF-8' ?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> 

    <!-- 
    Most controllers will use the ControllerClassNameHandlerMapping above, but 
    for the index controller we are using ParameterizableViewController, so we must 
    define an explicit mapping for it. 
    --> 
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="index.htm">indexController</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp" /> 

    <!-- 
    The index controller. 
    --> 
    <bean name="indexController" 
      class="org.springframework.web.servlet.mvc.ParameterizableViewController" 
      p:viewName="index" /> 

</beans> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" 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"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>redirect.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

Antwort

0

Es dauerte Tage der Forschung und Versuch und Irrtum, aber ich habe es endlich bekommen. Ich hasse Frühling! Es ist der verwirrendste nicht intuitive Rahmen, mit dem ich je gearbeitet habe.

Hier mein NetBeans Projektstruktur ist:

enter image description here

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" 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"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>2</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

ich mit dem URL-Muster täuschen um einfach versuchen "/" an die Arbeit, aber konnte nicht. Habe den Fehler 404 nicht gefunden gefunden.

Beachten Sie, dass index.jsp das einzige JSP außerhalb von WEB-INF ist. Das ist der Landepunkt, wenn Sie im Browser "http://localhost:8084/MedAI/" eingeben.

Es landet dort wegen der

<welcome-file>index.jsp</welcome-file> 

Dispatcher-servlet.xml

<?xml version='1.0' encoding='UTF-8' ?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/> 
    <context:annotation-config /> 
    <context:component-scan base-package="com.tekknow.medai" /> 
    <mvc:annotation-driven /> 

    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp" /> 
</beans> 

Jede URL mit der Endung * .htm wird wegen der Bahn an den Dispatcher-Servlet gesendet. XML-URL-Muster. Die Bean "viewResolver" fordert dann auf, nach dem Namen (ohne die Erweiterung .htm und die Erweiterung .jsp) im Ordner WEB-INF/jsp zu suchen.

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>MedAI - Medical Artifical Intelligence</title> 
     <script type="text/javascript" src="resources/js/jquery.js"></script>  
     <script type="text/javascript" src="resources/js/jquery-ui.js"></script> 
</script>   
     <link href="resources/css/jquery-ui.css" rel="stylesheet" type="text/css" /> 
     <link href="resources/css/medai.css" rel="stylesheet" type="text/css" /> 
    </head> 
    <body> 
    <div class="header"> 
     <h1>MedAI</h1> 
     <span class="version">V 1.0.0</span>    
    </div> 

    <div id="tabs"> 
    <ul> 
     <li><a href="home.htm">Home</a></li> 
     <li><a href="GeneNetwork.htm">Gene Network</a></li> 
     <li><a href="DiseaseNetwork.htm">Disease Network</a></li> 
    </ul> 
    </div> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
      $('#tabs') 
       .tabs() 
      });  
     </script>  
    </body> 
</html> 

Hinweis das Ende des URL mit HTM.Wie ich bereits sagte, habe ich versucht, ohne die .htm und ein "/" im web.xml URL-Muster, aber es würde nicht funktionieren.

home.htm, GeneNetwork.htm und DiseaseNetwork.htm haben jeweils ihre eigenen Controller ähnlich wie diese:

HomeController.java

package com.tekknow.medai.controller; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
@RequestMapping("/home.htm") 
public class HomeController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String handleRequest(ModelMap modelMap) { 
     System.out.println("HomeController.handleRequest"); 
     return "home"; 
    } 
} 

Dieser sendet sie an die home.jsp Ansicht .

home.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Home</title> 
    </head> 
    <body> 
     <h1>MedAI Home</h1> 
    </body> 
</html> 

Dann endlich nach Dutzende von Stunden ... enter image description here

Hoffentlich werden alle von Ihnen die vielen vergeudeten Stunden sparen!

1

Put jsp/homeTab.jsp < ---- Dieses Verzeichnis in Ihrem WebPages Ordner und nicht Web-INF.

Ihre jsp ‚s sollte im Stammordner Ihrer WebContent, nicht in Web-INF befinden. Web-INF ist der Speicherort, an dem Java-Klassen kompiliert werden und Ihren lib und Ihren Projektdeskriptor web.xml enthalten.

+0

Ja. Sie können JSPs in das Web-Inf einfügen, sie sind jedoch nicht für direkte Anfragen zugänglich, sondern nur über ein Servlet und eine Weiterleitung. Es kann nützlich sein. –

+0

Ich habe meine web.xml und dispather-servlet.xml hinzugefügt. Beachten Sie, dass index.jsp in Ordnung ist. redirect.jsp befindet sich unter dem Ordner Webpages (NetBeans 'Äquivalent zu WebContent von Eclipse) und tut einfach "response.sendRedirect (" index.htm "); – user3217883

+0

Anscheinend ist index.htm dem Verzeichnis /WEB-INF/jsp/index.jsp zugeordnet über den indexController und viewResolver in dispather-servlet.xml Was für ein System, warum ist Spring so beliebt? – user3217883

Verwandte Themen