首页 文章

Spring MVC:Controller RequestMapping工作,但返回总是给出404

提问于
浏览
4

我的控制器方法中有几个SYSOUT,它们出现在控制台日志中......验证我所有的@RequestMapping都按预期运行 . 环境bean的@Autowiring也在工作(SYSOUT也正确显示) .

但是,方法的返回(我使用返回String类型的方法)仅导致404s . 找不到* .jsps . 项目正在使用Maven; IDE是eclipse kepler,FWIW .

我的ViewResolver是标准的 . 看不到断开连接 .

My web.xml:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">     <display-name>BluPrint</display-name>  <servlet>         <servlet-name>mvc-dispatcher</servlet-name>         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>   <servlet-mapping>         <servlet-name>mvc-dispatcher</servlet-name>         <url-pattern>/*</url-pattern>   </servlet-mapping>   <context-param>       <param-name>groupId</param-name>        <param-value>${project.groupId}</param-value>   </context-param>     <context-param>       <param-name>artifactId</param-name>         <param-value>${project.artifactId}</param-value>    </context-param> </web-app>

My servlet.xml:

<?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:context="http://www.springframework.org/schema/context"     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"     xmlns:batch="http://www.springframework.org/schema/batch" xmlns:task="http://www.springframework.org/schema/task"   xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xjp="http://www.corpabc.com/schema/xjp"     xsi:schemaLocation="    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd    http://www.corpabc.com/schema/xjp http://www.corpabc.com/schema/xjp/beans.xsd">    <context:component-scan base-package="com.corpabc.bluprint" />     <mvc:annotation-driven />     <mvc:resources mapping="/resources/**" location="/resources/" />     <import resource="classpath:corpabc/xjp/configuration/properties.xml" />   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="viewClass"             value="org.springframework.web.servlet.view.JstlView" />       <property name="prefix" value="/WEB-INF/jsp/" />      <property name="suffix" value=".jsp" />   </bean>  <bean id="dataSourceDB2" class="org.springframework.jndi.JndiObjectFactoryBean">      <property name="jndiName" value="jdbc/BluPrint" />        <property name="resourceRef" value="true" />  </bean>  <xjp:environment artifactId="${artifactId}" groupId="${groupId}" /> </beans>

My Controller:

package com.corpabc.bluprint.controllers;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import corpabc.xjp.configuration.env.Environment;

/**
 * 
 * Handles requests for the application.
 */

@Controller
@RequestMapping("/*")
public class BluPrintController {

    @Autowired
    private Environment xjpEnvironment;

    @RequestMapping("/init")
    protected String catchInit(Map<String, Object> model) {
        System.out.println("Got into init method.  XJP Environment: "+xjpEnvironment);
        model.put("xjp", this.xjpEnvironment);
        return "envtest";
    }

    @RequestMapping("/*")
    protected String catchAllOthers(Map<String, Object> model) {
        System.out.println("Got into catch-all method: ");
        return "defaultPage";
    }
}

我的 envtest.jsp/WEB-INF/jsp/ 下...但输入网址 ~localhost:8080/bluprint/init ...我得到了404 .

当我输入 ~localhost:8080/bluprint/ 时,我得到的是 defaultPage.jsp . 不知道它是否应该是404,特别是,但这就是我得到的,无论如何 .

1 回答

  • 11

    我怀疑你的问题出在你的servlet映射中 . / 将通过调度程序servlet强制执行所有操作,包括jsps . 试着失去 . 我将在servlet规范和更新中找到相关部分....

    从servlet规范:

    12.2映射规范在Web应用程序部署描述符中,使用以下语法定义映射:以“/”字符开头并以“/ ”后缀结尾的字符串用于路径映射 . 以“ . ”前缀开头的字符串用作扩展名映射 . 空字符串(“”)是一个特殊的URL模式,它精确映射到应用程序的上下文根,即表单的请求 . 在这种情况下,路径信息是'/',servlet路径和上下文路径是空字符串(“”) . 仅包含'/'字符的字符串表示应用程序的“默认”servlet . 在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为null . 所有其他字符串仅用于完全匹配 .

    因此,如果指定/ 覆盖 .jsp映射,那么jsp请求将被路由回调度程序servlet而不是命中jsp .

相关问题