Java spring请求映射404状态

Java spring请求映射404状态,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,好的,我知道这里有20个帖子有同样的问题,但是没有一个对我有帮助,所以这可能是重复的,但是我浏览了所有其他帖子,没有一个解决了我的问题,所以一定是我做错了什么,或者我没有按照前面提到的问题的答案做正确的修改 我正在尝试使用Spring制作一个小应用程序,我还在尝试它,但我花了大约4天的时间试图找出问题所在,但我就是做不到。每当我试图从控制器获取jsp时,仍然会得到HTTP状态404。只有通过Tomcat的404状态,没有别的 WebAppController: @Controller publi

好的,我知道这里有20个帖子有同样的问题,但是没有一个对我有帮助,所以这可能是重复的,但是我浏览了所有其他帖子,没有一个解决了我的问题,所以一定是我做错了什么,或者我没有按照前面提到的问题的答案做正确的修改

我正在尝试使用Spring制作一个小应用程序,我还在尝试它,但我花了大约4天的时间试图找出问题所在,但我就是做不到。每当我试图从控制器获取jsp时,仍然会得到HTTP状态404。只有通过Tomcat的404状态,没有别的

WebAppController:

@Controller
public class WebAppController {

    @RequestMapping(value="/login", method = RequestMethod.GET)
    public String login() {
        System.out.println("You have entered the login maprequest");
        return "test1";
    }

}
web.xml:

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <display-name>Hotel Application</display-name>
    <servlet>
        <servlet-name>WebApp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>WebApp</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

酒店应用
网络应用
org.springframework.web.servlet.DispatcherServlet
1.
网络应用
/
login.jsp
webApp.xml:

   <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    <context:component-scan base-package="com.iquestgroup" />

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
</beans>

/jsp/
.jsp
此配置在一个简单的maven项目中工作,其中仅包含上述内容。问题是,在一个包含3个模块(持久性、服务和webapp)的maven项目中,完全相同的东西不起作用。在webapp中,我复制了完全相同的东西,当我在服务器上运行它时,我得到404HTTP状态。。。尽管模块正在成功构建

L.E.公认答案的第一部分是指那些从Spring开始的人所犯的一个常见的servlet映射错误。我的问题与它无关,在最初的回答之后我就把它删除了。为了不让读者感到困惑,公认答案的第一部分引用了以下代码:

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

调度员
/*
更改

<url-pattern>/*</url-pattern>
/*

/
当前,由于
/*
,映射的
DispatcherServlet
被标记为处理所有请求。这意味着它还将尝试处理发送到
/WEB-INF/jsp/test1.jsp
的请求。它显然没有相应的处理程序,因此会失败

模式
/
的特殊之处在于,如果没有其他模式匹配,它是默认的回退模式。如果有一个映射到请求路径的
Servlet
,那么将在映射的
DispatcherServlet
之前选择该
Servlet

大多数(可能是所有)Servlet容器都映射了一个
Servlet
,以处理使用
*.jsp的
url模式
呈现jsp。这将优先于映射到
/
DispatcherServlet

如果在这些更改之后仍然得到404,那么有一些可能性

Spring在信息级别记录它注册的任何处理程序方法(
@RequestMapping
@Controller
bean中注释的方法)。如果您在日志中没有看到这些内容,则表示您的web应用程序未正确/成功部署


如果您的Servlet容器嵌入到IDE中,请检查已部署应用程序上的相应选项卡/视图。如果它是独立的,请检查生成的
.war
文件是否位于适当的目录中并正确展开。

首先,您可以使用如下任何根控制器侦听/请求

@Controller
@RequestMapping ("/")
public class RootCtrl {

Logger logger = Logger.getLogger(RootCtrl.class);

@RequestMapping (value = "/", method = {RequestMethod.GET, RequestMethod.POST})
public String index(ModelMap model) {

    // redirect to login page
    return "redirect:admin/index";
}}
使用该控制器,您将所有请求映射到root。然后,您可以将请求重定向到登录控制器

这都是关于请求映射的。您的loginController或webController应该侦听一个应该在之前指定的请求。在我的应用程序中,登录控制器侦听/admin请求路径。然后,我的登录控制器如下所示:

@Controller
@RequestMapping ("/admin")
public class LoginCtrl {

@RequestMapping (value = "/index", method = {RequestMethod.GET, RequestMethod.POST})
public String index(@RequestParam (value = "captchaId", defaultValue = "") String captchaId, ModelMap model, HttpServletRequest request, HttpServletResponse response) {

    if(StringUtils.isNullOrEmpty(captchaId)){
        captchaId = RandomGUID.getRandomGUID();
    }

    model.addAttribute("captchaId", captchaId);

    // redirect to login page
    return "login";
}

当您从以下路径获得请求时:localhost/SampleProject/admin/index。映射将起作用

我将另一个问题的答案改为/改为/*,与我的问题类似,我以前也有你说过的答案,但仍然不起作用。@drag,然后我们需要更多细节。将您的Spring日志转为调试,发送请求,并将结果作为编辑发布到您的问题。@拖动并请澄清您将请求发送到哪个URL。我正在尝试发送到“”或“”,但没有任何结果。(HotelApplication是项目的名称)。我仍在试图找出如何将spring日志转换为调试,我没有使用它们,也没有在spring中设置它们,所以这可能需要一点时间…@DragosGeornoiu描述什么都没有发生。查看Servlet容器日志。当你启动应用程序时,他们会记录什么?您的
UserController
在哪个软件包中?谢谢您的回答,但是控制器还可以,它不是很复杂,只是一个测试,看看是否一切正常(这次不是)。问题是我没有正确地部署应用程序,正如@Sotirios Delimanolis所建议的那样。您编辑了这个问题
/*
,这是不可能的!现在答案毫无意义。它说要更改
/*
,但该*不再出现在*问题中。@StephenP最初回答后,该问题被编辑,我在回答的评论中宣布了这一点。保留/*似乎是毫无意义的,尽管这不是我的问题,而且还有更多关于堆栈溢出的问题,这些问题正好涉及到这一点。我理解你的观点,我认为你是对的,这可能会让人困惑,所以我会在问题的最后补充一点。
@Controller
@RequestMapping ("/admin")
public class LoginCtrl {

@RequestMapping (value = "/index", method = {RequestMethod.GET, RequestMethod.POST})
public String index(@RequestParam (value = "captchaId", defaultValue = "") String captchaId, ModelMap model, HttpServletRequest request, HttpServletResponse response) {

    if(StringUtils.isNullOrEmpty(captchaId)){
        captchaId = RandomGUID.getRandomGUID();
    }

    model.addAttribute("captchaId", captchaId);

    // redirect to login page
    return "login";
}