在没有/在上下文根之后访问我的应用程序时出错404

时间:2017-07-19 14:18:59

标签: java spring jsp spring-mvc

我有一个基于Spring的Web应用程序。下面是web.xml

<display-name>testapp</display-name>    
<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
</context-param>

<listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

我有一个index.jsp,其中包含以下代码。

<%response.sendRedirect("login");%>

现在,如果我使用网址http://localhost:8080/myapp访问我的应用,则会收到错误404,但如果我使用网址http://localhost:8080/myapp/访问我的应用,则可以访问登录页面。

在我的控制器类中,我有以下方法来处理/登录请求。

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loadLogin(Model model) {
    model.addAttribute("loginForm", new LoginForm());
    return "login";
}

这有什么区别?如何让http://localhost:8080/myapp(没有/)工作?我正在使用Internet Explorer访问应用程序。

1 个答案:

答案 0 :(得分:0)

这里的问题是网址http://localhost:8080/myapp不存在,因为您已在/

中定义了 DispatcherServlet

这是你的代码:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

然后当您尝试访问http://localhost:8080/myapp时,您的服务器正在寻找任何不存在的/myapp请求。

现在,如果您想要在应用程序结束时没有/的情况下访问您的应用程序 你需要像这样改变你的定义servlet:

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/myapp/*</url-pattern>
</servlet-mapping>

但你会创建一个新的控制器来处理这个/ myapp寻找你的视图。

[编辑]

@RequestMapping(value = "/myapp/login", method = RequestMethod.GET)
public String loadLogin(Model model) {
    model.addAttribute("loginForm", new LoginForm());
    return "login";
}