Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 获取404请求的资源在spring restful web服务中不可用_Java_Spring_Maven_Spring Mvc_Tomcat7 - Fatal编程技术网

Java 获取404请求的资源在spring restful web服务中不可用

Java 获取404请求的资源在spring restful web服务中不可用,java,spring,maven,spring-mvc,tomcat7,Java,Spring,Maven,Spring Mvc,Tomcat7,我使用的是Spring3.2.3.0发行版和Tomcat7。我想使用spring框架构建一个示例RESTAPI。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:sche

我使用的是Spring3.2.3.0发行版和Tomcat7。我想使用spring框架构建一个示例RESTAPI。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">
<context-param>
    <param-name>contextConfiguration</param-name>
    <param-value>/WEB-INF/sample-servlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>sample-servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>/myProjects</url-pattern>
</servlet-mapping>
<beans>
    <context:component-scan base-package="com.myprojects.sampleproject" />
</beans>
package com.myprojects.sampleproject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 *
 * @author author
 */
@Controller
@RequestMapping("/user")
public class sampleprojectController {

    @RequestMapping(method = RequestMethod.GET)
    public String getHello() {
        return "hello world";
    }
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getHello() {
    return "hello world";
}
我成功地创建了一个war文件并将其部署到tomcat上。但是当我点击localhost:8080/myProjects/user时,我得到了404。我正在使用maven构建和部署包


我以前曾在JAX-RS上工作过,在那里我们可以在netbeans中配置来创建一个项目来编写web服务,当时一切都很方便。但在这里,我实际上是在尝试将一个基于maven的项目转换为一个在tomcat上运行的web应用程序。为了做到这一点,我尝试了这个示例,但我无法启动并运行它。我遗漏了什么吗?

我认为您需要将方法的RequestMapping放在一个/。大概是这样的:

<?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">
<context-param>
    <param-name>contextConfiguration</param-name>
    <param-value>/WEB-INF/sample-servlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>sample-servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>/myProjects</url-pattern>
</servlet-mapping>
<beans>
    <context:component-scan base-package="com.myprojects.sampleproject" />
</beans>
package com.myprojects.sampleproject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 *
 * @author author
 */
@Controller
@RequestMapping("/user")
public class sampleprojectController {

    @RequestMapping(method = RequestMethod.GET)
    public String getHello() {
        return "hello world";
    }
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getHello() {
    return "hello world";
}

我相信您需要将方法的RequestMapping放在一个/。大概是这样的:

<?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">
<context-param>
    <param-name>contextConfiguration</param-name>
    <param-value>/WEB-INF/sample-servlet.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>sample-servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>/myProjects</url-pattern>
</servlet-mapping>
<beans>
    <context:component-scan base-package="com.myprojects.sampleproject" />
</beans>
package com.myprojects.sampleproject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 *
 * @author author
 */
@Controller
@RequestMapping("/user")
public class sampleprojectController {

    @RequestMapping(method = RequestMethod.GET)
    public String getHello() {
        return "hello world";
    }
}
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getHello() {
    return "hello world";
}

如果您想要返回body,请使用特殊注释@ResponseBody。默认情况下,带有@RequestMapping注释的控制器方法必须返回视图名称

        @RequestMapping(method = RequestMethod.GET)
        @ResponseBody
        public String getHello() {
            return "hello world";
        }
编辑:

添加到sample-servlet.xml

替换根上下文配置文件:

<context-param>
    <param-name>contextConfiguration</param-name>
    <param-value>/WEB-INF/sample-servlet.xml</param-value>
</context-param>

如果您想要返回body,请使用特殊注释@ResponseBody。默认情况下,带有@RequestMapping注释的控制器方法必须返回视图名称

        @RequestMapping(method = RequestMethod.GET)
        @ResponseBody
        public String getHello() {
            return "hello world";
        }
编辑:

添加到sample-servlet.xml

替换根上下文配置文件:

<context-param>
    <param-name>contextConfiguration</param-name>
    <param-value>/WEB-INF/sample-servlet.xml</param-value>
</context-param>

我猜您缺少项目的上下文路径。如果您使用的是eclipse,则可以在项目属性->Web项目设置中找到上下文路径


另外,请确保控制台上没有错误

我猜您缺少项目的上下文路径。如果您使用的是eclipse,则可以在项目属性->Web项目设置中找到上下文路径



另外,请确保控制台上没有错误

您的代码正在返回hello world,默认情况下,如果您希望在浏览器中返回字符串并使用“@ResponseBody”注释您的方法,spring mvc将尝试查找由viewResolver解析的页面hello world.jsp。e、 g.public@ResponseBody字符串getHello{..我添加了@ResponseBody。但是仍然没有运气,因为它在作为Spring引导运行时可以完美地工作。但是不起作用,如果作为WAR导出并手动复制到Tomcate,您的代码返回hello world,默认情况下,如果您想在bro中返回字符串,Spring mvc将尝试查找由viewResolver解析的页面hello world.jspwser用“@ResponseBody”注释您的方法。例如,public@ResponseBody字符串getHello{..我添加了@ResponseBody。但仍然没有运气,因为它在作为Spring启动运行时可以完美地工作。但如果作为WAR导出并手动复制到TomcatI,则无法工作。使用netbeans和在项目属性中,我看不到web项目设置。实际上,我最初编写了一个基于maven的独立应用程序。现在我正在尝试广告d为此创建REST web服务的包装。我不确定这里缺少什么。TOMCAT_HOME/logs上会有日志,对吗?我在点击页面时没有看到任何日志记录。是否有其他位置可以检查日志?我使用netbeans,在项目属性中我看不到web项目设置。实际上,我写了一个站a最初是一个基于maven的应用程序。现在我正在尝试添加一个包装器来创建REST web服务。我不确定这里缺少什么。日志将在TOMCAT_HOME/logs上提供,对吗?当我点击页面时,我没有看到任何日志记录。有没有其他位置可以检查日志?我现在遇到了问题。当我部署war文件到tomcat7,我得到以下错误:IOException解析来自ServletContext资源的XML文档[/WEB-INF/applicationContext.XML];嵌套异常为java.io.FileNotFoundException:无法打开ServletContext资源[/WEB-INF/applicationContext.XML]。applicationContext.xml中到底应该有什么。我假设sample-servlet.xml和web xml就足够了。您能解释一下需要在这个xml中添加什么吗?我通过添加applicationContext.xml解决了这个问题。部署到tomcat时,我甚至得到了:Mapped{[/user],methods=[GET],params=[],headers=[],consumes=[],products=[],自定义=[]}在public java.lang.String com.myprojects.sampleprojects.sampleprojectController.getHello上。但是当我点击localhost:8080/myprojects/user时,我得到的资源不可用。在web.xml中,url模式是/myprojects,而在controller中,RequestMapping是/user。因此我假设/myprojects/user是url。如果我错了,请纠正我。@coder:也许吧将servlet映射/myProjects替换为/myProjects/*最终遇到了问题。Netbeans设置了一些默认上下文路径:/。因此我的url是//myProjects/user。我猜这是在META-INF/context.xml中设置的。我现在遇到了问题。当我将war文件部署到tomcat7时,我遇到了以下错误:IOException从ServletContent解析xml文档
xt资源[/WEB-INF/applicationContext.xml];嵌套异常为java.io.FileNotFoundException:无法打开ServletContext资源[/WEB-INF/applicationContext.xml]。applicationContext.xml中应该包含什么内容。我假设sample-servlet.xml和web-xml就足够了。您能解释一下这个xml中需要添加什么吗?我通过添加applicationContext.xml解决了这个问题。在部署到tomcat时,我甚至得到了:映射到公共java.lang.String com.myprojects.sampleproject.sampleprojectController.getHello上的{[/user],方法=[GET],参数=[],头=[],消耗=[],生产=[],自定义=[]。但当我点击localhost:8080/myProjects/user时,我得到的资源不可用。在web.xml中,url模式是/myProjects,在controller中,RequestMapping是/user。因此,我假设/myProjects/user是url。如果我错了,请纠正我。@coder:也许将servlet映射/myProjects替换为/myProjects/*最终解决了这个问题。Netbeans设置了一些默认上下文路径:/。所以我的url是//myProjects/user。我猜这是在META-INF/context.xml中设置的。