第一篇:Java登陸驗證模塊的實現及小結
登陸驗證模塊的實現
登陸頁面驗證首先是驗證賬號, 驗證碼是否填寫,密碼長度是否符合要求,驗證碼是否正確。這幾個驗證是通過自定義的幾個$.fn擴展函數實現的($.fn.remote=Function(url,msg, msgCnt){})實現的,一般將這些自定義的函數放在一個js文件中,便于維護。
自定義函數一般包含相應的提示字符串,及節點對象$(“#id”)等參數。通過函數對節點的var value = this.val();value是否為空或空字符串的判斷,相應的改變節點text屬性的值。1驗證碼正確驗證
1)驗證碼正確與否的驗證是通過采用了Ajax技術的函數實現的。對應的action的result的屬性為json(result要配置
ok的參數),action類要有布爾類型的名為ok的屬性,通過返回值ok,更改相應的改變節點text屬性的值。
如:
$.fn.remote=function(url,msg,msgCnt){ var value=this.val();//獲得表單提交的數據,如你所填入的驗證碼/資費名稱
var name=this.attr(“name”);//獲得表單名稱,如驗證碼文本框的name:verifiCode
var b=false;$.ajax({url:url+“?”+name+“=”+value,dataType:“json”,async:false,success:function(data){
if(data){
$(msgCnt).text(“");
b=true;
}else{
$(msgCnt).text(msg);
}
}
});return b;};2)驗證碼的點擊更新是利用了result=stream的屬性(要配置name=”inputName“,name=”contentType“的參數),點擊發送請求,對應的action(該類必須有InputStream類的屬性,且名字要和result相應參數的屬性值相同)生成驗證碼并存入session。
2賬戶和密碼的驗證
當前面一系列的驗證結果都滿足條件時,才能提交表單。可定義一個函數實現: if(b1 && b2 && b4){$(”#loginForm“).submit();} 相應action 接受到數據后,根據賬戶和密碼調用DAO的相關方法,查詢返回admin。
如果admin存在則轉發到主頁面(通過result在admin的不同狀態下返回的字符串實現不同的type=”redirectAction“),此時將admin存入session。為后面的登陸檢查驗證做準備。
session.put(KEY_ADMIN, admin);如果不存在就,還是停留在登陸頁面。
3檢查登陸驗證。
為了防止未登錄而訪問數據,通過struts2的自定義攔截器功能實現登陸檢查驗證。
可通過實現接口Interceptor或者抽象類AbstractInterceptor,我選擇繼承AbstractIntercepto,相對較簡潔。在接口定義的方法intercept(ActionInvocation in)實現驗證邏輯。
通過ActionInvocation的getInvocationContext()方法獲得action上下文對象ActionContext。通過action上下問對象獲得session對象,在session對象中獲取admin對象:
Admin admin =(Admin)session.get(Constants.KEY_ADMIN);如果admin為空,則通過return 返回字符串及全局result回到登陸頁面。如果admin不為空,則通過ActionInvocation對象調用invoke()方法,調用后面的action。
權限管理:
每個用戶具有不同的角色,不同的角色具有不同的權限。當用戶登陸的時候,根據用戶對象取得用戶所具有的角色,根據角色id在privileges.xml(通過privilegereader類)文件中獲得用戶具有的所有權限,然后將此所有權限的集合存入session。當用戶每一次發送請求時都要通過攔截器,在攔截器中截取用戶的請求路徑(request.getServletPath()),并檢查是否存在于session中的用戶所具有權限中。如果沒有就返回到提示頁面,如果有就調用invoke()方法執行后面的action,result。
攔截器的配置:
1.首先注冊攔截器
2.然后定義攔截器棧,將默認攔截器棧也加進來。
資費管理模塊:
資費管的功能主要有資費信息的增加、管理、刪除和修改等功能。采用三大框架整合技術實現的。
在applicationContext.xml文件中配置連接池(用戶名、密碼、驅動包、連接路徑),將連接池注入SessionFactory中,在SessionFactory中配置Hibernate框架參數:如方言dialect,show_sql等,指定映射描述。然后開啟組件掃描:
關于事務:
在applicationContext.xml文件中定義事務管理Bean,然后定義通知
將dao用@Respository掃描進組件。
第二篇:flex整合Java登陸總結
Flex結合java實現一個登陸功能
1、環境的搭建:
對message-congig.xml配置如下:
Web.xml的配置如下: class=“flex.messaging.services.remoting.adapters.JavaAdapter” default=“true” />
services.configuration.file
/WEB-INF/flex/services-config.xml
這些xml文件基本固定。
2、創建Bean類User和Login類
public class Login {
} 啟動tomcat,至此myeclipse里的配置結束。
3、在flah builder里創建一個flex項目。public String login(String name, String psw){
} public String login(User user){
}
public User login(){ } return new User(“wang”,“aaa”,33);if(“sss”.equals(user.getName())&&
} return “good”;return “sorry”;if(“aa”.equals(name)&& “123”.equals(psw)){
} return “ok”;return “error”;} else {
“123”.equals(user.getPwd())){ }else{
應用服務器技術類型選:j2ee BalzeDS 下一步之后配置服務器位置:
點擊完成。
4、對index.mxml的編寫:
首先要在fx:Decaration中配置destination對應于message-congig.xml中的id Result是回調函數,
endpoint=“/flexApp01/messagebroker/amf”>
Fx:script中的代碼如下:
import com.wang.asclass.User;
import mx.controls.Alert;import mx.rpc.events.ResultEvent;protected function huidiao1(event:ResultEvent):void { // TODO Auto-generated method stub
var result:String =event.result as String;
]]> } Alert.show(result,“結果”);protected function huidiao2(event:ResultEvent):void { // TODO Auto-generated method stub
var result:User = event.result as User;Alert.show(result.name);trace(result.name);} protected function senddata(event:MouseEvent):void //按確認按鈕時 {
} protected function canceldata(event:MouseEvent):void //按取消按鈕時 {
}
protected function showdata(event:MouseEvent):void{ //按查詢按鈕
} loginClientTag2.login();// TODO Auto-generated method stub
var name:String=this.nametext.text;var psw :String=this.pswtext.text;var user :User = new User();user.name=name;user.pwd=psw;loginClientTag.login(user);
// TODO Auto-generated method stub
this.nametext.text=“";this.pswtext.text=”“;
視圖:
可創建一個名為User的as類 package com.wang.asclass {
}
[Bindalbe] [RemoteClass(alias=”com.wangkun.User")] public class User {
} public function User(){ } public var name : String;public var pwd : String;public var age : int;
第三篇:java小結
//1.累加 public class 累加 {
}
//2.階乘
public class 30的階乘 {
} public static void main(String[] args){
} int product=1;for(int i=1;i<=30;i++){ product=*i;} public static void main(String[] args){
} int i=1;for(int counter=1;counter<=100;counter++){ } System.out.println(i);i+=counter;
//3.倒序輸出
法1 用char數組思想 import java.util.Scanner;public class 逆序輸出 {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);// String input[]=new String[4];input=scan.nextLine();// huiche
// String result=“";char[] Array=input[4].toCharArray();for(int i=Array.length-1;i>=0;i--){
} result+=Array[i];} System.out.println(result);} //倒序輸出 法2 用reverse()方法 import javax.swing.JOptionPane;public static void main(String[] args){
}
String a = null;StringBuffer b;//輸入
a=JOptionPane.showInputDialog(a);StringBuffer c1=new StringBuffer(a);b=c1.reverse();System.out.println(b);
//4.輸出100 121 144...361 public class平方輸入數組 {
}
//5.求最大公約數
private static int gys(int m,int n)
{
if(n==0)
return m;else public static void main(String[] args){
} int[] array=new int[10];for(int i=0;i<10;i++){ } array[i]=Math.pow((i+10),2.0);
for(int k=0;k return gcd(n,m%n); } //6.求最小公倍數 public static int gbs(int n1,int n2){ int a =(n1>n2)? n1 : n2; for(int j=a;j<=n1*n2;j++) { if(j%n1==0 && j%n2==0) { return j; } } return 0;} //7.1)十進制整數轉化為二進制整數采用“除2取余,逆序排列” import java.util.Scanner;public class Main { public static void main(String[] args){ //第一行輸入要幾組測試數據 int N=0,a;//N為輸入幾組數據,a為輸入的十進制數字 } String b = null;Scanner scan=new Scanner(System.in);N=scan.nextInt();Main num=new Main();for(int i=1;i<=N;i++){ } a=scan.nextInt();b=num.deimalBinary(a);int d=num.Calcute(b);if(d%2==0)System.out.println(”Even“);else System.out.println(”Odd“); /*一個方法得到二進制數,用遞歸 *用2去除十進制整數,可以得到一個商和余數; *再用2去除商,又會得到一個商和余數,} *如此進行,直到商為零時為止,*然后把先得到的余數作為二進制數的低位有效位,*后得到的余數作為二進制數的高位有效位,依次排列起來 */ public String deimalBinary(int a){ } public int Calcute(String b){ } char[] Array=b.toCharArray();for(int i=0;i } if(Array[i]=='1'){ } counter+=1;return counter; //7.2)十進制小數轉換為二進制小數采用“乘2取整,順序排列” /*用2乘十進制小數,可以得到積,*將積的整數部分取出,再用2乘余下的小數部分,//8.矩陣運算(加減乘)//矩陣運算 *又得到一個積,再將積的整數部分取出,*如此進行,直到積中的小數部分為零,*或者達到所要求的精度為止。 *然后把取出的整數部分按順序排列起來,*先取的整數作為二進制小數的高位有效位,后取的整數作為低位有效位。*/ import java.util.Scanner;public class Main { public static void main(String[] args){ int N1,M1,N2,M2,K;Scanner scan=new Scanner(System.in);N1=scan.nextInt();M1=scan.nextInt();int[][] a=new int[N1][M1];for(int i=0;i for(int j=0;j N2=scan.nextInt();M2=scan.nextInt();int[][] b=new int[N2][M2];for(int i=0;i { } b[i][j]=scan.nextInt();} K=scan.nextInt();if(K==1)//加法 { int[][] c=new int[N1][M1];for(int i=0;i } { for(int j=0;j } System.out.println();} } if(K==2)//減法 { int[][] c=new int[N1][M1];for(int i=0;i } for(int j=0;j for(int j:i){ System.out.print(j+” “);} System.out.println();} } if(K==3)//乘法 { int[][] c=new int[N1][M2];for(int i=0;i } { for(int j=0;j } for(int p=0;p c[i][j]+=a[i][p]*b[p][j];for(int[] i:c)for(int j:i){ System.out.print(j+” “);} System.out.println();} } } } 9.//保留確定位數輸出 import java.text.DecimalFormat;//非四舍五入 DecimalFormat myformat=new DecimalFormat(”#0.00"); myformat.format(double num);//四舍五入,例為保留2位 double f=3.1415926; BigDecimal a=new BigDecimal(f); double af=a.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 一、實驗目的 (1)使用Java編寫五子棋程序 (2)掌握編寫過程的一些類和類成員的使用,并且了解五子棋制作過程的一些步驟和了解一些算法。 二、實驗環境 在電子樓2樓,裝有My Eclipse 的計算機上進行 三、實驗內容 編寫一個五子棋程序。程序主要實現以下功能: 1.實現五子棋界面,要求人性化界面簡潔美觀; 2.實現黑白色輪流下棋功能,能提示下棋方; 3.實現連成五子自動判斷功能; 4.實現時間設置功能,認輸功能; 核心代碼如下: 1.我的第一步是設計界面。在這個過程的要使用到以下的步驟: 1.使用MyEclipse 創建一個Project關于這個工程,加入兩個類,分別是ChessFrame和Chess,而ChessFrame是這個工程中最重要的一個部分。創建過程中要繼承JFrame類,并且要繼承Runnable 和 MouseListener 這兩個接口,分別是用來監聽鼠標的移動和時間的變化。2.在給這個JFrame設置大小和顏色等一些東西。這里最主要的是使用了兩個函數,是以前沒見過的: 1.這個是用來設置默認的窗口關閉事件的 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2.這兩個是用來獲得屏幕的大小的 Toolkit.getDefaultToolkit().getScreenSize().height;Toolkit.getDefaultToolkit().getScreenSize().width; 3.把本地的背景圖片加到這個窗口中,作為這個窗口的背景圖: 使用的到的類有BufferedImage和 ImageIO這兩個類,這兩個類是專門用來處理這種功能的。主要的代碼如下: BufferedImage bg = null;bg = ImageIO.read(new File(“e:/background.jpg”));g.drawImage(bg,0,0,this);這樣這個圖片就加到了這個窗口的背景去了。 這里有一個改進就是雙緩沖技術,可以防止閃屏。這個技術就是在界面和內存都有一幅圖,我們的改動不是直接畫界面,而是內存中先畫好然后把內存中直接顯示出來,那樣就沒有了一前一后的,那就沒有了閃屏的事情發生了。 4.就是畫棋盤和寫一些游戲信息: 這步比較簡單,也沒什么可以說的,用到的一些畫線的函數,和寫String的一些函數。 以上做完以后就可以出現以下的界面: 1.我的第二步就是增加對mouse的點擊和移動的處理,這樣以后就可以用來下棋。在這個過程的要使用到以下的步驟: 1.增加對mouse的監視,然后重寫它的一些函數: 1.我們在ChessFrame的構造函數中加入了addMouseListener()函數,然后重寫關于這個的四個函數,我們這這里不重寫所有的函數,就改寫一個MousePress函數就可以了。改寫的代碼如下: public void mousePress(MouseEvent arg0){ this.x = arg0.getX();this.y = arg0.getY();if(this.canplay) } this.repaint();現在要處理的就是加上棋子了,我在這個做了一下小改動可以更加準確的定位下棋的位置: if(x >= 10 && x <= 374 && y >= 72 && y <= 450){ int sx1 =(this.x72)/ 20;int yx1 =(this.x72)% 20;if(yx1 >= 10){ } if(yy2 >= 10){ } sy2++;sx1++;就是這個,我們通過監控鼠標的就可以得到點擊的X,Y坐標,我在這里通過對它求余,假如余數大于10(就是一個格子的一半)那就給+1,不然不變。后面的畫棋子是很簡單的一個過程,使用的是現成的函數(drawoval) 2.這部要做的就是記錄棋子和五子連的判斷: 1.我們通過一個數組int給保存棋子,如果是0就是沒子,1表示是黑子,2表示白子。在每次重繪的時候遍歷這個數組顯示,這樣就可以保存棋子了。2.判斷五子連起來然后獲勝的算法: 這個算法是鑒戒例子上的: private boolean isline(int x, int y, int xchange, int ychange, int color){ int tempx = xchange;int tempy = ychange;int count = 1;while(x + xchange >= 0 && y + ychange >= 0 && color == chess1[x + xchange][y + ychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){ if(ychange < 0){ xchange++; } } } } ychange--;ychange++;} else { xchange = tempx;ychange = tempy;while(xychange >= 0 } if(count >= 5){ } return true;return false;} else { && color == chess1[xychange]){ count++;if(xchange!= 0){ } if(ychange!= 0){ } if(ychange < 0){ } ychange--;ychange++;} else { xchange++;中心思想就是要判斷就要判斷8個方向,其中有的只是相反的方向,我們使用關于X,Y的相對的變化來判斷,并且使用count來計數,如果到了5個就可以判斷勝利啦。 1.我的第三步就是時間的變化和一些鍵的設置 1.關于時間的變化主要是在于線程的使用,這里我們這個JFrame它繼承了Runnable 這個接口,不過我們要重寫Run函數,這個run函數的代碼如下: public void run(){ if(this.second > 0){ while(true){ this.repaint();if(this.isblack){ this.ss1--; if(this.ss1 == 0){ JOptionPane .showMessageDialog(this, “黑方超時~~~~?¤游戲結束”); this.message1=“0:0:0”; { “白方超時~~~~?¤?¤游戲結束”);this.message2=“0:0:0”;this.canplay = false; { { } this.ss2--; if(this.ss2 == 0){ this.message1 = this.ss 1/ 3600 + “ : ” +(this.ss1 / 60this.ss1 / 60 * this.ss1=-1; this.canplay = false; }else if(this.ss1>0)3600 * 60)60this.ss2 / 3600 + “ : ” +(this.ss2this.ss2 / 3600 * 60 * 60); this.repaint();}else { } try { } Thread.sleep(1000);e.printStackTrace();} catch(InterruptedException e){ 這個函數是用來事時間的變化,所以每操作以后就讓線程sleep(1000)就可以了,那樣就是一秒鐘。這樣就可以倒計時了。2.現在我們要點擊一個按鈕要它有響應。 這里我們其實就沒用到什么button,那為什么會有反應呢,因為我們通過鼠標的點擊范圍來確定要響應什么函數,這就是這里面的秘密.在public void mouseClicked(MouseEvent arg0)函數里有下面這些if的判斷 if(x1 >= 404 && x1 <= 473 && y1 >= 74 && y1 <= 103)if(x1 >= 404 && x1 <= 473 && y1 >= 127 && y1 <= 155)if(x1 >= 404 && x1 <= 473 && y1 >= 179 && y1 <= 208)if(x1 >= 404 && x1 <= 473 && y1 >= 286 && y1 <= 316)if(x1 >= 404 && x1 <= 473 && y1 >= 338 && y1 <= 367)if(x1 >= 404 && x1 <= 473 && y1 >= 390 && y1 <= 419)這就是為了確定鼠標的范圍,然后相對調用函數。 其他還有就是一些Debug處理,在程序已經處理了,結果的還是蠻可以處理的,不過只能是人人對戰。 四、實驗心得與小結 這次試驗總的來說沒有想像中那么難,還有視屏的幫助,感覺起還是很容易動手的,不過由于自己沒上心,沒有做比較大的改動,最主要的人機的對戰沒做出來是滿遺憾的,不過通過這個試驗,讓我學習了不少的知識,比如雙緩沖,mouselistener 等許多許多的知識,還有關于五子棋算法的設計也是一部分。不管怎么說還是有學到知識的,沒什么改動,但對現有的知識的掌握還是很可以的。 五、指導教師評議 成績評定: 指導教師簽名: java重要知識點總結如下: 1,抽象,封裝,繼承,多態是面向對象程序設計中得四個特點.2,面向對象得軟件開發大體分為:面向對象的分析,面向對象的設計,面向對象的實現.可概括為如下過程:分析用戶需求,從問題中抽取對象模型;細化模型,設計類,包括類的屬性和類間的 相互關系,同時觀察是否有可以直接引用的已有類或部件;選定一種面向對象的編程語言,具體編碼實現 上一階段類的設計,并在開發過程中引入測試,完善整個解決方案.3,面向對象程序設計方法的優點是:可重用性,可擴展性,可管理性.4,類的定義:class前的修飾符分為訪問控制符和非訪問控制符兩大類.訪問控制符包括public和private.非訪問控制符包括abstract(抽象),final(最終).5,final類是最終類,是不能有子類的類.abstract和final不能同時修飾一個類,因為抽象類本身沒有具體對象,需要派生出子類后在創建子類的對象.而最終類不可能有子類.6,創建對象的格式為: 類名 對象名=new 構造方法(參數);注意前面是類名后面是構造方法.注意構造方法沒有返回類型,也不能寫void,主要用于完成類對象的初始化工作,一般不能直接由編程 直接調用,而是用new運算符來調用.7,如果class前面由public修飾符,則默認構造方法的前面也應該有public修飾符.8,類中有static修飾的域或方法,可用類名或對象名訪問,否則只能用對象名訪問.9,修飾域的訪問控制符可以是:public,private,protected,private protected.非訪問控制符可以是: static,final,volatile(易失域) 10,類變量的最本質的特點是:他們是類的域,不屬于任何一個類的具體對象實例.不是保存在某個對象實例的內存空間中,而是保存在類的內存區域的公共存儲單元中.11,局部變量是在方法體內聲明的,只有當方法被調用時他們才存在,因而只能在本方法內使用,不存在訪問控制符,也不能聲明為靜態變量(static),但可以聲明為final變量.局部變量必須初始化.12,修飾方法的訪問控制符可以是:public,private,protected,private protected,修飾方法的非訪問控制符可以是:static,final,abstract,native(本地方法),synchronized(同步方法)。 13,用static修飾的變量或方法都為類成員,類成員可以用類名或實例名訪問,實例成員只能用實例名來訪問。 14,如果一個類中含有抽象方法,則此類必須為抽象類,如果抽象類的子類不為抽象類,則子類必須實現父類的所有抽象方法。抽象方法不能用靜態方法和最終方法。抽想方法只有函數頭的聲明,而用分號來替代方法體,沒有大括號。如abstract void abstractmethod(); 15,this變量用在一個方法的內部,指向當前對象,當前對象指的是調用當前正在執行的方法的那個對象。super變量是直接指向父類的構造方法,用來引用父類種的變量和方法。(由于他們指的是對象,所以不能通過它來引用類變量和類方法) 16,如果要引用一個包中的多個類,可以用星號來代替。使用星號只能表示本層次的所有類,而不包括子層次下的類。所以經常需要用兩條語句來引入兩個層次的類:import java.awt.*;import java.awt.event.*; 17,訪問修飾符: --類中限定為public的成員可以被所有的類訪問。 --類中先定位private的成員只能被這個類本身訪問。同一個類的不同對象可以訪問對方的private域變量或調用對方的域方法,這是因為訪問保護控制在類的級別上,而不是對象的級別上。 --類中限定為protected的成員可以被這個類本身,它的子類(包括同一個包中和不同包中的子類),以及同一個包中的其他類訪問。 --用private protected修飾的成員可以被該類本身訪問,也可以被該類的所有子類訪問。 --默認訪問控制符規定只能被同一個包中的類訪問和引用,而不能被其他包的類訪問。即他的訪問權限是friendly。 18,注意: ----abstract和private,static,final,native不能并列修飾同一個方法。 ----abstract類中不能有private修飾的域和方法 ----static方法不能處理非static的域。 19,重載方法的參數必須不同,或者是參數個數不同,或者是參數類型不同。重載的多個方法必須返回相同的數據類型。 20,在java中,一個類獲取某一接口定義的功能并不是通過直接繼承這個接口的屬性和方法來實現的。因為接口中的屬性都是常量,接口的方法都是沒有方法體的抽象方法,沒有具體定義操作。第四篇:Java五子棋實現報告
第五篇:java知識點小結