Java 获取404请求的资源在spring restful web服务中不可用
我使用的是Spring3.2.3.0发行版和Tomcat7。我想使用spring框架构建一个示例RESTAPI。My web.xml的外观如下所示: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
<?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中设置的。