我是Spring MVC的新手,我试图从我的Java应用程序访问spring servlet并打印结果。但我不能让它发挥作用。我可以从url的导航器访问index.jsp文件:http://localhost:8080/MyApp/ 但我的主要课程引发了一个异常java.io.FileNotFoundException:http://localhost:8080/MyApp/helloWorld。 任何人都可以帮助我吗?
这是我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd" version="3.0">
<display-name>MyApp</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<!-- will look for application-servlet.xml file to load -->
<servlet-name>application</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>application</servlet-name>
<url-pattern>/welcome.jsp</url-pattern>
<url-pattern>/welcome.html</url-pattern>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
我的application-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.myapp.server.controllers" />
<context:component-scan base-package="com.myapp.server.managers" />
<context:component-scan base-package="com.myapp.server.repositories" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
我的弹簧控制器
@Controller
public class ApplicationController {
@Autowired
private ApplicationManager applicationManager;
@RequestMapping("/helloWorld.do")
public String helloWorld() {
return "helloWorld";
}
}
我的Java代码
public class Test {
public static void main(String[] args) throws IOException {
String url = "http://localhost:8080/MyApp/helloWorld";
URLConnection connection = new URL(url).openConnection();
connection.setRequestProperty("Accept-Charset", charset);
InputStream response = connection.getInputStream();
System.out.println(response.read());
}
}
答案 0 :(得分:3)
您似乎正在尝试点击不存在的端点。 你映射@RequestMapping(&#34; /helloWorld.do")并试图调用/ helloWorld
尝试将您的请求映射重命名为@RequestMapping(&#34; / helloWorld&#34;)
如果您想使用.do尝试添加
<url-pattern>*.do</url-pattern>
到你的servlet映射
在这里你可以找到一个spring mvc show case
https://github.com/spring-projects/spring-mvc-showcase
希望它有所帮助。
答案 1 :(得分:0)
如果您想维护.do扩展名,请按如下方式替换您的servlet映射。
<servlet-mapping>
<servlet-name>application</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
同时删除@RequestMapping中的.do扩展名(&#34; /helloWorld.do")为@RequestMapping(&#34; / helloWorld&#34;)。默认情况下,Spring匹配/ helloWorld加上任何扩展名即/helloWorld.do,/helloWorld.htm等
这提供了灵活性,您只需要在web.xml中更改servlet映射以使用不同的扩展
在您的测试班中,使用网址http://localhost:8080/MyApp/helloWorld.do
答案 2 :(得分:0)
谢谢大家的回答。 在googlefriend上阅读你的帖子和一些文档,我终于解决了我的问题。 当然,这需要在我的案例中完成:
<servlet-mapping>
<servlet-name>application</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
然后在弹簧控制器中:
@RequestMapping("/helloWorld.do")
public @ResponseBody String connexionApplication() {
return "Hello World !";
}
最后,如果我从浏览器或我的java代码中调用“http://localhost:8080/MyApp/helloWorld”,它会返回Hello World!