2016-03-08 2 views
-1

Я новичок в Spring MVC, и я пытаюсь получить доступ к весеннему сервлету из своего приложения Java и распечатать результат. Но я не могу заставить его работать. Я могу получить доступ к файлу index.jsp из навигатора по URL-адресу: http://localhost:8080/MyApp/ Но мой основной класс вызывает меня исключение java.io.FileNotFoundException: http://localhost:8080/MyApp/helloWorld. Может ли кто-нибудь мне помочь?Вызвать весенний сервлет с Java

Вот моя 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> 

Мое приложение-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

У вас есть jsp, называемый «helloWorld»?потому что весна пытается найти его, вот почему вы получаете исключение. –

+1

Вы подразумеваете, что когда вы открываете 'http: // localhost: 8080/MyApp/helloWorld' в обычном веб-браузере, он отлично работает? Если и не тогда, эта проблема не имеет ничего общего с 'URLConnection'. – BalusC

ответ

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 !"; 
    } 

Итак, наконец, если я называю «http://localhost:8080/MyApp/helloWorld» из браузера или из моего кода Java он возвращает мне Hello World!

2

Кажется, что вы пытаетесь ударить по не существующей конечной точке. Вы карту @RequestMapping («/ helloWorld.do»), и вы пытаетесь вызвать/HelloWorld

Попробуйте переименовать отображение запроса на @RequestMapping («/ HelloWorld»)

Если вы хотите использовать .do попробуйте добавить

<url-pattern>*.do</url-pattern>

к вашему сервлету

Здесь вы можете найти Spring MVC витрину

https://github.com/spring-projects/spring-mvc-showcase

Надеюсь, это поможет.

+1

Соглашение .do является остатком от Struts. – duffymo

0

Если вы хотите сохранить расширение .do, то замените отображение сервлета следующим образом.

<servlet-mapping> 
     <servlet-name>application</servlet-name> 
     <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 

удалить также .Не расширение в @RequestMapping ("/ helloWorld.do"), чтобы быть @RequestMapping ("/ HelloWorld"). По умолчанию Spring спичек/HelloWorld плюс любое расширение т.е. /helloWorld.do, /helloWorld.htm и т.д.

Это обеспечивает гибкость в том, что вам нужно всего лишь изменить отображение сервлета в web.xml использовать другое расширение

в тестовом классе использовать URL http://localhost:8080/MyApp/helloWorld.do

Смежные вопросы