Запрашиваемый ресурс () недоступен в примере весеннего приложения MVC - PullRequest
3 голосов
/ 30 июня 2011

Я новая пчела к весне.Просто запустил мой пример приложения в sprinv mvc.Но я не могу просмотреть страницу, так как она показывает «Запрошенный ресурс () недоступен».Не могу понять, где проблема.Я вставляю код ниже.

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
     xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >        
<servlet>
    <servlet-name>my</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>my</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>   
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>    
</web-app>

**

my-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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

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

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  <property name="prefix" value="/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>    
<bean name="/index.html" class="mypackage.web.myController"/>

</beans>

**

MyController.java

**

package mypackage.web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class myController implements Controller{
public ModelAndView handleRequest(HttpServletRequest req,HttpServletResponse resp)    throws ServletException,IOException{
String msg="Hello!!! I'm coming from Controller. You Catched me ";
ModelAndView mv = new ModelAndView("index");
mv.addObject("message",msg);
return mv;
}
}

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="i" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>My First Application in Spring</title>
</head>

<body>
    <p>Check Below</p>
    <p>
        <em>${message}</em>
    </p>
</body>
</html>

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Он почти настроен правильно, так что пока хорошо сделано :-) Здесь есть пара небольших проблем, которые вызывают проблемы, которые вы видите. Во-первых, bean-компонент в настоящее время определяется строчными буквами m:

<bean name="/index.html" class="mypackage.web.myController"/>

Хотя это разрешено, это не принято, поэтому Spring не сможет найти правильный компонент без какой-либо дополнительной настройки.

Также из вопроса неясно, какой URL вы используете, но это должно быть что-то вроде http://localhost:8080/<project>/myIndex.html

Здесь вы найдете краткое изложение конвенции здесь .

Итак, у нас есть 2 варианта & hellip; либо переименуйте класс в MyController и сохраните как MyController.java, либо измените bean-компонент ControllerClassNameHandlerMapping так, чтобы он учитывал регистр, например:

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
    <property name="caseSensitive" value="true" />
</bean>

Кроме того, это не является причиной проблемы, но если вы используете ControllerClassNameHandlerMapping, вы можете опустить имя компонента, поэтому вы можете просто использовать:

<bean class="mypackage.web.MyController"/>

Полагаю, самая раздражающая часть - это то, что веб-приложение разворачивается без ошибок. Однако, если вы изучите журнал, есть заметная разница:

Развертывание неправильно настроенного веб-приложения:

04-Jul-2011 09:13:58 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5f0e7d: defining beans []; root of factory hierarchy
04-Jul-2011 09:13:58 org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'my': initialization completed in 157 ms

Развертывание правильно настроенного веб-приложения:

04-Jul-2011 09:15:33 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@de537: defining beans [org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping#0,viewResolver,mypackage.web.MyController#0]; root of factory hierarchy
04-Jul-2011 09:15:49 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/my*] onto handler 'mypackage.web.MyController#0'
04-Jul-2011 09:15:49 org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'my': initialization completed in 296 ms

Во-вторых, как только сопоставление установлено, вы можете обнаружить, что JSP не найден. В образце, который я создал, я добавил представления в /WEB-INF/jsp, поэтому мне нужно было обновить свойство prefix в my-servlet.xml до <property name="prefix" value="/WEB-INF/jsp/"/>. Однако в зависимости от местоположения ваших представлений вам может не потребоваться это сделать.

Лично я нахожу основанный на аннотациях подход для MVC в Spring гораздо проще в настройке и следовании, поэтому я рекомендую вам прочитать REST в Spring 3: @ MVC , поскольку вам может показаться, что это проще реализовать.

0 голосов
/ 07 сентября 2017

У меня возникла та же проблема, потому что я шаг за шагом следовал учебным пособиям, которые появляются на официальном сайте Netbeans, там написано и я цитирую «обратите внимание, что библиотека JSTL (JavaServer Pages Standard Tag Library) добавлена ​​в classpath во время создания проекта по умолчанию. Отмените выбор этой опции (как на скриншоте выше), так как вам не требуется JSTL для этого урока. "После того, как я попытался оставить его включенным, я смог запустить свой пример проекта, я действительно больше ничего не знаю Надеюсь, это кому-нибудь поможет!

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