用Jersey构建RESTful服务9--Jersey+SQLServer+Hibernate4.3+Spring3.2+AngularJS

一、总体说明

本例运行演示了用 Jersey 构建 RESTful 服务中,如何集成 angular,用MVC分层的方式访问 RESTful 服务。

二、环境

  • 1.上上文的项目 Demo7)
  • 2.angular 库 ,本例为1.2.3 版本
  • 3.样式 bootstrap-3.1.1.min.js

三、配置

1.完成项目结构

 创建相应的目录结构

angularjs 、bootstrap 的js,css文件放别放入相应的目录,

在js目录下再创建 app.js 、controller.js

在partials目录下再创建 create.html、 list.html 、 detail.html

完整目录结构如下

  1. list.html填入如下内容,主要是显示用户列表ng-repeat为 angularjs 迭代器 ``作用是数据绑定:

    <div class="pull-right">
        <a href="#/create" class="btn btn-default" title="Create"><span class="glyphicon glyphicon-plus"></span></a>
    </div>
    <div class="page-header">
        <h3>Users</h3>
    </div>
    <hr />
    <li ng-repeat="user in users | filter:query | orderBy:orderProp"  >

        <div class="pull-right">
           <a href="#/users/"  class="btn btn-xs btn-default" title="edit">
           <span class="glyphicon glyphicon-pencil"></span></a>
        </div>
        <h4>userId: </h4>
        <p>userName:<a href="#/users/"></a>   Age:</p>
    <hr />
    </li>

    <hr />
  1. 修改create.html用来添加用户信息,ng-model是模型

    <div class="page-header">
        <h3>Create</h3>
    </div>

    <form role="form" name="userForm">

     <div class="row">&nbsp;</div>
     <div class="row" ng-class="{'has-error': userForm.userId.$invalid}">
      <div class="col-md-1">
        <i ng-show="userForm.url.$error.required"
          class="glyphicon glyphicon-pencil"></i>
        <label for="urlInput">userId</label>
      </div>
      <div class="col-md-4">
        <input
          type="test"
          class="form-control" id="urlInput"
          name="userId" ng-model="user.userId" required>
      </div>
    </div>
    <div class="row">&nbsp;</div>

    <div class="row" ng-class="{'has-error': userForm.userName.$invalid}">
      <div class="col-md-1">
        <i ng-show="userForm.userName.$error.required"
          class="glyphicon glyphicon-pencil"></i>
        <label for="nameInput">userName</label>
      </div>
      <div class="col-md-4">
        <input
          type="text"
          class="form-control error" id="nameInput"
          name="userName"
          ng-model="user.userName"
          required>
      </div>
    </div>

    <div class="row">&nbsp;</div>
    <div class="row" ng-class="{'has-error': userForm.url.$invalid}">
      <div class="col-md-1">
        <i ng-show="userForm.url.$error.required"
          class="glyphicon glyphicon-pencil"></i>
        <label for="urlInput">age</label>
      </div>
      <div class="col-md-4">
        <input
          type="text"
          class="form-control" id="urlInput"
          name="age" ng-model="user.age" required>
      </div>
    </div>

    <div class="row" ng-hide="showConfirm">
      <div class="col-md-5">
        <a href="#users" class="btn">Cancel</a>
        <button
          ng-click="add()"
          ng-disabled="isClean() || userForm.$invalid"
          class="btn btn-primary">Save</button>

      </div>
    </div>
  1. 修改detail.html用来显示用户信息并提供修改、删除等功能

  <form role="form" name="userForm">

     <div class="row">&nbsp;</div>
     <div class="row" ng-class="{'has-error': userForm.userId.$invalid}">
      <div class="col-md-1">
        <i ng-show="userForm.url.$error.required"
          class="glyphicon glyphicon-pencil"></i>
        <label for="urlInput">userId</label>
      </div>
      <div class="col-md-4">
        <input
          type="test"
          class="form-control" id="urlInput"
          name="userId" ng-model="user.userId" required>
      </div>
    </div>
    <div class="row">&nbsp;</div>

    <div class="row" ng-class="{'has-error': userForm.userName.$invalid}">
      <div class="col-md-1">
        <i ng-show="userForm.userName.$error.required"
          class="glyphicon glyphicon-pencil"></i>
        <label for="nameInput">userName</label>
      </div>
      <div class="col-md-4">
        <input
          type="text"
          class="form-control error" id="nameInput"
          name="userName"
          ng-model="user.userName"
          fend-focus="focusUserNameeInput"
          required>
      </div>
    </div>
    <div class="row">&nbsp;</div>
    <div class="row" ng-class="{'has-error': userForm.url.$invalid}">
      <div class="col-md-1">
        <i ng-show="userForm.url.$error.required"
          class="glyphicon glyphicon-pencil"></i>
        <label for="urlInput">age</label>
      </div>
      <div class="col-md-4">
        <input
          type="text"
          class="form-control" id="urlInput"
          name="age" ng-model="user.age" required>
      </div>
    </div>

    <div class="row" ng-hide="showConfirm">&nbsp;</div>

    <div class="row" ng-hide="showConfirm">
      <div class="col-md-5">
        <a href="#users" class="btn">Cancel</a>
        <button
          ng-click="save()"
          ng-disabled="isClean() || userForm.$invalid"
          class="btn btn-primary">Save</button>
        <button
          ng-click="remove()"
          ng-show="user.userId"
          class="btn btn-danger">Delete</button>
      </div>
    </div>

  </form>
  1. 修改index.html作为主页面,嵌入其他子页面,ng-app声明这个是模块,ng-controller说明他的控制器叫ListCtrl,ng-view用来存放子视图(页面)。

    <!doctype html>
    <html ng-app="appMain" ng-controller="ListCtrl">
    <head>
        <meta charset="utf-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css"/>
    </head>
    <body >
        <!-- navbar -->
        <div class="container ng-view"></div>
        <!-- footer -->
        <div id="footer" class="hidden-xs">
          <div class="container">
            <p class="text-muted">
              Project Example - by <a href="http://www.waylau.com" target="_blank">www.waylau.com</a> |
              <a href="https://github.com/waylau" target="_blank">GitHub Project</a>
            </p>
          </div>
        </div>

        <script src="js/bootstrap-3.1.1.min.js"></script>
        <script src="js/angular-1.2.3.js"></script>
        <script src="js/angular-resource-1.2.3.js"></script>
        <script src="js/angular-route-1.2.3.js"></script>
        <script src="js/angular-cookies-1.2.3.js"></script>

        <script src="js/app.js"></script>
        <script src="js/controller.js"></script>
    </body>
    </html>
  1. 修改app.js ,声明模块appMain,提供路由功能,说明了调转到哪个页面,用哪个控制器

    angular.module('appMain', ['ngRoute']).config(['$routeProvider', function ($routeProvider) {
        $routeProvider.
            when('/users', {templateUrl: 'partials/list.html', controller: ListCtrl}).
            when('/users/:userId', {templateUrl: 'partials/detail.html', controller: DetailCtrl}).
            when('/create', {
                templateUrl: 'partials/create.html',
                controller: CreateController
            }).
            otherwise({redirectTo: '/users'});
    }]);
  1. 修改controller.js,控制器。主要是对业务逻辑的操作,常见的CURD功能,http访问RESTful接口,并且返回数据

    var url = 'http://localhost:8089/RestDemo/rest';

    function ListCtrl($scope, $http) {
        $http.get( url + '/users' ).success(function(data) {
            $scope.users = data;
        });

        $scope.orderProp = 'age';
    }

    function DetailCtrl($scope, $routeParams, $http) {

        $http.get( url + '/users/'+$routeParams.userId).success(function(data) {
            $scope.user = data;
        });

        $scope.save = function() {
            $http.put( url + '/users',  $scope.user).
            success(function(data, status, headers, config){
                $location.path('/');
            }).error(function(data, status, headers, config){
                alert("error"+status);
            }) ;
        };

        $scope.remove =  function(){
            $http({
                method:'DELETE',
                url: url + '/users/'+  $scope.user.userId ,
            })
            .success(function(data, status, headers, config){
                $location.path('/');
            }).error(function(data, status, headers, config){
                alert("error"+status);
            }) ;
        };
    }

    function CreateController($scope, $http) {

        $scope.add = function() {
            $http.post( url + '/users',  $scope.user).
            success(function(data, status, headers, config){
                $location.path('/');
            }).error(function(data, status, headers, config){
                alert("error"+status);
            }) ;
        };
    }

四、运行

1.先运行项目

2.可以进行CURD操作

PS:本案例力求简单把 angularjs 访问 RESTful 服务展示出来,在Chrome,firefox,IE上做过测试。

本章源码:jersey-demo9-sqlserver-hibernate-spring3-angularjs

时间: 2024-09-02 19:55:57

用Jersey构建RESTful服务9--Jersey+SQLServer+Hibernate4.3+Spring3.2+AngularJS的相关文章

用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3

一.总体说明 本例运行演示了用Jersey构建RESTful服务中,如何同过Hibernate将数据持久化进MySQL的过程 二.环境 1.上文的项目RestDemo 2.MySQL5.6下载http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16-win32.zip 3.Hibernate4.3.4下载http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.4.Fin

用Jersey构建RESTful服务6--Jersey+SQLServer+Hibernate4.3

一.总体说明 本例运行演示了用Jersey构建RESTful服务中,如何同过Hibernate将数据持久化进SQLServer的过程 二.环境 1.上文的项目RestDemo 2.SQLServer2005 3.jtds数据库连接驱动:下载地址最新版本,替换掉上文项目中的mysql-connector 三.配置 1.与上文mysql的配置不同点主要在hibernate.cfg.xml文件: 配置如下: <?xml version='1.0' encoding='utf-8'?> <!DO

用Jersey构建RESTful服务8--Jersey+SQLServer+Hibernate4.3+Spring3.2+jquery

一.总体说明 本例运行演示了用 Jersey 构建 RESTful 服务中,如何集成 jQuery,用html作为客户端访问 RESTful 服务. 二.环境 1.上文的项目RestDemo 2.jQuery 库 ,本例为1.7.1版本 三.配置 创建 jQuery 客户端的项目结构,在WebContent创建js,css两个目录,并把jQuery 库 放入js目录下,并在该目录下创建main,js空文件 在WebContent创建index.html: <!DOCTYPE HTML> <

用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2

一.总体说明 本例运行演示了用 Jersey 构建 RESTful 服务中,如何集成 Spring3 二.环境 1.上文的项目RestDemo 2.Spring及其他相关的jar ,导入项目 三.配置 1.根目录下下创建 Spring 的配置文件applicationContext.xml: 配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spri

用Jersey构建RESTful服务4--通过jersey-client客户端调用Jersey的Web服务模拟CURD

一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询等操作. 二.创建服务端 1.在上文项目中, 在"com.waylau.rest.resources.UserResource"中修改代码, 首先创建一个HashMap,用来保存添加的用户 private static Map<String,User> userMap = ne

用Jersey构建RESTful服务3--JAVA对象转成JSON输出

一. 总体说明 XML和JSON 是最为常用的数据交换格式.本例子演示如何将java对象,转成JSON输出. 二.流程 1.在上文项目中, 在"com.waylau.rest.resources.UserResource"中增加代码,代码如下: @GET @Path("/getUserJson") @Produces(MediaType.APPLICATION_JSON) public User getUserJson() { User user = new Use

用Jersey构建RESTful服务2--JAVA对象转成XML输出

一. 总体说明 XML和JSON 是最为常用的数据交换格式.本例子演示如何将java对象,转成XML输出. 二.流程 1.在上文的例子中,创建一个包"com.waylau.rest.bean" 2.在该包下创建一个JAVA类"User" package com.waylau.rest.bean; import javax.xml.bind.annotation.XmlRootElement; /* * * 用户 bean * @author waylau.com *

使用Jersey和Apache Tomcat构建RESTful Web服务

RESTful Web 服务简介 REST 在 2000 年由 Roy Fielding 在博士论 文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一. REST 中最 重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识.客户端 应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集. RESTful Web 服务是使用 HTTP 和 REST 原理实现的 Web 服务.通常,RESTful Web 服务应该定义

用 Jersey 2 和 Spring 4 构建 RESTful web service

本文介绍了如何通过 Jersey 框架优美的在 Java 实现了 REST 的 API.CRUD 的 操作存储在 MySQL 中 1. 示例 1.1 为什么 Spring 可以对于 REST 有自己的实现(见 https://spring.io/guides/tutorials/rest/). 但本文展示的是用 "官方" 的 方法来实现 REST ,即使用 Jersey. 1.2 它是做什么的? 管理 资源. REST API 将允许创建.检索.更新和删除这样的资源. 1.3 架构及技