Spring MVCの4つの提出方法

8818 ワード

Spring MVCはRESTスタイルの要求方法をサポートしています。GET、POST、PUT、DELETEの四つの要求方法はそれぞれデータベースの中のselect、insert、udate、deleteに対応しています。ブロガーは自分でSpringTestの練習項目を書いています。この四つの要求方式の応用が参考になります。コードアドレス:https://github.com/yueqi1125/SpringTest
1.RESTスタイル
REST:Representational State Transfer。(資源)は層状態転換を表す。今一番人気のあるインターネットソフトアーキテクチャです。それは構造がはっきりしていて、標準に合っています。分かりやすくて、広がりやすいです。資源:Resource。ネットワーク上のエンティティ、またはネットワーク上の具体的な情報です。テキスト、一枚の写真、一曲の歌、サービス、つまり具体的な存在です。1つのURI(統一リソースロケータ)でそれを指すことができ、各リソースは特定のURIに対応する。このリソースを取得するには、URIにアクセスすればいいので、URIは各リソースのユニークな識別子です。表現層:Representation。資源を具体的に表す形式を、その表現層といいます。例えば、テキストはtxt形式で表現できます。HTML形式、XML形式、JSON形式で表現できます。状態変換:State Transfer。一つの要求を出すたびに、クライアントとサーバの相互作用のプロセスを表します。HTTPプロトコルは、すべての状態がサーバ端に保存されている無状態プロトコルである。したがって、クライアントがサーバを操作するには、サーバー側に何らかの手段で「状態変換」を行わなければならない。このような転化は表現層の上に成り立っているので、「表現層状態転化」です。具体的には、HTTPプロトコルでは、操作方式を表す動詞が四つあります。GET、POST、PUT、DELETEです。これらはそれぞれ4つの基本的な動作に対応しています。GETはリソースを取得するために使用されます。POSTは新しいリソースを作成するために使用されます。PUTはリソースを更新するために使用されます。DELETEはリソースを削除するために使用されます。
2.プロファイル
ブラウザはPOSTとGET方法しかサポートしていないので、_を使う必要があります。method隠しフィールド通知SpringこれはPUT/DELETE要求です。このため、Spring 3.0は、これらの要求を、GET、POST、PUT、DELETE要求をサポートするように、標準的なhttp方法に変換するフィルタを追加している。このフィルタをweb.xmlファイルに配置する必要があります。

<filter>
    <filter-name>hiddenHttpMethodFilterfilter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>
filter>
<filter-mapping>
    <filter-name>hiddenHttpMethodFilterfilter-name>
    <servlet-name>DispatcherServletservlet-name>
filter-mapping>
3.フロントバックグラウンドコード
配置が完了したら、対応ページで私たちの4つの提出方式を使って前楽屋データのインタラクションができます。フロント提出データ:

<form action="stuManager/${stu.stuNo }.action" method="get">
    <input type="submit" value="  ">
form>


<form action="${ctxPath}/stuManager.action" method="post"> 
    <input type="submit" value="  ">
form>


<form action="${ctxPath}/stuManager.action" method="post">
    <input type="hidden" name="_method" value="put"/>
    <input type="submit" value="  ">
form>


<form action="stuManager/${stu.stuNo }.action" method="post">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="  ">
form>
バックグラウンド受信データ:
/**
 *     GET
 *       stuNo      
 */
@RequestMapping(value="/stuManager/{stuNo}", method=RequestMethod.GET)
public String getStuInfo(@PathVariable("stuNo") String stuNo, Map map){
    map.put("stu", us.getStuInfo(stuNo));
    //  Service         ,    map    
    return "queStu";
}

/**
 *     POST
 *       
 */
@RequestMapping(value="/stuManager", method=RequestMethod.POST)
public String addStu(Student stu, Map map){
    us.addStu(stu);
    //  Service         
    map.put("msg", "        ");
    return "addStu";
}

/**
 *     PUT
 *       
 */
@RequestMapping(value="/stuManager", method=RequestMethod.PUT)
public String updateStu(Student stu){
    us.updateStu(stu);
    //  Service         
    return "redirect:/stuList";
}

/**
 *     DELETE
 *       stuNo      
 */
@RequestMapping(value="/stuManager/{stuNo}", method=RequestMethod.DELETE)
public String delStu(@PathVariable("stuNo") String stuNo){
    us.delStu(stuNo);
    //  Service         
    return "redirect:/stuList";
}
この中でgetとpostの方法は、htmlに持参したものですが、PUTとDELETEの方法はサポートされていませんので、POST方式でこの2つの方法をシミュレートする必要があります。フォームに隠し領域を追加する必要があります。名前は「u」です。method、値はPUTまたはDELETEです。以下のコードです

<input type="hidden" name="_method" value="PUT/DELETE">