2017-06-29 65 views
0

我一直在尝试用于Web应用程序的Java Servlets,在此应用程序中,我能够击中一个Servlet并正确加载一个.jsp页面,完成了这一操作后,我将其移至了Spring MVC。我遇到了一个问题,我的servlet控制器类被调用,但它不会加载视图。Spring MVC - 无法加载查看

我排除了资源不可见,因为它可以正常使用普通的java servlet。我也读了几乎所有的资源/教程,试图找到没有任何运气的问题,我的问题仍然是一样的。此外,为了解决问题,我添加了一个错误页面tag(),以查看是否尝试打开我的页面时,它会正确重定向我,但无法找到为404错误指定的页面。

任何人都可以识别我错过了什么?

Web.xml中

变化:改变URL的图案时,init-PARAMS,上下文的配置位置等

<servlet> 
    <servlet-name>LoginServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
<init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/LoginServlet-servlet.xml</param-value> 
</init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>LoginServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

LoginServlet-servlet.xml中

变化:我我们试图按照其他职位上的建议将这些声明转移到不同的职位上,但没有任何结果。除了通常我有前缀设置为/ WEB-INF/JSP/

<context:component-scan base-package="plan.route.server" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<context:annotation-config/> 
<mvc:annotation-driven /> 

LoginServlet.java

变化:不同requestMapping路径,标志着方法不是类,从返回的字符串方法,返回的ModelAndView类

package plan.route.server; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

@Controller() 
@RequestMapping("/") 
public class LoginServlet extends org.springframework.web.servlet.mvc.AbstractController { 

@RequestMapping(method = RequestMethod.GET) 
public String forwardTo() { 
    return "index"; 
} 

@Override 
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) 
     throws Exception { 
    return new ModelAndView("login", "login", "login"); 
} 

} 

项目设置

变化:为servlet XML不同的地点,.jsp文件等

Project Setup

有人能看到什么我已经错过了?所有我想要做的,尽管所有的变化是加载一个.jsp页面。

编辑:我的Java Servlet的方法后,将显示以下错误被称为:

WARNING: No mapping found for HTTP request with URI [/Root/Login] in DispatcherServlet with name 'LoginServlet' 

回答

1

在LoginServlet-servlet.xml文件尝试

<property name="prefix" value="/WEB-INF/jsp/"/> 

,而不是

<property name="prefix" value="/" /> 
+0

欢呼声中,我应该已将此添加然而变化部分。当我试图将.jsp文件移出web-inf文件夹时,我更改了该前缀值。我应该重新添加它,但这并不能解决我的问题。谢谢。 – Unknown

2

我看到有一件事情是错误的,并且是LoginServlet-servlet.xml中的jsp配置,请尝试将前缀值更改为如下:

<context:component-scan base-package="plan.route.server" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<context:annotation-config/> 
<mvc:annotation-driven /> 

随着你的配置Spring无法找到jsp文件,因为你指定了错误的路径。你必须是文件夹特定的,在你的情况下你有在/WEB-INF/jsp文件夹中的jsp文件。

编辑:

我配置您的项目在我的工作区,它的工作原理。尝试从web.xml中删除此行:

<init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/LoginServlet-servlet.xml</param-value> 
</init-param> 

而且你的Controller类应该是这样的:

@Controller 
@RequestMapping("/") 
public class LoginServlet{ 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView forwardTo(ModelMap model) { 
     return new ModelAndView("login", "login", "login"); 
    } 
} 

而且你如何调用控制器注意:

http://localhost:8080/Root/ 

这是调用控制器的正确方法,因为您将项目命名为Root,并且控制器正在侦听路径“”/“”。我使用端口8080,因为您用tomcat标记了问题,并且这是默认的tomcat端口,如果使用另一个端口,则使用您使用的端口。

+0

干杯,我应该把它添加到变化部分。当我试图将.jsp文件移出web-inf文件夹时,我更改了该前缀值。我应该重新添加它,但这并不能解决我的问题。谢谢。 – Unknown

+0

对不起,延迟回复,但我设法让它在我的工作区上工作,看到我的编辑。 – amicoderozer

+0

嗨,谢谢你的努力。我已经将您的更改移植到工作空间中,并且仍然收到相同的错误。因此,警告说明使用URI的HTTP请求不会被映射。该servlet类仍然正确地被调用。 – Unknown

1

根据您当前的项目设置

LoginServlet-servlet.xml中

<context:component-scan base-package="plan.route.server" /> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<context:annotation-config/> 
<mvc:annotation-driven /> 

LoginServlet.java

@Controller 
@RequestMapping("/") 
public class LoginServlet { 

@RequestMapping(method = RequestMethod.GET) 
public String forwardTo() { 
    return "index"; 
} 

@RequestMapping(value="/login", method = RequestMethod.GET) 
public String forwardToLogin() { 
    return "login"; 
} 

} 

这应该工作

+0

谢谢,我已经对当前版本进行了这些更改,尽管其100%处于此状态,并且仍然表现完全相同,但我会更新我的问题以包含这些更改。 – Unknown

+0

我刚刚编辑了LoginServlet.java。你问题的原因是没有我现在包含的登录页面的请求映射。 – Perry

+0

用我在答案中使用的方法,不需要handleRequestInternal方法。所以请删除它。 – Perry