これが私のWeb.xmlです
dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/servlet-context.xml 1
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
私のservlet-context.xml
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/views/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
そして最後に、Handlerクラス。 com.springexample.controller.implの下にあります
@Controller
public class IndexControllerImpl implements IndexController {
@RequestMapping("/")
public String index() {
return "index";
}
}
ただし、localhost:8080/projectname/
404エラーを返します。
Jul 27, 2013 8:18:31 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/WEB-INF/views/index.jsp] in DispatcherServlet with name 'dispatcherServlet'
Jul 27, 2013 8:18:37 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/index] in DispatcherServlet with name '
これが私のプロジェクト構造です
Web.xmlを設定すると、特に問題になります:
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Webアプリに対するすべてのリクエストは、DispatcherServlet
に送信されます。これには、/tasklist/
、/tasklist/some-thing.html
、/tasklist/WEB-INF/views/index.jsp
などのリクエストが含まれます。
このため、コントローラーが.jsp
を指すビューを返すと、サーバーコンテナーがリクエストを処理できるようにする代わりに、DispatcherServlet
が飛び込んで、これを処理できるコントローラーを探し始めます。リクエストが見つからないため、404
が見つかりません。
解決する最も簡単な方法は、サーブレットのURLマッピングを次のようにすることです。
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
*
がないことに注意してください。これは、path info
を含まないリクエスト(末尾に.xxxのないURL)をDispatcherServlet
に送信する必要があることをコンテナに伝えます。この構成では、xxx.jsp
リクエストが受信されると、DispatcherServlet
は参照されず、サーブレットコンテナのデフォルトサーブレットがリクエストを処理し、予想どおりにjspを提示します。
これがお役に立てば幸いです。以前のコメントでは問題が解決したと述べていますが、解決策はmethod=RequestMethod.GET
をRequestMethod
に追加するだけではいけません。
私は同じ問題を抱えています...私はプロジェクト名を変更し、この問題を抱えています...私の解決策はプロジェクトの参照をチェックし、web.xmlで/
の代わりに/*
を使用することでした
最初にJavaクラスが[PROJECT_NAME]\target\classesディレクトリにコンパイルされているかどうかを確認します。
そうでない場合は、Javaクラスでコンパイルエラーが発生します。
インデックスメソッドでModelオブジェクトを渡してみてください。
@RequestMapping("/")
public String index(org.springframework.ui.Model model) {
return "index";
}
実際には、スプリングコンテナはマッピングメソッドでModelオブジェクトを探します。同じものが見つかった場合、返される文字列をビューリゾルバにビューとして渡します。
お役に立てれば。
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
ちょっとあなたのweb.xmlで/を使用してください(/ *の代わりに)
Context.xmlを含むMETA-INFフォルダーを追加しました
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/SpringGradleDemo"/>
SpringGradleDemoは私のプロジェクト名であり、動作します。私のサーブレットマッピングは「/」です。ここで読みます https://Tomcat.Apache.org/Tomcat-5.5-doc/config/context.html
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
変更先:
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>