我是初学mvc的新手。我目前正在使用netbeans 8.0.2。以及一个spring mvc插件。从我在'库中看到的jar文件'项目部分似乎我使用的是spring mvc 4.0.1。
我可以从tomcat服务器甚至是glassfish加载index.jsp页面,但是如果我应该在目录结构 WEB-INFO> jsp> response.jsp 下创建另一个.jsp文件一个例子。我从服务器收到错误404。这可能是一个非常简单的修复,但到目前为止还没有成功。
我怀疑它与我的控制器和[springapp] -servlet.xml文件有关。我在网上看到的大多数例子都使用spring mvc 3.x并且避免在控制器设置中使用注释方法,乍一看后者对我来说似乎更容易。然后,这些示例继续向前面提到的xml文件添加几行。但是,我认为通过使用注释控制器设置,spring mvc会自动检测我的控制器。是不是建议使用注释方法?
我的配置文件如下:
的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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>springapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
</web-app>
springapp-servlet.xml中:
<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-40.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<!--
Most controllers will use the ControllerClassNameHandlerMapping above, but
for the index controller we are using ParameterizableViewController, so we must
define an explicit mapping for it.
-->
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="index.htm">indexController</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<!--
The index controller.
-->
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
</beans>
其他相关文件:
控制器:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.RequestParam;
/**
*
* @author macj7
*/
@Controller
public class HelloController {
@RequestMapping( value = "/response", method = RequestMethod.GET)
public String index( Model model) {
String name = "World";
model.addAttribute("name", name );
return "response";
}
}
的response.jsp:
<%--
Document : response
Created on : Jul 31, 2015, 1:25:19 PM
Author : macj7
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring Web MVC </title>
</head>
<body>
<h1> th:text= "Hello, ${name}!" </h1>
</body>
</html>
redirect.jsp中:
<%--
Views should be stored under the WEB-INF folder so that
they are not accessible except through controller process.
This JSP is here to provide a redirect to the dispatcher
servlet but should be the only JSP outside of WEB-INF.
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<% response.sendRedirect("index.htm"); %>
如果有解决此问题或更多信息的话 需要请告诉我。我也想解释任何答案 因为我正在努力学习,而不仅仅是复制和粘贴解决方案。 这是我用java创建Web应用程序的第一次尝试,我必须说配置本身似乎相当令人生畏。
提前感谢您的时间和耐心。
答案 0 :(得分:1)
我认为在web.xml文件的欢迎文件列表中,您应该提供Spring Controller Request Mapping而不是jsp文件名,如下所示。
<welcome-file-list>
<welcome-file>/response</welcome-file>
</welcome-file-list>
答案 1 :(得分:1)
好的,我找到的解决方案是定义将springapp-servlet.xml中的请求作为bean处理的控制器,并且还在控制器本身重新定义该方法,以便它返回ModelAndView(import org。 springframework.web.servlet.ModelAndView)。 我的页面现在呈现。
我应该注意到我已经重写了模型而没有使用注释表单来编写控制器,但我很快就会以这种形式测试它。现在我只是简单地实现了控制器接口。
感谢所有回复的人。您的意见得到了赞赏。
答案 2 :(得分:0)
根本原因:
web.xml
DispatcherServlet
查找以*.htm
结尾的网址,表明它不接受response.jsp
的请求注意:强>
在启动时加载DispatcherServlet
为优先级1
<load-on-startup>1</load-on-startup>
<强>解决方案:强>
更改将检查每个请求的DispatcherServlet
的映射。
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
要访问response.jsp
,您需要输入根据控制器中定义的www.domain/context-root/response
映射的网址RequestMapping
。