0

Spring MVC を使用して REST Web アプリケーションを開発し、JSON オブジェクトをクライアントに送信できます。

Web アプリケーションに接続する Javascript/AJAX クライアントを構築したいのですが、(JSP を使用して) 最初の HTML ページを送信する方法がわかりません。AJAX が埋め込まれた JSP ページを提供する必要があることは理解しています。この AJAX は、Web サービスにリクエストを送信します。

更新: 私が達成できない要件はhttp://localhost:8084、ブラウザーでデフォルト URI ( ) を記述し、JSP ページ ( home.jsp) で記述した HTML ページを表示することです。

私のアプローチは次のとおりです。

ルート JSP ページを送信するコントローラがあります

@Controller
public class SessionController {

    @RequestMapping(value="/", method=RequestMethod.GET)
    public String homeScreen(){
        return "home";
    }
}

しかし、サーバーを実行すると、この警告が表示されます

WARNING: No mapping found for HTTP request with URI [/home] in DispatcherServlet with name 'dispatcher'

ブラウザには何も読み込まれません。

ここに私のアプリケーションコンテキストファイルがあります:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-3.1.xsd       
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
       http://www.springframework.org/schema/context       
       http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="com.powerelectronics.freesun.web" />

    <mvc:annotation-driven />

</beans>

そしてweb.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

私のアプローチは正しいですか?私は基本的な概念で間違っていますか? コード内の何かを変更して実行することはできますか? 最初のページがブラウザに読み込まれるのを見て、その方向に進みたいと思います。

前もって感謝します。

4

3 に答える 3

0

ウェルカム ファイル タグを web.xml ファイルに配置します。

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

この index.jsp は WEB-INF の外にある必要があります。その中に次のコードを入れます。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Insert title here</title>
    </head>
    <body>
        <%
            response.sendRedirect("home");
        %>
    </body>
</html>

アプリケーションがロードされると、index.jsp が呼び出され、jsp はそれを /home アクションにリダイレクトします。

次に、コントローラーが呼び出されます。

@Controller
public class SessionController {

    // see the request mapping value attribute here, it is /home

    @RequestMapping(value="/home", method=RequestMethod.GET)
    public String homeScreen(){
        return "home";
    }
}

これにより、ホーム jsp が呼び出されます。

Spring コントローラーから JSON を返したい場合は、Jackson マッパー Bean を Spring コンテキスト xml ファイルで初期化する必要があります。

<beans:bean id="jacksonMessageChanger" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <beans:property name="supportedMediaTypes" value="application/json" />
</beans:bean>

<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <beans:property name="messageConverters">
        <util:list id="beanList">
            <beans:ref bean="jacksonMessageChanger" />
        </util:list>
    </beans:property>
</beans:bean>

jackson マッパーを使用するには、jar または maven の依存関係を追加する必要があります。

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.8.5</version>
</dependency>

コントローラーから JSON を返すには、メソッドは次のようになります。

@RequestMapping(value="/getContacts", method=RequestMethod.GET)
public @ResponseBody List<Contacts> getContacts(){
        List<Contacts> contactList = prepareContactList();
        return contactList;
}

このようにして、オブジェクトの形式で ajax 呼び出しの成功関数でリストを取得し、それを反復することで詳細を取得できます。

于 2012-11-04T07:02:56.083 に答える
0

Finally I solve this only with configuring the dispatcher in web.xml on a different way.

First I added the view resolver to the servlet configuration file as David Riccitelli suggested me:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

And then I configured the servlet mapping in web.xml:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

That's what I was looking for, and no extra configuration is needed. Doing this I call my root URL http://localhost:8084 and I can see the home screen I have coded in home.jsp.

Thanks for your support and suggestions.

于 2012-11-05T14:48:00.993 に答える
0

@ResponseBodyメソッドに注釈を追加してみてください。

@Controller
public class SessionController {

    @RequestMapping(value="/", method=RequestMethod.GET)
    @ResponseBody
    public String homeScreen(){
        return "home";
    }
}

これはページに出力homeされるはずです。

JSP などのView テクノロジを使用する場合は、 Spring Framework の公式ドキュメントの次の章を確認してください。 spring-framework-reference.html#view

アップデート

「Spring と統合する他のビュー テクノロジーと同様に、JSP の場合、ビューを解決するビュー リゾルバーが必要になります」. JSP を使用する場合は、Web アプリケーション コンテキストに次を追加し、処理するファイルの名前を返す必要があります。

<!-- the ResourceBundleViewResolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
  <property name="basename" value="views"/>
</bean>

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  <property name="prefix" value="/WEB-INF/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>

上記は Web アプリケーションのコンテキストに存在しますか? 詳細については、公式ドキュメントを参照してください: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#view-jsp-resolver

于 2012-10-31T17:13:50.557 に答える