Springbootは、jspとhtmlを同時に持つ複数のビュー解析器を構成します.
くだらない話が少し多い.皆さん、ご了承ください.焦ったら、直接最後まで引き下がることができます.上は私の解決過程です.
この問題は一般的には遭遇できないが、私たちのプロジェクトが奇抜なせいだ.事はこのようにして、私达の先に开発したプロジェクトは1つの古いプロジェクトに集積して、新しいプロジェクトはhtmlを使って、しかし古いプロジェクトはJspを使って、その上古いプロジェクトの机能は完璧で、ただ先端は少し问题があります.
問題があったら、解決しなければならないでしょう.今はいろいろな方法があります:1、JspをHtmlに変更します;2、request.getDispacter()はジャンプします.3、springのビュー解析器を検討します.
1つ目は、本当に面倒で、私のような怠け者はやむを得ずこのような方法を採用しません.
2つ目は、1つ目よりも面倒で、バックエンドを変更するだけでなく、フロントエンドを変更する必要があります.このようにジャンプするため、jspの内蔵オブジェクトで伝達パラメータを取得し、断固として捨てなければなりません.
3つ目:3つ目といえばspringビュー解析器のソースコードを話さなければなりません.
DispacterServiceletでこのメソッドを見つけると、springはすべてのビュー解析器をループし、解析結果が空でないビューを返すことがわかります.
したがって、jspを返し、htmlを返すには、Jspのビュー解析器を追加する必要があります.
インターネット上の資料検索とプログラマーとしての経験とソースコード(具体的なソースコードはどこにあるか忘れました)を経て、ビュー解析器には接頭辞、接尾辞などが含まれなければならないことがわかりました.
加えてプロジェクトを開始すると、プロジェクトはすべてjspとしてジャンプしていることがわかりました.解析してみると、orderのせいか、前のDispacterServiceletのコードも言っていたので、viewが空でない限り戻ってくる可能性があります.それから私はhtmlビュー解析器をもう1つ配合して、デフォルトではありませんて、しかも私は優先度も修正して、コードは以下の通りです.
しかしこのようにすべてhtmlに解析して行って、私は再びソースコードについていかなければならなくて、たとえページがなくても、viewは依然として空いていないことを発見して、このようにきっとすべてHtmlとして処理したのではありませんか、私达は今1つのこのページがあるかどうかを検出することができるものが必要です.振り回された後、このようなクラスを作成する必要があります.
実際にはインスペクタです.次に、カスタム解析器にインスペクタを設定します.最終的なコードは次のとおりです.
この問題は一般的には遭遇できないが、私たちのプロジェクトが奇抜なせいだ.事はこのようにして、私达の先に开発したプロジェクトは1つの古いプロジェクトに集積して、新しいプロジェクトはhtmlを使って、しかし古いプロジェクトはJspを使って、その上古いプロジェクトの机能は完璧で、ただ先端は少し问题があります.
問題があったら、解決しなければならないでしょう.今はいろいろな方法があります:1、JspをHtmlに変更します;2、request.getDispacter()はジャンプします.3、springのビュー解析器を検討します.
1つ目は、本当に面倒で、私のような怠け者はやむを得ずこのような方法を採用しません.
2つ目は、1つ目よりも面倒で、バックエンドを変更するだけでなく、フロントエンドを変更する必要があります.このようにジャンプするため、jspの内蔵オブジェクトで伝達パラメータを取得し、断固として捨てなければなりません.
3つ目:3つ目といえばspringビュー解析器のソースコードを話さなければなりません.
protected View resolveViewName(String viewName, @Nullable Map model,
Locale locale, HttpServletRequest request) throws Exception {
if (this.viewResolvers != null) {
for (ViewResolver viewResolver : this.viewResolvers) {
View view = viewResolver.resolveViewName(viewName, locale);
if (view != null) {
return view;
}
}
}
return null;
}
DispacterServiceletでこのメソッドを見つけると、springはすべてのビュー解析器をループし、解析結果が空でないビューを返すことがわかります.
したがって、jspを返し、htmlを返すには、Jspのビュー解析器を追加する必要があります.
インターネット上の資料検索とプログラマーとしての経験とソースコード(具体的なソースコードはどこにあるか忘れました)を経て、ビュー解析器には接頭辞、接尾辞などが含まれなければならないことがわかりました.
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/");
viewResolver.setSuffix(".jsp");
viewResolver.setOrder(0);
viewResolver.setContentType("text/html;charset=UTF-8");
return viewResolver;
}
加えてプロジェクトを開始すると、プロジェクトはすべてjspとしてジャンプしていることがわかりました.解析してみると、orderのせいか、前のDispacterServiceletのコードも言っていたので、viewが空でない限り戻ってくる可能性があります.それから私はhtmlビュー解析器をもう1つ配合して、デフォルトではありませんて、しかも私は優先度も修正して、コードは以下の通りです.
@Bean
public InternalResourceViewResolver htmlViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/");
viewResolver.setSuffix(".html");
viewResolver.setOrder(0);
viewResolver.setContentType("text/html;charset=UTF-8");
return viewResolver;
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/");
viewResolver.setSuffix(".jsp");
viewResolver.setOrder(1);
viewResolver.setContentType("text/html;charset=UTF-8");
return viewResolver;
}
しかしこのようにすべてhtmlに解析して行って、私は再びソースコードについていかなければならなくて、たとえページがなくても、viewは依然として空いていないことを発見して、このようにきっとすべてHtmlとして処理したのではありませんか、私达は今1つのこのページがあるかどうかを検出することができるものが必要です.振り回された後、このようなクラスを作成する必要があります.
public class HandleResourceViewExists extends InternalResourceView {
@Override
public boolean checkResource(Locale locale) {
File file = new File(this.getServletContext().getRealPath("/") + getUrl());
return file.exists(); //
}
}
実際にはインスペクタです.次に、カスタム解析器にインスペクタを設定します.最終的なコードは次のとおりです.
@Bean
public InternalResourceViewResolver htmlViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/");
viewResolver.setViewClass(HandleResourceViewExists.class); //
viewResolver.setSuffix(".html");
viewResolver.setOrder(0);
viewResolver.setContentType("text/html;charset=UTF-8");
return viewResolver;
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(HandleResourceViewExists.class); //
viewResolver.setPrefix("/WEB-INF/");
viewResolver.setSuffix(".jsp");
viewResolver.setOrder(0);
viewResolver.setContentType("text/html;charset=UTF-8");
return viewResolver;
}