示例spring mvc应用程序中没有请求的资源()

时间:2011-06-30 13:11:44

标签: netbeans spring-mvc

我是新生的蜜蜂。刚刚在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 个答案:

答案 0 :(得分:3)

它几乎配置正确,到目前为止做得很好:-)这里有一些小问题导致你看到的问题。首先,bean目前使用小写m定义:

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

虽然这是允许的,但它不是常规的,所以如果没有一些额外的配置,Spring将无法找到正确的bean。

另外,从问题中使用哪个网址不清楚,但它应该是http://localhost:8080/<project>/myIndex.html

形式的内容

有一个很好的总结here

所以我们有两个选项......要么将类重命名为MyController又保存为MyController.java,要么将ControllerClassNameHandlerMapping bean修改为区分大小写,如下所示:

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

此外,它不是问题的原因,但如果你使用ControllerClassNameHandlerMapping你可以省略bean名称,所以你可以使用:

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

我想最烦人的部分是Web应用程序部署没有错误。但是,如果您检查日志,则存在显着差异:

部署错误配置的webapp:

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

部署正确配置的webapp:

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下的视图,因此我需要将my-servlet.xml中的前缀属性更新为<property name="prefix" value="/WEB-INF/jsp/"/>。但是,根据您的观点的位置,您可能不需要这样做。

我个人认为Spring中基于注释的MVC方法更易于配置和遵循,因此我建议您阅读REST in Spring 3: @MVC,因为您可能会发现更容易实现。

答案 1 :(得分:0)

我遇到了同样的问题,因为我一步一步地在Netbeans官方网站上关注了一些教程,在那里它说,我引用了#34;请注意添加了JSTL(JavaServer Pages标准标签库)库默认情况下,在项目创建期间到类路径。取消选择此选项(如上面的屏幕截图所示),因为本教程不需要JSTL。 &#34;一旦我尝试离开它检查我可以运行我的示例项目,我真的不知道更多,希望这有助于某人!