Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC:请求映射类和方法_Java_Spring_Spring Mvc_Request Mapping - Fatal编程技术网

Java SpringMVC:请求映射类和方法

Java SpringMVC:请求映射类和方法,java,spring,spring-mvc,request-mapping,Java,Spring,Spring Mvc,Request Mapping,这可能吗 @Controller @RequestMapping("/login") public class LoginController { @RequestMapping("/") public String loginRoot() { return "login"; } @RequestMapping(value="/error", method=RequestMethod.GET) public String loginEr

这可能吗

@Controller
@RequestMapping("/login")
public class LoginController {

    @RequestMapping("/")
    public String loginRoot() {
        return "login";
    }

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

}
我在访问
localhost:8080/projectname/login
时遇到404错误,但在
localhost:8080/projectname/login/error
中没有

这是我的web.xml 项目名称

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<servlet>
    <description></description>
    <servlet-name>projectname</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
</servlet>

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

org.springframework.web.context.ContextLoaderListener
上下文配置位置
/WEB-INF/applicationContext.xml
项目名称
org.springframework.web.servlet.DispatcherServlet
项目名称
/

是的,这是可能的方法上的
@RequestMapping
中的路径相对于类注释上的路径。

在当前设置中,
loginRoot()
将处理对的请求

localhost:8080/projectname/login/

假设您的配置中没有任何其他东西可以阻止这种情况。

您不需要方法映射中的
/
。只需将它映射到

,您不需要“/”,还需要添加请求方法

@RequestMapping(method = RequestMethod.GET)
public String loginRoot() {
    return "login";
}
考虑使用spring mvc测试来简化这些场景的测试过程:


我也这么认为,但是我在访问
localhost:8080/projectname/login
时遇到了404错误,我不知道为什么,我错过了什么吗?你的“error.JSP”目录中有一个名为“login.JSP”的JSP吗?@orvyl它对我有用。我们可以查看您的web.xml和servlet上下文配置吗?您的映射可能不同,并阻止了这种情况。@SotiriosDelimanolis您使用的是哪种Spring版本?我在4.0.0.RELEASE中遇到了一个非常类似的问题,并使用一个空映射字符串修复了它。请注意,该问题的URL上没有尾随斜杠,而您的URL上有。@chrylis我在4.0.2上。这种行为至少从3.1,iirc开始就存在。我建议他们从使用
/login
改为使用
/login/
请求到达处理程序。同样,这可能是配置其余部分的问题。这将起作用,因为
将与
”/login“
相关,所以仍然是
/login
。只需运行一个快速测试,在您的情况下,您只需使用@RequestMapping即可。请求方法默认为GET。@BineshGunaratne请求方法默认为not GET。如果省略
方法
属性,所有请求方法都将匹配。