2017-12-18 6 views
1

Für diese Anwendung versuche ich, Daten in eine Excel-Tabelle Benutzer apache poi Abhängigkeit in meiner pom.xml zu exportieren. Die JSP-Seite wird nicht angezeigt. Ich habe versucht, eine web.xml und eine servlet-config.xml hinzufügen und die Seite wird nicht angezeigt, stattdessen gibt es eine 404-Fehler "Keine Zuordnung gefunden für HTTP-Anfrage mit URI [/ ApplicationNameErrorCodes/report] in DispatcherServlet mit dem Namen" Dispatcher ' "Ich hatte keine Ideen mehr, ich recherchierte Google, ich schaute auf youtube nach Beispielen, und ich kann keine Lösung finden, die den Fehler behebt, damit ich die Seite richtig anzeigen und erstellen und Excel-Datei erstellen kann.Fehler beim Anzeigen der JSP-Seite und Excel-Datei 'Keine Zuordnung gefunden für HTTP-Anfrage mit URI

package applicationnameanderrorcodes.controller; 

import java.util.ArrayList; 
import java.util.List; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

import applicationnameanderrorcodes.model.ApplicationNameAndErrorCodes; 
import applicationnameanderrorcodes.view.ExcelGenerator; 

@Controller 
@RequestMapping(value = "/") 
public class ExcelController { 
    @RequestMapping(value = "/report", method = RequestMethod.GET) 
    public ModelAndView applicationAndErrorCode(HttpServletRequest request, HttpServletResponse response) { 
     String typeReport = request.getParameter("type"); 

     List<ApplicationNameAndErrorCodes> list = new ArrayList<ApplicationNameAndErrorCodes>(); 
     list.add(new ApplicationNameAndErrorCodes("Snabox", 
       "08988A", "Add Network", "Chris Avery")); 
     list.add(new ApplicationNameAndErrorCodes("Navigation", 
       "270056A", "Enter Safe Mode to Unlock", "Tim Smith")); 
     list.add(new ApplicationNameAndErrorCodes("Magic Desktop", 
       "6892077", "Reset Desktop", "Marcus James")); 
     list.add(new ApplicationNameAndErrorCodes("IFiring Portal", 
       "60112011", "Deleted extra Attribute", "Aby Martinez")); 

     if(typeReport != null && typeReport.equals("xlsx")) { 
      return new ModelAndView(new ExcelGenerator(), "listOfErrorCodes",list); 
     } 

     return new ModelAndView("excelReport", "listOfErrorCodes", list); 
    } 
} 

Servlet-config.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:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd"> 

     <mvc:annotation-driven/> 
     <mvc:default-servlet-handler/> 
     <context:component-scan base-package="applicationnameanderrorcodes.controller"/> 
    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
</beans> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4"> 
    <display-name>ApplicationNameErrorCodes</display-name> 
    <servlet> 
    <servlet-name>ApplicationNameErrorCodes</servlet-name> 
    <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/config/servlet-config.xml</param-value> 
    </init-param> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>ApplicationNameErrorCodes</servlet-name> 
    <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 
</web-app> 

excelReport.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> 
<%-- 
    Created by IntelliJ IDEA. 
    User: steven 
    Date: 12/17/17 
    Time: 8:45 PM 
    To change this template use File | Settings | File Templates. 
--%> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Report</title> 
</head> 
<body> 
    <table border="1"> 
     <thead> 
      <tr> 
       <td>Application Name</td> 
       <td>Error Codde</td> 
       <td>Resolution</td> 
       <td>User Name</td> 
      </tr> 
     </thead> 
     <tbody> 
      <c:forEach items="${listOfErrorCodes}" var="errorCode"> 
       <tr> 
        <td>errorCode.applicationName</td> 
        <td>errorCode.errorCode</td> 
        <td>errorCode.resolution</td> 
        <td>errorCode.userName</td> 
       </tr> 
      </c:forEach> 
     </tbody> 
    </table> 
    <spring:url value="/report/?type=xlsx" var="xlsxUrl" /> 
    <a href="${xlsxUrl}">Download Excel</a> 
</body> 
</html> 

Hier einige Dateien, die ich nicht sicher bin ich WebConfig brauchen. Java und ein Webinitialzer.java

package applicationnameanderrorcodes.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.view.InternalResourceViewResolver; 
import org.springframework.web.servlet.view.JstlView; 

@EnableWebMvc 
@Configuration 
@ComponentScan({"hcscapplicationerror"}) 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Bean 
    public InternalResourceViewResolver viewResolver() { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/jsp/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 
} 

WebInitializer.java

package applicationnameanderrorcodes.config; 

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[]{ WebConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] {"/"}; 
    } 
} 

pom.xml

<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"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>applicationnameanderrorcodes</groupId> 
    <artifactId>ApplicationNameErrorCodes</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <dependencies> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>4.3.0.RELEASE</version> 
    </dependency> 
    <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.3.0.RELEASE</version> 
    </dependency> 
    <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
    </dependency> 
    <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
    </dependency> 
    <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi</artifactId> 
      <version>3.15</version> 
    </dependency> 
    </dependencies> 
    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-war-plugin</artifactId> 
        <version>2.4</version> 
        <configuration> 
         <warSourceDirectory>src/main/webapp</warSourceDirectory> 
         <failOnMissingWebXml>false</failOnMissingWebXml> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</project> 
+0

Versuchen Sie die Anmerkung '@RequestMapping (value = "/") Entfernen von' 'von ExcelController' Controller. Weil es besagt, dass jede Anfrage, die von '/' nach Ihrem 'Web-Kontext' beginnt, zu diesem Controller kommen sollte. Wenn '/ ApplicationNameErrorCodes' Ihr' Web-Kontext' ist, benötigen Sie '@RequestMapping (value ="/")' nicht auf Ihrem Controller. – VPK

Antwort

0

(1) In einem Deployment-Deskriptor (web.xml) eine Spring MVC Anwendung erfordert Spring MVC Konfiguration ein Front-Controller namens Dispatcher-Servlet und ein dazugehöriges Mapping-Muster, um anzugeben, wie Anforderungen an Methodenhandler weitergeleitet werden sollen. Sie haben Ihr Dispatcher-Servlet nicht korrekt zugeordnet, da davor kein Schrägstrich (/) steht. Der Schrägstrich/zeigt an, dass Ihr Dispatcher-Servlet für das Abfangen von Anfragen aus dem Stammverzeichnis Ihrer Anwendung verantwortlich ist. Dies ist der Grund, warum die Referenz, die Sie in Ihrem Controller machen, keine Auswirkung hat. Sie können mehr herausfinden here. Unten ist ein Beispiel von official documentation

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/app-context.xml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>app</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>app</servlet-name> 
    <url-pattern>/app/*</url-pattern> 
</servlet-mapping> 

(2) auch nicht erlaubt, Ihre Deployment Descriptor vollständig definiert werden, außer Sie definiert alle Konfigurationen in der Dispatcher Servlet beabsichtigen. Um andere Ressourcen wie die Datenbankverbindung zu laden, müssen Sie einen ContextLoaderListener-Listener für Ihr Dispatcher-Servlet im conextConfigLocation des context-param-Elements der web.xml definieren. Dies sind kleine Missverständnisse. Ich schlage vor, dass Sie etwas weiter machen. reading

(3) Ein dritter Vorschlag ist, dass Sie entweder die XML- oder Java-Annotationskonfiguration verwenden und nicht beide. Die Kombination beider Methoden kann zu Fehlern führen, wenn Sie ihre Verwendung noch erlernen.

(4) Dies sollte das Problem sein: Sie haben Ihre Dispatcher-Servlet-Konfiguration (WebConfig) als root-Konfiguration übergeben. Bitte definieren Sie es richtig wie angegeben.

Paket applicationnameanderrorcodes.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebInitializer erweitert AbstractAnnotationConfigDispatcherServletInitializer {

@Override 
protected Class<?>[] getRootConfigClasses() { 
    //This is not correct, WebConfig should not be here 
    **return new Class[]{ WebConfig.class };** 
} 

@Override 
protected Class<?>[] getServletConfigClasses() { 
    //This is correct 
    return new Class[]{ WebConfig.class }; 
} 

@Override 
protected String[] getServletMappings() { 
    return new String[] {"/"}; 
} 

}

Verwandte Themen