2015-09-15 3 views
2

Я пытаюсь получить доступ к http://localhost:8080/EventTracker/greeting на моей машине. Однако, я получаю ошибку 404. Я следую за PluralSight Введение в учебник Spring MVC4, и кажется, что мой код соответствует тем, что есть в видео. Я использую два java-файла WebConfig и WebAppInitializer для настройки моего приложения. Я что-то пропустил? Я думаю, что я скопировал строки за строкой, но все еще не работал.HTTP Status 404 -/EventTracker/приветствие

HelloController.java

@Controller 
public class HelloController { 

    @RequestMapping(value="/greeting") 
    public String sayHello(Model model) { 
     model.addAttribute("greeting", "Hello World"); 

     return "hello.jsp"; 
    } 
} 

WebAppInitializer.java

public class WebAppInitializer implements WebApplicationInitializer{ 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     WebApplicationContext context = getContext(); 
     servletContext.addListener(new ContextLoaderListener(context)); 
     ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("*.html"); 

    } 

    private WebApplicationContext getContext() { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.setConfigLocation("com.pluralsight.WebConfig"); 
     return context; 
    } 
} 

WebConfig.java

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "com.pluralsight") 
public class WebConfig { 

} 

hello.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!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=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
    <h1>${greeting}</h1> 
</body> 
</html> 

EDITED 9/15 4:25 вечера PST При использовании http://localhost:8080/EventTracker/greeting.html, я все еще получаю ту же ошибку, существо ошибки:

16:24:41.925 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'DispatcherServlet' processing GET request for [/EventTracker/greeting.html] 
16:24:41.931 [http-nio-8080-exec-3] WARN o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/EventTracker/greeting.html] in DispatcherServlet with name 'DispatcherServlet' 
16:24:41.931 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request 
+0

Можете ли вы разместить свой файл DispatcherServlet.xml? Похоже, ваша ошибка связана с тем, что ваше приложение не находит правильное сопоставление в вашем файле DispatcherServlet. – jeffkempf

+0

У меня нет файлов xml для конфигурации. Все конфигурации выполняются с помощью java-файлов. – LinhSaysHi

+0

Если вы решили использовать xml-файлы, я отправил ответ, который поможет вам устранить ошибку 404. Я не уверен только в использовании java-файлов. – jeffkempf

ответ

-1

Ваш URL http://localhost:8080/EventTracker/greeting не соответствует вашему диспетчеру отображение: dispatcher.addMapping("*.html");. Попробуйте http://localhost:8080/EventTracker/greeting.html

0

Я никогда не создавал приложение Spring MVC, у которого не было файлов конфигурации XML. Я уверен, что это возможно, но мне нужно будет изучить это. Если вы не возражаете, используя XML-файлы для конфигурации, вы могли бы сделать что-то похожее на следующее (это немного сторона проекта я сделал некоторое время назад, чтобы лучше знакомиться с Spring MVC):

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/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5"> 
<display-name>Spring3MVC</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

<!--if not using jsp, can omit this --> 
<jsp-config> <!-- if taglib not inside jsp-config, will cause deployment errors --> 
<taglib> 
    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri> 
    <taglib-location>/WEB-INF/taglib/c.tld</taglib-location> 
</taglib> 
</jsp-config> 

web.xml это верхний ярус конфигурации. Из вышесказанного важно помнить, что имена, которые файл (он также будет XML-файлом), являются файлом сервлетов диспетчера. Все, что вы включаете внутри тегов, будет содержать -servlet.xml, поэтому в этом случае мой диспетчерский сервлет будет файлом spring-servlet.xml. Тег сообщает приложению, какой тип шаблонов url связан с сервлетом диспетчера. Таким образом, в этом примере любой url, заканчивающийся на .html, будет обрабатываться spring-servlet.xml.

Если вы используете JSP, убедитесь, что все ваши теги находятся в теге, иначе это будет работать неправильно.

весна-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" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 


<context:component-scan 
    base-package="net.viralpatel.spring3.controller" /> 
    <!-- declares package where controller(s) stored. Don't need to declare indvd controllers --> 

<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/" /> <!-- hello.jsp must be located in this directory for link to work --> 
    <property name="suffix" value=".jsp" /> 
</bean> 

Это то, что диспетчер файлов сервлета выглядит. Вы можете игнорировать код наверху. Основываясь на полученной вами ошибке, я предполагаю, что ваш код Java оставил или неправильно сопоставил ваш распознаватель. Резолютор вида - это то, что преобразует строки, которые вы передаете в контроллер (т. Е. Hello), в ваши относительные пути URL (например: /WEB-INF/jsp/hello.jsp). Для правильной работы убедитесь, что все ваши файлы jsp находятся в одном каталоге и перечислите этот каталог как часть вашего префиксного значения. В этом примере я сохранил все мои файлы jsp в каталоге jsp в моем каталоге WEB-INF.Суффикс в этом примере - это просто расширение файла. Любой файл, который не хранится в этом каталоге, заставит ваше приложение выкидывать ошибку 404 при попытке загрузить этот отсутствующий файл.

Я знаю, что это не совсем то, что вы намеревались сделать, но если вы решите использовать файлы XML, я надеюсь, что это поможет. Дайте знать, если у вас появятся вопросы.

6

Потому что это был первый вопрос, который я нашел в Google, и здесь нет правильного ответа, вот что мне помогло.

Вы должны добавить в WebAppInitializer.java следующий

context.register(com.pluralsight.WebConfig.class); 

Так что ваш файл должен выглядеть так:

public class WebAppInitializer implements WebApplicationInitializer{ 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     WebApplicationContext context = getContext(); 
     servletContext.addListener(new ContextLoaderListener(context)); 
     ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("*.html"); 

    } 

    private WebApplicationContext getContext() { 
     AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
     context.setConfigLocation("com.pluralsight.WebConfig"); 
     context.register(com.pluralsight.WebConfig.class); 
     return context; 
    } 
} 
+4

, это должно быть отмечено как правильный ответ! эта работа для меня – angel

0

У меня была такая же проблема. Проблема заключалась в том, что «родной библиотеки» не было в моей установочной папке Tomcat. я решаю, что с:

Sudo APT-получить установку libtcnative-1

Тогда у меня была проблема моя родная версия библиотеки был слишком стар, и я решаю, что с обновлением:

Sudo APT-получить обновление libtcnative-1

Я надеюсь, что это поможет :)