天天看點

AngularJs與Java Web伺服器互動

AngularJs是Google工程師研發的産品,它的強大之處不是幾句話就能描述的,隻有真正使用過的人才能體會到,筆者準備在這篇文章中,以一個簡單的登入校驗的例子說明如何使用AngularJs和Web伺服器進行互動。

準備工作

1.下載下傳angular js庫。

筆者使用的是電信寬帶,不知道是不是營運商的問題,有時候換了網絡,官網經常打不開,不過也不用擔心,筆者在CSDN上上傳了一份(^_^)。

2.開發環境準備,由于是和Tomcat伺服器進行互動,是以JDK什麼的都是必不可少的。筆者機器上使用Eclipse Luna版、JDK7.0和Tomcat8.0。

浏覽器最好選用Chrome或Firefox調試起來比較友善。

AngularJs與Java Web伺服器互動案例

AngularJs與Java Web伺服器互動

這是筆者使用AngularJs和html5、css寫好的一個前端頁面,我們需要實作的是當點選送出案例後,將文本域中的資料送出到伺服器端進行校驗,伺服器端向用戶端傳回相應的處理結果。代碼如下:

<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>登入</title>
<script src="js/angular-1.3.0.14/angular.js"></script>
<link rel="stylesheet" type="text/css" href="css/index.css"/>
</head>

<body ng-app="myApp">
    <div>
        <ul id="loginForm" ng-controller="LoginForm">
            <li>使用者名:<input type="text" name="uname" ng-model="uname" /></li>
            <li>密 碼:<input type="password" name="pword" ng-model="pword" /></li>
            <li id="loginBtn"><input type="button" value="送出" ng-click="submit()"/> <input type="button" value="重置" ng-click="resetInfo()"/></li>
        </ul>
    </div>

<script>
angular.module("myApp", [])
    .controller("LoginForm", function($scope,$http) {

    $scope.resetInfo=function()
    {
        $scope.uname="";
        $scope.pword="";
    }

    $scope.submit=function()
    {
        var postData = "?uname="+$scope.uname+"&"+"pword="+$scope.pword;
        var url = "loginAction.do" + postData;

        $http.post(url).success(function(data)
        {
            alert(data);
        });

    }

});
</script>
</body>
</html>           

AngularJs對伺服器的請求都是通過Ajax來實作的,所有的操作都封裝在

$http

中,通過

$http.post()

方法以uname和pword做為參數向伺服器端發送請求,請求資源為loginAction.do,然後調用alert方法彈出伺服器端傳回的内容。

在伺服器端,我們需要增加一個Servlet來處理用戶端的請求,并根據請求内容向用戶端傳回不同的資料。

在web.xml配置servlet,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>AngularJs</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <!-- 處理用戶端請求Servlet -->
    <servlet>
        <servlet-name>LoginAction</servlet-name>
        <servlet-class>com.csii.action.login.LoginAction</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginAction</servlet-name>
        <url-pattern>/loginAction.do</url-pattern>
    </servlet-mapping>
</web-app>
           

我們所有的業務邏輯都在LoginAction類中處理,LoginAction代碼如下:

package com.csii.action.login;

import java.io.IOException;
import java.io.PrintWriter;

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

public class LoginAction extends HttpServlet{

    private static final long serialVersionUID = 1L;
    private final String USERNAME = "Rongbo_J";
    private final String PASSWORD = "1234567";
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        String uname = req.getParameter("uname");
        String pword = req.getParameter("pword");
        PrintWriter pw = resp.getWriter();
        if(USERNAME.equals(uname) && PASSWORD.equals(pword))
        {
            pw.write("username and password is right!");
        }else
        {
            pw.write("username or password is wrong!");
        }
    }

}
           

這裡我們簡單的模拟一下,使用者名和密碼資訊并沒有從資料庫中取出。

String uname = req.getParameter("uname");
 String pword = req.getParameter("pword");           

我們從req對象中拿到用戶端傳過來的資料,和USERNAME 、PASSWORD 對比,如果相同則傳回“username and password is right!”,否則傳回“username or password is wrong!”

然後我們回到登入界面,使用者名和密碼輸入錯誤可以看到:

AngularJs與Java Web伺服器互動