70

I am developing a website with Spring, and am trying to serve resources that are not .jsp files (.html for example)

right now i have commented out this part of my servlet configuration

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
        p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />

And tried to return fromthe controller the full path to the resource.

@Controller
public class LandingPageController {

protected static Logger logger = Logger.getLogger(LandingPageController.class);

@RequestMapping({"/","/home"})
public String showHomePage(Map<String, Object> model) {
    return "/WEB-INF/jsp/index.html";   
   }
}

the index.html file exists in that folder.

NOTE: when i change the index.html to index.jsp my server now serves the page correctly.

Thank you.

4

9 に答える 9

104

最初の問題は、構成でプロパティが指定されているsuffix=".jsp"ため、ViewResolver 実装クラスが.jspメソッドから返されるビュー名の末尾に追加されることです。

ただし、コメントアウトしたためInternalResourceViewResolver、残りのアプリケーション構成によっては、他の ViewResolver が登録されていない可能性があります。今は何も機能していないことに気付くかもしれません。

.htmlファイルは静的であり、サーブレットによる処理を必要としないため、<mvc:resources/>マッピングを使用する方が効率的で簡単です。これには Spring 3.0.4+ が必要です。

例えば:

<mvc:resources mapping="/static/**" location="/static/" />

で始まるすべてのリクエストをディレクトリに渡します。/static/webapp/static/

したがって、メソッドを挿入index.htmlwebapp/static/て使用することによりreturn "static/index.html";、Spring はビューを見つける必要があります。

于 2013-03-18T15:17:54.350 に答える
8

サーブレット構成ファイルでview-controllerタグ (Spring 3)を使用できるため、そのためのコントローラー メソッドを実装する必要がないことを付け加えておきます。

<mvc:view-controller path="/" view-name="/WEB-INF/jsp/index.html"/>
于 2013-12-03T12:07:08.927 に答える
7

同じ View リゾルバを引き続き使用できますが、サフィックスを空に設定できます。

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
    p:prefix="/WEB-INF/jsp/" p:suffix="" />

以下のサンプルに示すように、コードは index.html または index.jsp のいずれかを返すように選択できるようになりました -

@RequestMapping(value="jsp", method = RequestMethod.GET )
public String startJsp(){
    return "/test.jsp";
}

@RequestMapping(value="html", method = RequestMethod.GET )
public String startHtml(){
    return "/test.html";
}   
于 2013-03-18T14:56:13.203 に答える
1

私は同じ問題に直面し、Spring MVC から html ページをロードするためにさまざまな解決策を試しました。

サーバーの web.xml のステップ 1 で、これらの 2 行をコメント化します。

<!--     <mime-mapping>
        <extension>htm</extension>
        <mime-type>text/html</mime-type>
    </mime-mapping>--> 
<!--     <mime-mapping>
        <extension>html</extension>
        <mime-type>text/html</mime-type>
    </mime-mapping>
 -->

ステップ-2 アプリケーションの Web xml に次のコードを入力します

  <servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

Step-3 静的コントローラ クラスを作成する

@Controller 
public class FrontController {
     @RequestMapping("/landingPage") 
    public String getIndexPage() { 
    return "CompanyInfo"; 

    }

}

Spring 構成ファイルのステップ 4 で、サフィックスを .htm .htm に変更します。

Step-5 ページの名前を .htm ファイルに変更し、WEB-INF に保存して、サーバーをビルド/起動します。

localhost:8080/.../landingPage
于 2016-08-05T04:05:08.513 に答える
0

p:suffix = "。jsp"の値を適宜変更してください。そうしないと、カスタムビューリゾルバーを開発できます。

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/servlet/view/UrlBasedViewResolver.html

于 2013-03-18T14:37:24.833 に答える