从Java调用spring servlet

时间:2016-03-08 22:29:42

标签: java spring spring-mvc servlets

我是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());
    }

}

3 个答案:

答案 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!