【发布时间】:2020-10-03 16:15:28
【问题描述】:
我尝试在 spring-boot 中构建一个小应用程序,它的结构如下所示。我在使用 @RequestMapping 时遇到了一个奇怪的问题,它能够找到除一个之外的所有资源。
这是web.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Step 2: Set up URL mapping for Spring MVC Dispatcher Servlet -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
下面是applicationContext.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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- Step 3: Add support for component scanning -->
<context:component-scan base-package="com.example.*" />
<!-- Step 4: Add support for conversion, formatting and validation support -->
<mvc:annotation-driven/>
<!-- Step 5: Define Spring MVC view resolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
在com.example.controller 包中我有两个文件FrontController.java 和FormController.java。
这就是他们的样子。
FrontController.java
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class FrontController {
public FrontController() {
// TODO Auto-generated constructor stub
}
@RequestMapping("/")
public String showHomePage() {
System.out.println("Reached In");
return "home";
}
@RequestMapping("/spring")
public String spring() {
return "spring";
}
}
FormController.java
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class FormController {
public FormController() {
// TODO Auto-generated constructor stub
}
@RequestMapping("/showform")
public String showForm() {
return "showForm";
}
@RequestMapping("/formResp")
public String formResp() {
return "formResp";
}
}
现在在服务器中加载我的项目时,我得到的默认页面是home.jsp,它通过以下堆栈跟踪成功显示。
09:21:49.390 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.view.InternalResourceView - View name 'home', model {}
09:21:49.392 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.view.InternalResourceView - Forwarding to [/WEB-INF/views/home.jsp]
09:21:49.427 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
showForm.jsp 页面和FormController.java 中的formResp.jsp 页面也会发生同样的情况,它们会成功显示。下面的堆栈跟踪。
09:21:57.107 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/WebAppDemo/showform", parameters={}
09:21:57.107 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.example.controller.FormController#showForm()
09:21:57.108 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.view.InternalResourceView - View name 'showForm', model {}
09:21:57.108 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.view.InternalResourceView - Forwarding to [/WEB-INF/views/showForm.jsp]
09:21:57.302 [http-nio-8080-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
09:22:02.378 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/WebAppDemo/formResp?name=jony", parameters={masked}
09:22:02.379 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to com.example.controller.FormController#formResp()
09:22:02.380 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.view.InternalResourceView - View name 'formResp', model {}
09:22:02.380 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.view.InternalResourceView - Forwarding to [/WEB-INF/views/formResp.jsp]
09:22:02.621 [http-nio-8080-exec-5] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
但当我尝试在FrontController.java 中显示spring.jsp 页面时,我遇到了404 Error。下面的堆栈跟踪。
09:22:09.179 [http-nio-8080-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/WebAppDemo/spring", parameters={}
09:22:09.187 [http-nio-8080-exec-6] WARN org.springframework.web.servlet.PageNotFound - No mapping for GET /WebAppDemo/spring
09:22:09.187 [http-nio-8080-exec-6] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 404 NOT_FOUND
我不知道为什么它与其他 JSP 文件一起位于 WEB-INF/views 文件夹中时找不到 spring.jsp 页面。将非常感谢对此的一些帮助。提前致谢。
【问题讨论】:
标签: java spring spring-boot spring-mvc