ホームページ  >  記事  >  Java  >  SpringMVCビューとRESTスタイルの詳細な分析(コード付き)

SpringMVCビューとRESTスタイルの詳細な分析(コード付き)

不言
不言オリジナル
2018-09-26 15:26:512170ブラウズ

この記事では SpringMVC ビューと REST スタイルの詳細な分析を紹介します (コード付き)。必要な方は参考にしていただければ幸いです。

ビューリゾルバーとは何ですか?

springMVC がビューを処理するために使用する 2 つの最も重要なインターフェイスは、ViewResolver と View です。

ViewResolver の主な機能は、論理ビュー名を実際のビューに解決することです。SpringMVC では、View オブジェクトをクライアントに提示するために使用され、ViewResolver は論理ビュー名を実際のビューに変換するだけです。オブジェクトに解決される実際のビュー。

View インターフェイスの主な機能は、ビューを処理してクライアントに返すことです。

ビュー パーサーの実行プロセス:

リクエスト メソッドが実行された後、最終的に ModelAndView オブジェクトが返されます。 String 、 View、ModelMap およびその他の型を返す SpingMVC は、最終的にそれらを内部で ModelAndView オブジェクトにアセンブルします。このオブジェクトには、モデル オブジェクトの論理名とビューが含まれます。 StringMVC は、ビュー パーサーを使用して最終ビュー オブジェクトを取得します。最終ビューは、JSP またはその他のファイル形式のビューです。レンダリング プロセッサは、最終的にどの方法が採用されるかには関係なく、モデル データを生成する作業に重点を置き、常に MVC の完全な分離を実現します。

View:

ビューの役割は、モデル データをレンダリングし、モデル内のデータを何らかの形式でユーザーに提示することです。 View Model と特定の実装テクノロジの分離を実現するために、Sping は View インターフェイスを定義します。ビュー オブジェクトはビュー リゾルバによってインスタンス化され、ビューはステートレスであるため、スレッド セーフの問題はありません。

一般的に使用されるビュー実装クラス:

InternalResourceView: JSP リソースをビューにカプセル化し、デフォルトで springmvc によって使用されるビュー パーサーです。

JstlView: jstl パッケージ springmvc を JSP プロジェクトに導入すると、このパーサーが自動的に使用されます。

MapingJackJsonView: Jackson オープン ソース フレームワークの ObjectMapper を通じて、モデルを Json モードで出力します。

#AbstractExcelView: POI に基づいて Excel ドキュメントを構築する Excel ドキュメント ビューの抽象クラス

#AbstractPdfVIew: iText に基づいて Pdf ドキュメントを構築する PDF ドキュメント ビューの抽象クラス

BeanNameViewResolver: 論理ビュー名を Bean に解決します。Bean の ID は論理ビュー名と同じです。

ビュー リゾルバーの役割は比較的単純で、論理ビューを特定のビュー オブジェクトに解析するだけです。すべてのビュー リゾルバーは ViewResolver インターフェイスを実装する必要があります。

JSP は最も一般的に使用されるビュー テクノロジであり、InternalResourceView をビュー パーサーとして使用できます


JSTL タグがプロジェクトに導入されている限り、springmvc はビュー InternalResourceView をそのサブクラスである JstlView に自動的に変換します。

各ビュー パーサーは Ordered インターフェイスを実装し、パーサーの優先順位を設定できる order 属性を開発します。順序が小さいほど、優先順位が高くなります。春 MVC は、解析が成功してビュー オブジェクトが返されるまで、ビュー パーサーの順序の優先順位に従って論理ビュー名を解析します。そうでない場合は、ServletException がスローされます。

カスタム ビュー:

@Component
public class MyView implements View {

    @Override
    public String getContentType() {
        return "text/html";
    }

    @Override
    public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
            response.getWriter().println("<h1>Spring MVC Custom view</h1>");
    }

}

このカスタム ビューを View インターフェイスに実装し、インターフェイス内の 2 つのメソッドをオーバーライドする必要があります。次に、このクラスを Bean として宣言し、管理のために Spring に渡します。ここでは、beanName リゾルバーを設定します。

<!-- 配置BeanName解析器 -->
    <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="1"/>
    </bean>

次に、リクエストを書き込みます。このリクエストは、デフォルトでは、最初の文字が小文字でキャメルケースで表示されます。

@RequestMapping("myView")    public String myView(){
        System.out.println("myView load ...");        
        return "myView";
    }

このようにして、カスタム ビューを完成させることができます。

# オフおよびリダイレクト: 戻り文字列に「

redirect :##」が含まれる場合#" または "

forward:" を指定すると、SpringMvc が特別な処理を実行します。 #ビューに直接アクセスする必要がある場合は、次のように構成できます

#

<!– 直接配置对应的视图访问路径 -->
<mvc:view-controller path="/hello" view-name="hello.jsp" />
<!-- 如果配置了mvc-controller会导致其它页面没法正常访问,还需要添加一个标签 -->
<mvc:annotation-driven />
REST 章

REST (Representational State Transfer): これは、(リソース) プレゼンテーション層の状態転送です。 リソース: ネットワーク上のエンティティ、またはネットワーク上の情報。これは、テキスト、曲、画像などです。各リソースには、特定の固有の URL を指定できます。このリソースに直接アクセスするだけです。 表現層: リソースが表示される形式。 状態転送: リクエストが発行されるたびに、クライアントとサーバー間の対話が行われます。 HTTP プロトコルはステートレス プロトコルです。つまり、すべての状態がサーバー側に保存されます。クライアントがサーバーを操作したい場合は、何らかの手段を使用してサーバーに状態変換を実行する必要があります。この変換はプレゼンテーション層に基づいているため、これがプレゼンテーション層の状態変換です。

在我们的SpringMVC之中支持HTTP四种请求状态,REST规定的HTTP协议中四种表示操作方式的动词

GET请求:获取资源

POST请求:新建资源

PUT:更新资源

DELETE:删除资源

我们需要在WEB.xml中配置实现PUT,DELETE请求方式,大家都知道在我们传统的HTML中只有GET,POST两种请求方式。

<!-- 配置HiddenHttpMethodFilter过滤器实现PUT,DELETE请求 -->
<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>
        org.springframework.web.filter.HiddenHttpMethodFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

GET请求

GET请求:
<a href="rest/testRest/10">test RestGet请求</a><br><br>

@RequestMapping(value="/testRest/{id}",method=RequestMethod.GET)
public String testRestGet(@PathVariable Integer id){
    System.out.println("GET请求,获取id为:" + id + "的对象!");
    return SUCCESS;
}

Post请求

POST请求:
<form action="rest/testRest" method="post">
    <input type="submit" value="post请求" />
</form>

@RequestMapping(value="/testRest",method=RequestMethod.POST)
public String testRestPost(){
    System.out.println("POST请求,添加新的对象!");
    return SUCCESS;
}

PUT和DELETE请求想要使用必须添加上面的过滤器,并且在Post请求中加上隐藏域name="_method",value="PUT/DELETE"。

PUT,请求其实是由POST请求转换而来的。

PUT请求:
<form action="rest/testRest" method="post">
    <!-- 添加隐藏域,名称为_method,value为请求方式 -->
    <input type="hidden" name="_method" value="PUT" />
    <input type="submit" value="put请求" />
</form>

@RequestMapping(value="/testRest",method=RequestMethod.PUT)
public String testRestPut(){
    System.out.println("PUT请求,更新操作!");
    return SUCCESS;
}

DELETE请求

DELETE请求:
<form action="rest/testRest/10000" method="post">
    <!-- 添加隐藏域,名称为_method,value为请求方式 -->
    <input type="hidden" name="_method" value="DELETE" />
    <input type="submit" value="delete请求" />
</form>

@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id){
    System.out.println("DELETE请求,删除操作!" + id);
    return SUCCESS;
}

重复一次第一章的内容在我们springmvc拦截所有请求会导致css,js,图片等不能引入我们可以这样解决:

<!--将非mapping配置下的请求交给默认的Servlet来处理-->
<mvc:default-servlet-handler/>
<!--如果添加了默认servlet,mvc请求将无效,需要添加annotation-driven-->
<mvc:annotation-driven></mvc:annotation-driven>

以上がSpringMVCビューとRESTスタイルの詳細な分析(コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。