2017-06-29 64 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