私はすでにstackoverflowに関するほぼすべての関連記事をチェックアウトしましたが、私は問題を解決することができません。
コードは次のとおりです。web.xml:
<display-name>Spring3MVC</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.html</url-pattern>
<url-pattern>/</url-pattern>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
spring-servlet.xml:
<context:component-scan base-package="com.mycompany.elso" />
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<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>
myController:
public class myController {
@RequestMapping("/hello")
public ModelAndView helloWorld() {
String message = "Hello World, Spring 3.0!";
return new ModelAndView("hello", "message", message);
}
}
Webページ/ index.jsp:
<html>
<head>
<title>Spring 3.0 MVC Series</title>
</head>
<body>
<a href="hello.html">Say Hello</a>
</body>
</html>
Webページ/ WEB-INF/jsp/hello.jsp:
<html>
<head>
<title>Spring 3.0 MVC Series: Hello World - ViralPatel.net</title>
</head>
<body>
${message}
</body>
</html>
そのため、アプリケーションを起動するとindex.jspが正しくロードされますが、hrefをクリックしてhello.jspに移動すると404エラーが発生し、サーバーログに次のように表示されます。
No mapping found for HTTP request with URI [/Elso/hello.html] in DispatcherServlet with name 'spring'
私はそのような数十の記事をチェックアウトしました、しかし私はただ間違いを見つけることができません、誰もがそれが何でありえるかについて何か考えを持っていますか?
MyControllerクラスの上に@Controller
アノテーションを追加して、次のURL /<webappname>/my/hello.html
を試すことができます。これは、org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
がmyControllerクラスの各RequestMappingの先頭に/ myを付加するためです。
追加する
<mvc:default-servlet-handler/>
spring-servlet.xmlへのリンク
あなたが使っているなら
<mvc:annotation-driven/>
spring-servlet.xmlが正しいことを確認してください。
<context:component-scan base-package="com.....controller" /> tag.
基本的には、注釈を使用したすべてのパッケージをJavaコードに含める必要があります。
また、component-scan(beanの検出用)の重複がないことを確認してください。設定XMLにすでに要素が含まれている場合は、@ ComponentScan(basePackages = ...というアノテーションが付けられているControllerクラスのいずれかで、前述のアノテーションを削除する必要があります。
私は私の問題を解決した:Java Build Path - > JREシステムライブラリ - > Edit - > Alternate JRE - > - > Finish
JDKフォルダに設定されているので例外が発生していた
確認してください
<mvc:annotation-driven/>
<context:component-scan base-package="com.hireartists.web.controllers"/>
コントローラを含む適切なパッケージを指します。
[PROJECT_NAME]\target\classes
ディレクトリを調べて、myController.class
が生成されるかどうかを確認してください。
そうでない場合は、コンパイルエラーがないかどうか、すべてのJavaソースコードを確認してください。
試してください:
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
私のために働いた!
Spring MVC設定に基づくJavaコードを使用している場合は、DefaultServletHandlerConfigurer
オブジェクトでWebMvcConfigurerAdapter
を有効にします。
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
Ur Bean xmlnsを確認してください。
私も同様の問題を抱えていた、しかし私はmvc xmlnsを加えることによってそれを解決した。
<?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:p="http://www.springframework.org/schema/p"
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.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<context:component-scan base-package="net.viralpatel.spring3.controller" />
<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>
.htmlファイルを提供したい場合は、この<mvc:default-servlet-handler />
をSpringの設定ファイルに追加する必要があります。 .htmlファイルは静的です。これが誰かに役立つことを願っています。
<mvc:annotation-driven/>
の追加は私のために働きました。 <context:component-scan ............/>
行の前に追加してください
まったく同じエラーがあり、それを理解しようとするのに長い時間がかかりました。ほとんどの場合、コンパイルエラーが原因で、Javaクラスがサーブレットに公開されませんでした。サーバーで\ tmp1\wtpwebapps [PROJECT_NAME]\WEB-INF\classes \を使用していることを確認し、コントローラークラスが公開されているかどうかを確認してください。そうでない場合は、コンパイルエラーをすべて解決する必要があります。
あなたがmavenを使っているなら、それはあなたのコントローラのためのクラスファイルを生成するのであなたがサーバ上であなたのWebアプリを実行する前にmaven installコマンドを実行してください。
コントローラに@Controller
を追加するか、どこにあなたがあなたのために@RequestMapping
を持っているかをエンドポイントにします。
これは私には似たようなアプリケーションをデプロイしている間うまくいきました。
Mavenをプロジェクトのビルドツールとして使用している場合は、プロジェクトを正しくビルドしてください。コードおよびxmlファイルの変更はコンパイル後に反映されません。
私は同じ問題を抱えていました、そして多くの調査の後で私はクラスが私の目標フォルダーで公表されていないのを発見しました。だから私はcmdから以下の2つのコマンドを実行していた
驚いたことに私はページにアクセスすることができ、エラーは消えました。あなたが以前欠けていた遵守クラスを見つけることができるでしょうターゲットフォルダから同じことを確認することができます。
Spring Social に依存している場合は、WebコントローラBeanが設定されていることを確認してください。
import org.springframework.context.annotation.Bean;
import org.springframework.social.connect.web.ConnectController;
import org.springframework.social.connect.ConnectionFactoryLocator;
import org.springframework.social.connect.ConnectionRepository;
...
@Bean
public ConnectController connectController(ConnectionFactoryLocator connectionFactoryLocator, ConnectionRepository connectionRepository) {
return new ConnectController(connectionFactoryLocator, connectionRepository);
}
それはコントローラを見つけていない、これは基本的な問題です。次のような原因が考えられます。
A. WEB-INFフォルダ内に、dispatcherServletを参照するweb.xmlファイルがあります。ここでそれはこの場合mvc-config.xmlです
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
B.このmvc-config.xmlファイルには名前空間があり、コントローラをスキャンする必要があります。
<context:component-scan base-package="org.vimal.spring.controllers" />
<mvc:annotation-driven />
C.コントローラがあるパッケージ名が正しいことを確認します。それはうまくいくはずです。
All Controllers must be Annotated with @Controller.
Tomcatサーバを削除し、Eclipseに新しいTomcat設定を追加することで私の問題は解決しました。
私も同じ問題に直面しましたが、以下に名前空間を置いた後、それはうまく機能します:
xmlns:mvc="http://www.springframework.org/schema/mvc"
Pom.xmlで、パッケージングが<packaging>war</packaging>
のようにwar
に設定されていることを確認してください。jarやその他のものには設定されていません。
Mavenを使用している場合は、これらをpom.xmlに追加してください。
<dependency>
<groupid>javax.servlet</groupid>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
<dependency>
<groupid>taglibs</groupid>
<artifactId>standard</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>
/ Elsoとは何ですか?
試してみて:
@RequestMapping("/Elso")
public class myController {
@RequestMapping("/hello")
public ModelAndView helloWorld() {
String message = "Hello World, Spring 3.0!";
return new ModelAndView("hello", "message", message);
}
}