我是 Spring MVC java的新手。
配置(我做过的)
遇到问题
我可以毫无问题地访问 web-content 下的 index.jsp ,但在 WEB-INF下访问 hello.jsp 时,服务器显示 HTTP状态404 ,网址已停在http://localhost:8080/APK_downloader/WEB-INF/jsp/hello.jsp
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>APK downloader</display-name>
<servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
spring-dispatcher-servlet.xml (servlet配置xml)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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-4.2.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.3.xsd">
<context:component-scan base-package="solutionView"/>
<bean id="HanlderMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
DBController.java (java资源类)
package solutionView;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value = "/hello")
public class DBController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ModelAndView getModelView(){
System.out.println("helllo"); // check point
return new ModelAndView("hello");
}
}
hello.jsp (查看jsp)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Hello</h1>
<h2>${message}</h2>
</body>
</html>
答案 0 :(得分:2)
首先,您无法直接访问 WEB-INF 文件夹。因此http://localhost:8080/APK_Downloader/WEB-INF/jsp/hello.jsp
无效
其次,您使用@RequestMapping(value = "/hello")
以及控制器类对您的处理程序进行了注释。因此,访问处理程序的完整URL是
http://localhost:8080/APK_Downloader/hello/hello
如果您想直接访问相对于您的上下文的方法,请删除
来自控制器的@RequestMapping(value = "/hello")
并且还会更改您的视图解析器定义
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
到
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp" />
<property name="suffix" value=".jsp" />
</bean>
你错过了前缀
中的jsp部分答案 1 :(得分:1)
请删除此行,并在url字符串中直接写入/ hello,将其重定向到hello.jsp页面
@RequestMapping(value = "/hello")
答案 2 :(得分:1)
更改 spring-dispatcher-servlet.xml
来自
<bean id="HanlderMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
到
<mvc:annotation-driven />
因为您使用的是注释驱动的MVC控制器(即 @RequestMapping,@ Controller)。这就是你需要添加上述内容的原因 spring-dispatcher-servlet.xml 中的语句。
答案 3 :(得分:0)
你不能直接访问WEB-INF
下的文件,你必须让servlet来管理它。
根据网址映射,您需要知道method
的映射是在其拥有Controller
例如:
@Controller
@RequestMapping(value = "/hello")
public class DBController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ModelAndView getModelView(){
System.out.println("helllo"); // check point
return new ModelAndView("hello");
}
}
意味着 getModelView()
将回复以下网址:
http://localhost:8080/APK_downloader/hello/hello
删除重复的hello你有两个选择,要么删除
@RequestMapping(value = "/hello")
来自控制器,或保留它并将您的方法更改为以下内容:
@RequestMapping(value = "", method = RequestMethod.GET)
答案 4 :(得分:0)
以这种方式更改控制器类:
@Controller
public class DBController {
@RequestMapping(value = "/hello")
public String displayHelloPage(){
return "hello";
}
}
现在,如何调用此URL。 localhost:8080/context_path/hello.
您必须在服务器中检查eclipse集中是否有上下文路径。如果上下文路径为/
,则只需localhost:8080/hello
。我希望这有帮助,如果没有,知道,我会删除我的答案。