我是Spring MVC的新手并且一直在关注教程,但他们似乎没有工作。
我可以加载我的index.jsp文件,但是当我尝试将它映射到Dispatcher Servlet时,我不断发现资源未找到错误。
HelloWorldController:
package com.javatpoint;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloWorldController {
@RequestMapping("/hello")
public ModelAndView helloWorld() {
String message = "HELLO SPRING MVC";
return new ModelAndView("hellopage", "message", message);
}
}
的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
</web-app>
弹簧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="com.javatpoint" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
我的jsp文件hellopage.jsp和welcomepage.jsp位于我的WEB-INF文件夹下的jsp文件夹中。 index.jsp的:
<a href="hello.html">click</a>|
<a href="welcome.html">click</a>
我正在尝试将hello.html映射到HelloWorldController.java。
我非常感谢任何帮助,因为我在映射第一个Spring MVC应用程序时遇到了问题。
答案 0 :(得分:0)
添加
<url-pattern>*.jsp</url-pattern>
到web.js中的servlet-mapping。
答案 1 :(得分:0)
你能试试@RequestMapping(值=&#34; / hello&#34;,method = RequestMethod.GET)?
答案 2 :(得分:0)
servlet-mapping
中的网址格式错误。
当URL与此匹配时,您说转到调度程序servlet:
* .html
所以当你使用&#34; hello.html&#34; DispatcherServlet被触发。
但是,hello.html
没有映射。 hello
只有一个。 HTML是静态内容,通过控制器提供HTML并不典型。
试试这个:
将网址格式更改为:
<url-pattern>/</url-pattern>
将hello.html
更改为hello.jsp
更改方法签名以返回字符串,并将Model
添加到方法中。
@RequestMapping("/hello")
public String helloWorld(Model model) {
return "hello";
}
然后您的锚标签应指向正确的映射。它们看起来像这样:
<a href="hello">click</a>|
那么这是如何工作的?这两件事:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
-
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
以上是相当标准的。在servlet映射中,它说任何与该URL模式匹配的东西都应该命中你在web.xml中定义的名为spring
的servlet。
视图解析器正在/WEB-INF/jsp/
目录中查找以.jsp
结尾的文件。换句话说,Spring将寻找/WEB-INF/jsp/<string>.jsp
。因此,当您在方法中返回字符串hello
时,它实际上将尝试解析/WEB-INF/jsp/hello.jsp
。
如果您了解上述内容,您可能已经意识到您也可以通过这种方式提供*.html
个文件。但是,他们需要自己的视图解析器。
答案 3 :(得分:0)
问题在于您的servlet映射,请尝试将其在web.xml中更改为:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
你的url-pattern设置为* .html。因此,只有以&#34; .html&#34;结尾的请求将被派遣到春天mvc。