1

私は次のコントローラーを持っています...

@Controller
@RequestMapping(value = "/userManagement")
public class UserManagementController {

@RequestMapping(value = "/", method = RequestMethod.GET)
    public Object home(Locale locale, Model model) {

        logger.info("User management view controller loaded...");

        return "userManagement";
    }

@RequestMapping(value = "/createUserView", method = RequestMethod.GET)
    public Object createUser(Locale locale, Model model) {
        logger.info("create controller loaded...");
        return "createUser";
    }

私のサーブレットコンテキストは次の値で設定されています...

<beans:bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

次に行くとhttp://localhost:8080/myapp/userManagement、まさに私が望むビュー userManagement.jsp を取得します...

しかし、私が行くとhttp://localhost:8080/myapp/userManagement/createUserView、404エラーが発生します。

NetworkError: 404 Not Found - http://localhost:8080/myapp/userManagement/createUserView"

上記とまったく同じように requestMapping を設定し、/WEB-INF/views に createUser.jsp と userManagement.jsp があるため、なぜこれが発生するのかわかりません。

spring mvc からのビューの提供に関して、私が間違っていることはありますか?

ありがとう、

編集: 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_2_5.xsd" version="2.5">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml 
    /WEB-INF/spring/security-app-context.xml
    /WEB-INF/spring/appServlet/servlet-context.xml</param-value>
  </context-param>
  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <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/servlet-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>

EDIT2:

また、Ajax を使用するのではなく、ブラウザーのアドレスに直接アクセスすると (myapp/userManagement/createUserView に移動すると、エラーが発生します...

HTTP ステータス 404 - /myapp/WEB-INF/views/userManagement/createUserView.jsp そのため、参照しているディレクトリが高すぎるように見えます (ただし、ファイル名も間違っています)。

EDIT3。

わかりました、次のことをしてもそうです..

    @Controller
@RequestMapping(value = "/userManagement")
public class UserManagementController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
        public Object home(Locale locale, Model model) {

            logger.info("User management view controller loaded...");

            return "createUser";
        }

まだ userManagement.jsp ページが表示されているため、このリターンが正しく起動していないように見えますが、その理由はわかりません。ロガーの詳細は引き続きコンソールに送信されるため、実際にはそこに到達しています。springmvc が JSP を返す方法がおかしいだけです。

4

2 に答える 2

1

2つのことを確認できますか:1)コントローラーにブレークポイントを追加するか、サーバーログを見て、リクエストがメソッドに入るかどうかを確認してください。2) 最初のステップに問題がない場合は、jsp が正しいパスに存在するか、jsp の名前が正しいかどうかを確認します。

編集

リクエストに Ajax を使用している場合、コントローラーには次の requestMapping が必要です。

  @RequestMapping(value = "/url", method = RequestMethod.GET, 
  headers = "X-Requested-With=XMLHttpRequest")

そうしないと、ajax リクエストがマップされず、404 が返されます。

補足: メソッドの戻り値の型を Object から String に変更できますか? それが何かに影響するかどうかを確認しますか?

于 2012-07-10T20:21:43.140 に答える
0

あなたの web.xml マッピングが間違っていると思います。次のようにする必要があります。

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

/*( url-pattern に注意)

于 2012-07-10T20:28:31.107 に答える