0

Springで単純な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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>TestApp</display-name>  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <!-- Processes application requests -->
  <servlet>
      <servlet-name>appServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring/appServlet/appServlet-context.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>        

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

</web-app>

appServlet-context.xml

       <?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:mvc="http://www.springframework.org/schema/mvc"
            xmlns:context="http://www.springframework.org/schema/context"
            xsi:schemaLocation="
                http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
                http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

        <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

        <!-- Scans within the base package of the application for @Components to configure as beans -->
        <!-- @Controller, @Service, @Configuration, etc. -->
        <context:component-scan base-package="com.testApp" />

        <!-- Enables the Spring MVC @Controller programming model -->
        <mvc:annotation-driven />   


    </beans>

およびHomeController

package com.testApp.Controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {

    @RequestMapping(value = "/")
    public String home() {
        System.out.println("HomeController: Passing through...");
        return "WEB-INF/Views/Home.jsp";
    }
}

問題は、常に404エラーが発生し、HomeController: Passing through...コンソールに出力されないため、HomeControllerが呼び出されないことです。

これは、コンソールに出力される別のプロジェクトでは正常に機能していましHomeController: ...たが、ビューを表示できなかったため、これを機能させるのに数時間失敗した後、新しいプロジェクトを作成することにしました。コントローラーさえ呼び出されないようです。

誰もが何が問題なのか知っています

4

2 に答える 2

0

間違った URL にアクセスしているだけだと思います。あなたが投稿したものはすべて正常に動作します。あなたが投稿したものと簡単なHome.jspを使用して、サンプルプロジェクトをまとめました。次の手順で試してみて、動作することを確認できます。

git clone git://github.com/zzantozz/testbed.git tmp
cd tmp/stackoverflow/11678699-basic-springmvc
mvn jetty:run

次に、に移動しhttp://localhost:8080/11678699-basic-springmvc/ます (申し訳ありませんが、Stackoverflow では、「localhost」をホストとしてハイパーリンクを作成することはできなくなりました)。「こんにちは」(Home.jsp) が表示され、コントローラーによってコンソールに出力されたメッセージが表示されます。

于 2012-12-18T02:16:05.880 に答える
0

それが役立つかどうかはわかりませんが、パッケージの名前は常に小文字にする必要があります。これは、混乱の原因になる可能性があるためです.Windowsマシンでは、フォルダ名は異なるパッケージで同じになるためです(aAAとaaaの両方) 1つのフォルダに入ります)。これは、自動スキャンに悪影響を及ぼします。

Weblogic サーバーでこのような問題が発生しました。サーバーの起動時に Bean が選択されましたが、アプリケーションの再デプロイ後に component-scan が機能しなくなり、一部の Bean (コントローラー) が動作中のアプリから不思議なことに消えてしまいました。根本的な原因は、最初にパッケージ名にタイプミスがあり、weblogic がディレクトリ名に大文字を使用してフォルダ構造を作成することを強制したことです。惨めなパッケージディレクトリを手動で削除した後、すべてが修正されました(ただし、問題の原因を見つけるのに数日かかりました)。

パッケージの命名規則

以前のプロジェクトについては、おそらく「WEB-INF\」(および「\Views\」) の部分を削除する必要があります。jsp プレフィックスを指定して、独自のビュー リゾルバーを宣言できます。

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/views/" />
       <property name="suffix" value=".jsp" />
    </bean>
于 2012-07-27T09:55:57.723 に答える