1

Spring MVC での開発は初めてです。jsp ファイルからコントローラを呼び出そうとしています。コントローラーに requestmapping アノテーションを付けましたが、次の URL にある mainview.jsp から呼び出そうとすると、(localhost でテストしています) "/AirlineDB_Spring/views/mainview.jsp" (これは正常に動作します)、プロジェクト名が URL から消え、このアドレスを取得すると 404: "/passengers/" が表示されます。リンクから "AirlineDB_Spring/" が消える理由がわかりません。これが主な問題のようです。

私のコントローラーコード:

@Controller
@RequestMapping(value="/passengers")
public class PassengerController{

    @SuppressWarnings("unchecked")
    @RequestMapping(method=RequestMethod.GET)
    public String list(Model model) {
        List<String> tl = new ArrayList<String>();
        tl.add("one");
        tl.add("two");
        tl.add("three");
        model.addAttribute("testlist", tl);
        return "mainview";
    }

私のjspファイルのコードは次のとおりです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Airline Database</title>
</head>
<body>
     <h2>Passengers</h2>
     <a href="/passengers/">click</a>
     <c:forEach items="${model.testlist}" var="test" varStatus="loopStatus">
         ${loopStatus.count}  ${test}<br/>
     </c:forEach>
</body>
</html>

私の web.xml ファイル:

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:WEB-INF/spring/*.xml</param-value>
  </context-param>

  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <servlet>
     <servlet-name>airlinedb</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
  </servlet>

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

servlet-context.xml には次のものが含まれます。

 <context:annotation-config/>
 <context:component-scan base-package="airlinedb.controller"/>
 <mvc:annotation-driven/>

インターネットを検索したところ、コントローラーのマッピングに関連する多くの問題が見つかりましたが、どれもうまくいきませんでした。また、href="/passenger" を使用してコントローラーを呼び出してみましたが、同じ 404 が返されました。間違った URL を取得していることはわかりますが、何が間違っているのかわかりません。誰でも私を助けることができますか?

4

3 に答える 3

2

これを行う<a href="/passengers/">と、次のような場所に送信されますhttp://localhost:8080/passengers/

それはあなたが望むものではありません。あなたがしたいhttp://localhost:8080/AirlineDB_Spring/passengers/

したがって、使用する<a href="/AirlineDB_Spring/passengers/"> か、それを使用するかのどちらかです<a href="${pageContext.servletContext.contextPath}/passengers/">。2 番目のオプションの方が適切です。

また、RequestMapping にマッピング値を追加するとよいでしょう。次のように使用してみてください。

@SuppressWarnings("unchecked")
    @RequestMapping(value="/",method=RequestMethod.GET)
    public String list(Model model) {
        List<String> tl = new ArrayList<String>();
        tl.add("one");
        tl.add("two");
        tl.add("three");
        model.addAttribute("testlist", tl);
        return "mainview";
    }

value="/" を @RequestMapping に追加します。

于 2013-07-11T16:17:46.713 に答える
1

これのいずれかが機能するはずです。デフォルトのマッピングである index メソッドを使用できます。

@RequestMapping(value="/", method=RequestMethod.GET)
    public String list(Model model) {
        // ...
    }

または、代わりに次のようにlist名前を変更しindexます

 @RequestMapping(method=RequestMethod.GET)
        public String index(Model model) {
            // ...
        }
于 2013-07-11T07:39:56.893 に答える