我是新生的蜜蜂。刚刚在sprinv mvc中启动了我的示例应用程序。但是,我无法查看该页面,因为它显示“请求的资源()不可用。”无法弄清问题在哪里。我正在粘贴下面的代码。
<?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>
**
**
<?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>
**
**
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;
}
}
<%@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>
答案 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;一旦我尝试离开它检查我可以运行我的示例项目,我真的不知道更多,希望这有助于某人!