Spring MVC - 不加载视图

时间:2017-06-29 10:23:43

标签: java spring jsp spring-mvc tomcat

我一直在尝试使用Java Servlets进行Web应用程序,在这个应用程序中,我能够访问Servlet并正确加载.jsp页面,完成后我已经转移到了Spring MVC上。我遇到了调用我的servlet控制器类的问题,但它不会加载视图。

我排除了资源不可见,因为它与普通的java servlet一起正常工作。我还阅读了几乎所有的资源/教程,试图找到问题而没有任何运气,我的问题仍然是一样的。此外,为了解决问题,我添加了一个错误页面标记(),以便查看当我尝试点击我的页面时,它会正确地重定向我,但它无法找到为404错误指定的页面。

任何人都可以识别我错过的内容吗?

Web.xml

变体:更改了url-pattern,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'

3 个答案:

答案 0 :(得分: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端口,如果你使用另一个端口,用你使用的端口改变它。

答案 1 :(得分:1)

在LoginServlet-servlet.xml文件中尝试

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

而不是

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

答案 2 :(得分: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";
}

}

这应该有效