SpringフレームのRestfulスタイルに基づいて実現されるSprigMVCを詳しく説明します。


もし今システムを作りたいなら、モジュールが公告管理に属していると仮定したら、私たちはパスを手配する時にこのようにNews Actionのパスを手配します。 
追加ニュース:/pages/back/admin/news/add.action; 
ニュースリスト:/pages/back/admin/news/list.action
技術の発展につれて、新しい構造設計思想があります。つまり簡単な経路を利用して、HTTP提出モードによって違います。違う機能が完成できるということは、 
ニュースの内容を見ます。 
ニュースを削除します。
基礎整合配置
今はspring MVCを運転したい時にRetsfulのスタイルで実行できます。まず依存ライブラリを追加して、pom.xmlファイルを修正して、次のような構成を追加します。

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.8.3</version>
<version>2.8.3</version>
pom.xmlに配置する

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.3</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.8.3</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.3</version>
    </dependency>

その後、web.xmlファイルを修正する必要があります。Retsfulスタイルの開発を実現するためには、すべてのアクション要求経路に対して修正が必要です。

<servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
Member Actionプログラムクラスを作成し、次のようなプログラム操作が定義されています。

public class MemberAction {
//           ,                      (MIME)
  @RequestMapping(value="/info",produces="text/plain;charset=UTF-8")
  public @ResponseBody String info() { //                
  return "www.mldnjava.cn" ;
  }
  }
このような出力を実現するためには、レストフォールを使用していない場合には、レスポンスオブジェクトを利用して処理を完了する必要がありますが、レスポンスフォールを使用した後の全体の操作は、注解を利用して直接に方法の返却内容を具体的なテキストデータに変えることができます。

  @RequestMapping(value = "/echo/{msgParam}", produces = "text/plain;charset=UTF-8")
  public @ResponseBody String echo(@PathVariable("msgParam") String msg) {
    return "ECHO : " + msg;
  }
つまり、Retsfulの処理過程全体において、これらの経路の制御はより全面的になり、表現できる意味もより豊かになります。
Spring MVC自体は、restfulスタイルの操作をサポートしていますが、全体のRetsfulスタイルの中では、ほとんどの場合はJSONとの結合処理です。まずJSON関連のプログラム開発パッケージを配置する必要があります。

<dependency>
  <groupId>net.sf.ezmorph</groupId>
  <artifactId>ezmorph</artifactId>
  <version>1.0.6</version>
</dependency>
<dependency>
  <groupId>commons-lang</groupId>
  <artifactId>commons-lang</artifactId>
  <version>2.6</version>
</dependency>
<dependency>
  <groupId>commons-beanutils</groupId>
  <artifactId>commons-beanutils</artifactId>
  <version>1.9.2</version>
</dependency>
<dependency>
  <groupId>commons-collections</groupId>
  <artifactId>commons-collections</artifactId>
  <version>3.2.1</version>
</dependency>

この時はJSONの開発パッケージを使う必要がありますが、この開発パッケージについては独自の配置を提案します。
データの追加処理を実現する
Restfulスタイルのテーマ操作は、直接情報の受信と処理が可能であることを示し、Spring MVCで提供される自動VO受信処理と、JSON処理の結果に戻ることで、増加した動作が実現される。1、Member.JavaのVO類を創立して、このVO類は後期針がJSONに対して出力操作を変換することを考慮する必要があります。

package cn.mldn.vo;
import java.io.Serializable;
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
@SuppressWarnings("serial")
@XmlRootElement
public class Member implements Serializable {
  private Integer mid ;
  private String name ;
  private Double salary ;
  private Date hiredate ;
}

Mebmeraアクションプログラムの中で一つの処理方法を作ります。  日付を追加する処理変換器:

private Logger log = Logger.getLogger("MemberAction.class");

  @InitBinder
  public void initBinder(WebDataBinder wdb){
    wdb.registerCustomEditor(java.util.Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
  }

  @RequestMapping(value="/member",method=RequestMethod.POST,produces="application/json;charset=UTF-8")
  public @ResponseBody Object add(Member vo){
    log.info("member add  ");
    log.info("member:" + vo);
    JSONObject obj = new JSONObject();
    obj.put("flag", true);
    return obj;
  }

JSP及びJS操作を確立し、jQueryを通じて心を込めて処理を呼び出す:

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/restful_demo.js"></script>

<div id="butDiv">
<button id="addMember"> </button>
</div>
<div id="showDiv"></div>
一つのレスフルルを定義しますdempo.jsファイルは、データ検証などの操作を行います。

$(function(){
  $(addMember).on("click",function(){
    $.ajax({
      url : "member",
      type : "post",
      dataType : "json",
      data : {
        mid : 1001,
        name : "   ",
        salary : 9888.2,
        hiredate : "1999-10-12"
      },
      success : function(data){
        $(showDiv).append("<p>      "+data.flag+"</p>");
      },
      error : function(data){
        $(showDiv).append("<p>         !!!!!!!!!!!!</p>");
      }
    });
  });
}

データ更新処理
データの更新処理は主に修正・削除に値する。追加処理はすでに完了しており、修正作業が実現される。
メンバーアクションの中で最高の新しい方法:

  @RequestMapping(value="/member",method=RequestMethod.PUT,produces="application/json;charset=UTF-8")
  public @ResponseBody Object edit(Member vo){
    JSONObject obj = new JSONObject();
    log.info("edit" + vo);
    obj.put("flag", true);
    return obj;
  }
その後はレストfulにいますdemo.jsファイルの中のeditMemberファイルの中はボタンのバインディング時間です。

$(editMember).on("click",function(){
    $.ajax({
      url : "member?mid=1111&name=  &salary=999.99&hiredate=1999-90-90",
      type : "put",
      dataType : "json",
      success : function(data){
        $(showDiv).append("<h1>       "+ data.flag +"</h1>");
      },
      error : function(data){
        $(showDiv).append("<h1>       </h1>");
      }
    });
  });

ユーザ処理を削除:
Member Actionでは、関連する削除処理方法のみを定義します。

  @RequestMapping(value="/member/{mid:\\d+}",method=RequestMethod.DELETE,produces="application/json;charset=UTF-8")
  public @ResponseBody Object delete(@PathVariable("mid") int mid){
    JSONObject obj = new JSONObject();
    obj.put("flag", true);
    log.info("delete" + mid);
    return obj;
  }

jsで送るべきのはDELETE要求モードです。

  $(removeMember).on("click",function(){
    $.ajax({
      url : "member/1001",
      type : "delete",
      dataType : "json",
      success : function(data){
        $(showDiv).append("<h1>       "+ data.flag +"</h1>");
      },
      error : function(data){
        $(showDiv).append("<h1>       </h1>");
      }
    });
  });

RetsfulにPOSTモードを追加し、PUTモードを変更し、DELETEモードを削除します。
その後、データのクエリー操作を行います。
データに対するクエリー操作の最も多い形式は、単一の情報クエリとデータの改ページクエリ操作である。
単一ユーザ情報を取得する:
メンバーアクションでは、IDに基づいてユーザ情報を取得する処理動作を定義する。

@RequestMapping(value="/member/{mid:\\d+}",method=RequestMethod.GET,produces="application/json;charset=UTF-8")
  public @ResponseBody Object get(@PathVariable("mid") int mid){
    Member vo = new Member();
    vo.setMid(mid);
    vo.setName("   ");
    vo.setSalary(199.11);
    vo.setHiredate(new Date());
    return vo;
  }

フロントページでは、jsを使って呼び出し、戻った結果をそのまま出力します。

$(listMember).on("click",function(){
    $.ajax({
      url : "member/mid",
      type : "patch",
      dataType : "json",
      success : function(data){
        $(showDiv).append("<h1> "+data.condition+" </h1>");
        $(showDiv).append("<h1> "+data.memberCount+" </h1>");
        console.log(data.allMembers.length);
        for(var x = 0 ; x < data.allMembers.length ; x ++){
          $(showDiv).append("<h1>       "+ data.allMembers[x].mid +", "+data.allMembers[x].name+" "+data.allMembers[x].salary+" "+new Date(data.allMembers[x].hiredate).format("yyyy-MM-dd hh:mm:ss")+"</h1>");
        }
      },
      error : function(data){
        $(showDiv).append("<h1>         </h1>");
      }
    });
  });

jsページで時間日付関数を処理します。

Date.prototype.format = function(fmt) {
  var o = {
    "M+" : this.getMonth() + 1, //
    "d+" : this.getDate(), //
    "h+" : this.getHours(), //
    "m+" : this.getMinutes(), //
    "s+" : this.getSeconds(), //
    "q+" : Math.floor((this.getMonth() + 3) / 3), //
    "S" : this.getMilliseconds()
    //
  };
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "")
        .substr(4 - RegExp.$1.length));
  for ( var k in o)
    if (new RegExp("(" + k + ")").test(fmt))
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k])
          : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
}

最後に改ページリストの操作を行います。
改ページリストの制御を行うには、いくつかの改ページの制御パラメータを渡す必要があります。ラインSize、currentPage、column、keyWord、これらのパラメータの受信制御を行うには、別の改ページツールクラスを作成するのが一番いいです。
SplityUtilツールクラスを定義します。このツールは自動的に伝達パラメータの内容を受け入れることができます。

public class Member {
  private Integer mid;
  private String name;
  private Double salary;
  private Date hiredate;
  public Integer getMid() {
    return mid;
  }
  public void setMid(Integer mid) {
    this.mid = mid;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Double getSalary() {
    return salary;
  }
  public void setSalary(Double salary) {
    this.salary = salary;
  }
  public Date getHiredate() {
    return hiredate;
  }
  public void setHiredate(Date hiredate) {
    this.hiredate = hiredate;
  }
  @Override
  public String toString() {
    return "Member [mid=" + mid + ", name=" + name + ", salary=" + salary + ", hiredate=" + hiredate + "]";
  }

メンバーアクションの中で一番いいのは、改ページの制御表示方法です。

@RequestMapping(value="/member/{condition}",method=RequestMethod.PATCH,produces="application/json;charset=UTF-8")
  public @ResponseBody Object list(@PathVariable("condition") String condition,SplitPageUtil su){
    List<Member> all = new ArrayList<Member>();
    for(int x = (su.getCp()-1) * su.getLs() ; x < su.getCp() * su.getLs() ; x ++){
      Member vo = new Member();
      vo.setMid(x);
      vo.setName("   - " + x );
      vo.setSalary(1000.00 + x*35);
      vo.setHiredate(new Date());
      all.add(vo);
    }
    for (Member member : all) {
      System.out.println(member);
    }
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("memberCount", 892349);
    map.put("allMembers", all);
    map.put("condition", condition);
    return map;
  }

jsの中でjsファイルを作成して改ページの呼び出しを行います。

$(listMember).on("click",function(){
    $.ajax({
      url : "member/mid",
      type : "patch",
      dataType : "json",
      success : function(data){
        $(showDiv).append("<h1> "+data.condition+" </h1>");
        $(showDiv).append("<h1> "+data.memberCount+" </h1>");
        console.log(data.allMembers.length);
        for(var x = 0 ; x < data.allMembers.length ; x ++){
          $(showDiv).append("<h1>       "+ data.allMembers[x].mid +", "+data.allMembers[x].name+" "+data.allMembers[x].salary+" "+new Date(data.allMembers[x].hiredate).format("yyyy-MM-dd hh:mm:ss")+"</h1>");
        }
      },
      error : function(data){
        $(showDiv).append("<h1>         </h1>");
      }
    });
  });
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。