Monday 14 July 2014

How to use Servlet as a rest end point with Angulerjs (Basic CRUD) part 2

First part we will see how to create server site coding. Now we will see how to write client site code.
client site we will use anguler js and twitter bootstrap.

1. Create following structure in WebContent folder.
    Controller : This folder we create angulerjs controller.
    lib : This folder we insert angulerjs and bootstarp source code.
    service :This folder we create angulerjs service.

2. Create js -> application.js and write following code .



'use strict';
angular.module('ridApp',
        [ 'ngRoute', 'ridApp.services', 'ridApp.controllers', 'ui.bootstrap'

        ]).config(function($routeProvider, $httpProvider) {
    $routeProvider.when('/', {
        controller : 'userController',
        templateUrl : 'jsp/template/userTemplate.jsp'
    }).when('/user/:id', {
        controller : 'userController',
        templateUrl : 'jsp/template/userTemplate.jsp'
    }).when('/users', {
        controller : 'usersController',
        templateUrl : 'jsp/template/userListTemplate.jsp'
    }).when('/about', {
        templateUrl : 'jsp/template/aboutTemplate.jsp'
    }).otherwise({
        redirectTo : '/'
    });
});  
This js we will create ridApp module and include 'ngRoute', 'ridApp.services', 'ridApp.controllers', 'ui.bootstrap' dependency.This file we create following anguler js route.
"/" : Home route
"/users/:id" : Route for create new user and update user .
"/users"       : Route for list user .
"/about"      : Route for about information.
3. create services.js file in  js->service folder .write following code in this file

'use strict';
var services = angular.module('ridApp.services', [ 'ngResource' ]);

services.factory('UserFactory', function($resource) {
    return  $resource('users/:id', {id:'@id'});
});

This js we use angulerjs resource module this will used interact with RESTful server-side data sources.its create following default action.
    { 
    'get':    {method:'GET'},
    'save':   {method:'POST'},
    'query':  {method:'GET', isArray:true},
    'remove': {method:'DELETE'},
    'delete': {method:'DELETE'}  
    };
 
$resource('users/:id', {id:'@id'}) this is create restful action.
 
 

4. create controller.js file in  js->controller folder .write following code in this file

'use strict';

var myAppModule = angular.module('ridApp.controllers', [ 'ui.bootstrap' ]);

myAppModule.controller('homeController', [ '$rootScope', '$scope',
        function($rootScope, $scope) {
            console.log('Home Controller');
        } ]);

myAppModule.controller('userController', [
        '$route',
        '$rootScope',
        '$scope',
        '$routeParams',
        '$location',
        'UserFactory',
        function($route, $rootScope, $scope, $routeParams, $location,
                UserFactory) {
            console.log('userController');
            $scope.user = {};
            $scope.AddUser = function() {
                UserFactory.save($scope.user).$promise.then(function(response) {
                    $scope.message = "Data Save";
                    if (response.success) {
                        $scope.user.id = response.data.id;
                        $scope.msgClass = 'alert alert-success';
                    } else {
                        $scope.msgClass = 'alert alert-danger';
                    }
                });
            };

            $scope.deleteUser = function() {
                UserFactory.remove($scope.user).$promise
                        .then(function(response) {
                            $scope.message = response.message;
                            if (response.success) {
                                $scope.user = {};
                                $scope.msgClass = 'alert alert-success';
                            } else {
                                $scope.msgClass = 'alert alert-danger';
                            }
                        });
            };
            $scope.GetUser = function() {
                UserFactory.get($scope.user).$promise.then(function(response) {
                    if (response.success) {
                        $scope.user = response.data;
                    }
                });
            };
            $scope.viewUserlist = function() {
                $location.path('/users');
            };
            $scope.newUser = function() {
                if ($routeParams.id) {
                    $location.path('/user');
                } else {
                    $route.reload();
                }
            };
            var id = $routeParams.id;
            if (id) {
                UserFactory.get({
                    id : id
                }).$promise.then(function(response) {

                    $scope.user = response;

                });
                ;
            }

        } ]);

myAppModule.controller('usersController', [
        '$route',
        '$rootScope',
        '$scope',
        '$location',
        '$routeParams',
        '$modal',
        '$log',
        'UserFactory',
        function($route, $rootScope, $scope, $location, $routeParams, $modal,
                $log, UserFactory) {
            console.log('usersController');
            $log.debug($routeParams);
            var i = 0;
            $scope.currentPage = 1;
            $scope.users = [];
            $scope.searchmodel = {};
            $scope.getUsers = function() {
                UserFactory.query().$promise.then(function(response) {
                    $scope.users = response;
                });
            };

            $scope.deleteUser = function(id) {
                UserFactory.remove({
                    id : id
                }).$promise.then(function(response) {
                    $scope.getUsers();
                });
            };

            $scope.updateUser = function(id) {
                $location.path('/user/' + id);
            };
            $scope.addNewUser = function() {
                $location.path('/user');
            };
            $scope.getUsers();

        } ]);
this js create three controller
 homeController : controller for home route.
 userController : controller for user view/add/update user interface. this controller see i created AddUser, deleteUser, GetUser, newUser ,viewUserlist methods.this method you see how i will 
use UserFactory service action methods. 
 usersController  : This controller use for user list view. this class we create getUsers, deleteUser ,updateUser, addNewUser methods.


5.Create lib.jsp in jsp->common folder and write following code . This file include angulerjs and bootstrap common library.

<!-- lib css file -->
<link href="js/lib/bootstrap/css/bootstrap.css" rel="stylesheet">
<link href="js/lib/bootstrap/css/application.css" rel="stylesheet">
<link href="js/lib/bootstrap/font-awesome/css/font-awesome.min.css" rel="stylesheet">
<!-- lib js file -->
<script src="js/lib/angulerjs/angular.min.js"></script>
<script src="js/lib/bootstrap/ui-bootstrap-tpls-0.11.0.min.js"></script>
<script src="js/lib/angulerjs/angular-route.min.js"></script>
<script src="js/lib/angulerjs/angular-resource.min.js"></script>
<script src="js/lib/angulerjs/angular-sanitize.min.js"></script>


6.create userTemplate.jsp in jsp-> template folder and write below code.

<div class="container">
    <div class="row">
        <div class="col-lg-12">
            <h1 class="page-header">
                User <small>Add/Update user!</small>
            </h1>
            <ol class="breadcrumb">
                <li><a href="#">Home</a></li>
                <li class="active">User</li>
            </ol>
        </div>

    </div>
    <div class="row">
        <div class="col-md-6">

            <div ng-class="msgClass">{{ message }}</div>

            <form role="form" name="userform" novalidate>

                <div class="form-group">
                    <label for="exampleInputEmail1">First Name:</label> <input
                        class="form-control" id="firstName" name="firstName"
                        ng-model="user.firstName" placeholder="Enter First Name" required>

                    <div class="alert alert-danger"
                        ng-show="userform.firstName.$dirty && userform.firstName.$invalid">
                        <span class="text-error"
                            ng-show="userform.firstName.$error.required">Required!</span>
                    </div>
                </div>
                <div class="form-group">
                    <label for="lastname">Last Name:</label> <input type="text"
                        class="form-control" type="text" id="lastname" name="lastname"
                        ng-model="user.lastName" placeholder="Enter Last Name" required>

                    <div class="alert alert-danger"
                        ng-show="userform.lastname.$dirty && userform.lastname.$invalid">
                        <span class="text-error"
                            ng-show="userform.lastname.$error.required">Required!</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="emailid">Email:</label> <input type="email"
                class="form-control" id="emailId" name="emailId" ng-model="user.emailId"  placeholder="Enter email" required>
         
                    <div class="alert alert-danger"
                        ng-show="userform.emailId.$dirty && userform.emailId.$invalid">
                        <span ng-show="userform.emailId.$error.required">Enter your
                            email.</span> <span ng-show="userform.emailId.$error.email">This is
                            not a valid email.</span>
                    </div>
                </div>


                <div class="form-group">
                    <label for="username">Login Id:</label> <input type="text"
                        name="username" class="form-control" type="text" id="username"
                        ng-model="user.userName" placeholder="Enter Login Id" required>

                    <div class="alert alert-danger"
                        ng-show="userform.username.$dirty && userform.username.$invalid">
                        <span class="text-error"
                            ng-show="userform.username.$error.required">Required!</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="password">Password:</label> <input type="password"
                        class="form-control" type="password" id="password" name="password"
                        ng-model="user.password" ng-minlength="5" ng-maxlength="10" placeholder="Enter Password " required>

                        <div class="alert alert-danger"
                            ng-show="userform.password.$dirty && userform.password.$invalid">
                            <span class="text-error"
                                ng-show="userform.password.$error.required">Required!</span>
                            <span class="text-error" ng-show="userform.password.$error.minlength">
                                The password must be minimum length 5! </span>
                             <span class="text-error" ng-show="userform.password.$error.maxlength">
                                 The password must be maximum length 10!</span>
                           </div>
                </div>
                <div class="form-group">
                    <button type="submit" class="btn btn-medium btn-primary"
                        ng-disabled="userform.$invalid" name="operation" value="Add"
                        ng-click='AddUser()'>Save</button>
                    <button type="submit" class="btn btn-medium btn-danger"
                        ng-disabled="userform.$invalid" name="operation" value="Delete"
                        ng-click='deleteUser()'>Delete</button>
                    <button type="submit" class="btn btn-medium btn-primary"
                        name="operation" value="Delete" ng-click='GetUser()'>Get</button>
                    <button type="submit" class="btn btn-medium  btn-primary"
                        name="operation" value="List" ng-click='viewUserlist()'>List</button>
                    <button type="submit" class="btn btn-medium  btn-primary"
                    name="operation" value="List" ng-click='newUser()'>New</button>
                </div>

            </form>
        </div>
    </div>
</div>
7. create userListTemplate.jsp in jsp-> template folder and write below code.
<div class="container">
    <div class="row">
        <div class="col-lg-12">
            <h1 class="page-header">
                User List <small></small>
            </h1>
            <ol class="breadcrumb">
                <li><a href="#">Home</a></li>
                <li class="active">User List</li>
            </ol>
        </div>
        <button type="submit" class="btn btn-medium btn-primary"
        name="operation" value="Delete" ng-click='addNewUser()'>New User</button>
           
          <form class="navbar-form navbar-right" role="searchString">
         <div class="form-group">
        <label class="control-label">Filter:</label>
        <input type="text" class="form-control" ng-model="searchString" placeholder="Search">
      </div>
    </form>
    </div>

    <div class="row">
        <div class="table-responsive">
            <table class="table table-bordered">
                <thead>
                    <tr class="warning">
                        <th>#</th>
                        <th>Email Id</th>
                        <th>First Name</th>
                        <th>Last Name</th>
                        <th>User Name</th>
                        <th>Operation</th>
                    </tr>
                </thead>

                <tbody ng-repeat="user in users | filter:searchString">
                    <tr>
                        <td>{{((10*(currentPage-1))+ ($index +1))}}</td>
                        <td>{{user.emailId}}</td>
                        <td>{{user.firstName}}</td>
                        <td>{{user.lastName}}</td>
                        <td>{{user.userName}}</td>
                        <td><button type="button" class="btn btn-danger btn-xs"
                                ng-click="deleteUser(user.id)">delete</button> |
                            <button type="button" class="btn btn-primary btn-xs"
                                ng-click="updateUser(user.id)">edit</button></td>
                    </tr>
                </tbody>

            </table>
        </div>
   
    </div>
</div>

8 . create index.jsp in WebContent folder and write following code

<!DOCTYPE html>
<html ng-app='ridApp' ng-controller='homeController'>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Rid Sample</title>
<jsp:include page="jsp/common/lib.jsp"></jsp:include>
</head>
<body>

    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse"
                    data-target=".navbar-ex1-collapse">
                    <span class="sr-only">Toggle navigation</span> <span
                        class="icon-bar"></span> <span class="icon-bar"></span> <span
                        class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#">Home</a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse navbar-ex1-collapse">
                <ul class="nav navbar-nav navbar-right">
                   
                    <li class="dropdown" ><a href="#"
                        class="dropdown-toggle" data-toggle="dropdown">User<b
                            class="caret"></b></a>
                        <ul class="dropdown-menu">
                            <li><a href="#user">User</a></li>
                            <li><a href="#users">List</a></li>
                        </ul></li>
                    <li><a href="#about">About</a></li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container -->
    </nav>

    <div class="container">
        <div ng-view></div>
    </div>
    <!-- /.container -->
    <div class="container">
        <hr>
        <footer>
            <div class="row">
                <div class="col-lg-9">
                    <p>Copyright © 2014, - Riddhima blog
                        </p>
                </div>
                <div class="col-lg-3">
                    <ul class="list-unstyled list-inline list-social-icons">
                        <li class="tooltip-social facebook-link"><a
                            href="https://www.facebook.com" data-toggle="tooltip"
                            data-placement="top" title="Facebook"><i
                                class="fa fa-facebook-square fa-2x"></i></a></li>
                        <li class="tooltip-social linkedin-link"><a
                            href="#linkedin-company-page" data-toggle="tooltip"
                            data-placement="top" title="LinkedIn"><i
                                class="fa fa-linkedin-square fa-2x"></i></a></li>
                        <li class="tooltip-social twitter-link"><a
                            href="https://twitter.com/" data-toggle="tooltip"
                            data-placement="top" title="Twitter"><i
                                class="fa fa-twitter-square fa-2x"></i></a></li>
                        <li class="tooltip-social google-plus-link"><a
                            href="https://plus.google.com/"
                            data-toggle="tooltip" data-placement="top" title="Google+"><i
                                class="fa fa-google-plus-square fa-2x"></i></a></li>

                    </ul>
                </div>
            </div>
        </footer>
    </div>
    <script src="js/controller/controllers.js"></script>
    <script src="js/service/services.js"></script>
    <script src="js/application.js"></script>
</body>
</html>

9. Now right click in CRUD ->Run As->run on server .select tomcat and run application.








     
   







   





Tuesday 8 July 2014

How to use Servlet as a rest end point with Angulerjs (Basic CRUD)

Part 1.

In this tutorial, we will create a simple CRUD (Create Read Update Delete) User Management Web Application using Jsp, Servlet, angulerjs  .

I will see every article in anguler js REST end point using server site REST web service. Rest web service need REST framework to add in your web application.small application we don't want add this. so i will write this article how to use Servlet  as a rest end point.

For this tutorial, we will need the following tools: (The older or newer version should also works). Moreover, basic Java knowledge is assumed.

1. Eclipse Kepler j2ee
2. Tomcat 7
3. Angular js
4. Twitter bootstrap
5. JSON

I will follow MVC(Model-View-Controller) pattern for this article.

Go to eclipse

1. Before we create a new project for our application, we need to setup the server. Select File—>New—>Other. From the tree, Select Server.
Choose Apache—>Tomcat v7.0 Server and set the runtime environment.
2. Create a new project. Select File—>New—>Dynamic Web Project.Enter “CRUD” as the project name. Select target runtime to Apache Tomcat v7.0 which we already setup before. Click Finish.Then Create four packages in the src folder.

com.rid.model : contains the POJO (Plain Old Java Object). Each class in this package represents   the database table. For this tutorial, however, we only have one table.
com.rid.ctrl : contains the servlets.
com.rid.service :contains the service class that use for perform crud operation .

Complete folder structure.
3 .create new java class in  com.rid.model  package  Name User.java  .Write  following code
 package com.rid.model;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

import org.json.JSONObject;

public class User {
    private int id;
    private String firstName;
    private String lastName;
    private String emailId;
    private String password;
    private String userName;
  
    public String getEmailId() {
        return emailId;
    }

    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
  
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    

    public User() {
        super();
    }

    public User(JSONObject json) {

        try {
            BeanInfo info = Introspector.getBeanInfo(this.getClass());
            PropertyDescriptor[] props = info.getPropertyDescriptors();
            for (int i = 0; i < props.length; i++) {
                PropertyDescriptor prop = props[i];
                Method getter = prop.getReadMethod();
                Method setter = prop.getWriteMethod();
                Class param = getter.getReturnType();
                try {
                    Object setVal = null;
                    if (!json.isNull(prop.getName())) {
                        if (param == int.class)
                            setVal = json.getInt(prop.getName());
                        else if (param == long.class)
                            setVal = json.getLong(prop.getName());
                        else if (param == String.class)
                            setVal = json.getString(prop.getName());
                        else if (param == boolean.class)
                            setVal = json.getBoolean(prop.getName());
                        else if (param == Double.class)
                            setVal = json.getDouble(prop.getName());
                        else
                            continue;
                        setter.invoke(this, new Object[] { setVal });
                        System.out
                                .println(getter.invoke(this, (Object[]) null));
                    }
                } catch (Exception e) {
                  
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer(this.getClass().getSimpleName()+"[");
        Method[] ms = this.getClass().getMethods();

        String mName = null;
        for (int i = 0; i < ms.length; i++) {
            mName = ms[i].getName();
            if (mName.startsWith("get")) {
                try {
                    buffer.append("\n\t" + mName + " = "
                            + ms[i].invoke(this, (Object[]) null));
                } catch (Exception e) {
                }
            }

        }
        buffer.append("]");
        return buffer.toString();
    }
    
}
This Project use json object .Copy  json.jar in WebContent\WEB-INF\lib folder.
See the  User(JSONObject json) constructor this will convert JSON object to POJO using reflection java api. for example:

 JSON OBJECT                                                                                        
{
 "id":1,                                              // store in id field in User.java
 "firstName":"joe",                           // store in firstName field in User.java
 "lastName":"smith" ,                       // store in lastName field in User.java
 "emailId" :"joe@example.com",    // store in emailId field in User.java
 "password":"zxre45vg",                  // store in password field in User.java
 "userName":"joe_smith"                 // store in userName field in User.java
}

See toString method in User.java class . its return User object in string .its method i will also use
reflection api. for example its return

user[
 id =1,                                                                 
 firstName =joe                                              
 lastName =smith                                           
 emailId =joe@example.com                         
 password =zxre45vg                                  
 userName =joe_smith
]
more detailed for reflection api see http://docs.oracle.com/javase/tutorial/reflect/


4. com.rid.service package create  UserServiceI interface . and then create new class UserServiceImpl.java  implement UserServiceI.

UserServiceI.java

package com.rid.service;
import java.util.List;
import com.rid.model.User;

public interface UserServiceI {
    public User add(User base);
    public User get(Integer id);
    public User update(User user);
    public User delete(User user);
    public List<User> search();
    public List<User> list();
 
}



UserServiceImpl.java
   
         package com.rid.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.rid.model.User;

public class UserServiceImpl  implements UserServiceI {

    static Map<Integer, User> map=new HashMap<Integer, User>();

    @Override
    public User add(User user) {
        System.out.println("add call");
        Integer id=this.map.size()+1;
        user.setId(id);
        this.map.put(id,user);
        return user;
    }
   
    @Override
    public User get(Integer id) {
        System.out.println("get call");
        return this.map.get(id);
    }

    @Override
    public User update(User user) {
        System.out.println("update call");
        this.map.put(user.getId(),user);
        return user;
    }

    @Override
    public User delete(User user) {
        System.out.println("delete call");
        this.map.remove(user.getId());
        return user;
    }

    @Override
    public List<User> search() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public List<User> list() {
       
        System.out.println(this.map.values());
       
        List l =new ArrayList<User>(this.map.values());
        return l;
    }

}

This class i will use memory Map for Crud operation perform. if you want to use jdbc create new class somthing like this

package com.rid.service;

import java.util.List;

import com.rid.model.User;

public class UserServiceJDBCImpl implements UserServiceI {

    @Override
    public User add(User base) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public User get(Integer id) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public User update(User user) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public User delete(User user) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public List<User> search() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public List<User> list() {
        // TODO Auto-generated method stub
        return null;
    }

}
you will write code yourself for jdbc operation .

5.In com.rid.ctrl package. Create New servlet UserCtrl.java.

package com.rid.ctrl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;
import org.json.JSONObject;

import com.rid.model.User;
import com.rid.service.UserServiceI;
import com.rid.service.UserServiceImpl;

/**
 * Servlet implementation class UserCtrl
 */
@WebServlet("/users/*")
public class UserCtrl extends HttpServlet {
    private UserServiceI service = null;
   
    @Override
    public void init() throws ServletException {
        this.service = new UserServiceImpl();
    }

    // path {users/:id or users} method {Get}
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String pathInfo = httpRequest.getPathInfo();
        String path = request.getPathInfo();

        Object data = null;
        //path users/:id
        if (path != null) {
            Integer id = getUserId(path);
            data = new JSONObject(service.get(id));
        }
        //path users
        if (path == null) {
            List list = service.list();
            data = new JSONArray(list);
        }
        PrintWriter writer = response.getWriter();
        response.setContentType("application/json");
        writer.write(data.toString());
        writer.close();

    }

    // path {users/:id or users} method {Post}
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
       
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String pathInfo = httpRequest.getPathInfo();
        String path = request.getPathInfo();

        StringBuffer jb = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();

            while ((line = reader.readLine()) != null)
                jb.append(line);

            JSONObject jsonObject = new JSONObject(jb.toString());
            User user = new User(jsonObject);

            if (path != null) {
                Integer id = getUserId(path);
                service.update(user);
            }

            if (path == null) {
                if (user.getId() > 0)
                    user = service.update(user);
                else
                    user = service.add(user);
            }

        } catch (Exception e) { /* report an error */
        }

    }

    // path {users/:id} method {Delete}
    @Override
    protected void doDelete(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String path = request.getPathInfo();
        Object data = null;
        if (path != null) {
            Integer id = getUserId(path);
            User user = new User();
            user.setId(id);
            data = new JSONObject(service.delete(user));
        }
        PrintWriter writer = response.getWriter();
        response.setContentType("application/json");
        writer.write(data.toString());
        writer.close();

    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        super.doPut(req, resp);
    }
   
    public Integer getUserId(String path) {
        try {
            String[] urldata = path.split("/");
            return Integer.parseInt(urldata[1]);
        } catch (Exception e) {
        }
        return 0;
    }

   
}

See the following code i will get post data in request and convert in to  Json Object.

           BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null)
            jb.append(line);
            JSONObject jsonObject = new JSONObject(jb.toString());

String path = request.getPathInfo();  get the request URI and see method getUserId(String path) .This get user Id.

doGet method used for get specific User and get Users List.(users/:id and users )
doPost method used for save/update User.(users/:id and users )
doDelete method used for delete User .(users/:id )

Source Code: coming soon(Wait for github link)
All method return user in json form.That's all done in server site. First part is done.