不要復(fù)雜化,代碼要簡單化,需求是什么就寫什么。參考如下:
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供軹城網(wǎng)站建設(shè)、軹城做網(wǎng)站、軹城網(wǎng)站設(shè)計(jì)、軹城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、軹城企業(yè)網(wǎng)站模板建站服務(wù),10多年軹城做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
//用于保存用戶帳戶信息的數(shù)組
Scanner?scanner?=?new?Scanner(System.in);
String[]?user?=?new?String[2];?
while?(true)?{
//銀行主界面
System.out.println("------------------------------歡迎來到銀行------------------------------");
System.out.println("請選擇編號:\n1:注冊\n2:登錄\n3退出");
int?num?=?scanner.nextInt();
switch?(num)?{
case?1:
//注冊
System.out.println("請輸入您的賬戶名:");
String?name?=?scanner.next();
user[0]?=?name;
System.out.println("請輸入您的密碼:");
String?password?=?scanner.next();
user[1]?=?password;
System.out.println("注冊成功!");
//返回主界面
break;
case?2:
while?(true)?{
//登錄
System.out.println("請輸入您的帳戶名:");
String?userName?=?scanner.next();
System.out.println("請輸入您的密碼:");
String?userPwd?=?scanner.next();
//判斷輸入的用戶名是否在數(shù)組中存在(判斷該用戶是否注冊)
if(user[0].equals(userName)user[1].equals(userPwd)){
System.out.println("-----------登錄成功,請選擇您要辦理的業(yè)務(wù)------------");
break;
}else{
System.out.println("-----------用戶名或密碼錯(cuò)誤,請重新輸入------------");//返回到登錄界面
continue;
}
}
break;
case?3:
//退出系統(tǒng)?程序結(jié)束
System.out.println("退出成功,歡迎再次使用");
System.exit(0);
break;
default:
break;
}
}
;?? 我不得不使用好幾個(gè)系統(tǒng) 都是B/S結(jié)構(gòu)的 每次登錄都需要輸入用戶名和密碼 覺得非常麻煩 考慮到其他同事也會有這樣的需求 不妨就寫個(gè)自動登錄的程序吧 之前 也考慮過使用單點(diǎn)登錄 幾經(jīng)嘗試之后還是放棄了 ??? ??? 我習(xí)慣使用Java 本能地開始尋找Java的解決方法 在Google中輸入 Java自動登錄 Java網(wǎng)頁模擬登錄 JavaPost登錄 結(jié)果倒是不少 內(nèi)容也差不多 我嘗試很多次終究也沒有達(dá)到我預(yù)期的目標(biāo) 后來 我都不知道這些代碼應(yīng)該在jsp頁面中執(zhí)行還是在c/s結(jié)構(gòu)的程序中執(zhí)行 但這些代碼確實(shí)管用 ??? ??? 我們先分析一下代碼 ??? ??? Stringsurl= ;??? ??? URLurl=newURL(surl) ??? ??? URLConnectionconn=url openConnection() ??? ??? conn setDoOutput(true) ??? ??? OutputStreamWriterout=newOutputStreamWriter(conn getOutputStream()) ??? ??? Stringstr= username=yournamepassword= ;??? ??? out write(str) ??? ??? out flush() ??? ??? out close() ??? ??? 到這里 如果在C/S結(jié)構(gòu)中 且參數(shù)正確 程序能夠成功登錄到這個(gè)oa系統(tǒng) 要看到結(jié)果 你可以通過下面的代碼將系統(tǒng)服務(wù)器返回的結(jié)果System out println()出來 ??? ??? Stringsling= ;??? ??? Stringscontent= ;??? ??? BufferedReaderin=newBufferedReader(newInputStreamReader(conn getInputStream() UTF )) ??? ??? while((sling=in readLine())!=null)??? ??? scontent+=in+ \r\n ;??? ??? System out println(scontent) ??? ??? 在C/S結(jié)構(gòu)下 可以到得到控制臺輸出了返回值 從返回內(nèi)容里可以看出程序已經(jīng)成功登錄 但要是把這個(gè)網(wǎng)址瀏覽器打開 還是得重新登錄 問題沒有得到根本解決 如果只是惡意注冊 到這里應(yīng)該就達(dá)到目的了 ??? ??? 看樣子C/S結(jié)構(gòu)下不容易實(shí)現(xiàn)網(wǎng)頁程序自動登錄 除非你在C/S程序中內(nèi)嵌一個(gè)瀏覽器 直接在這個(gè)瀏覽器中自動訪問系統(tǒng) 應(yīng)該沒有別的方法 主要問題在于我們沒有辦法共享Session ??? ??? 為了便于共享Session 我們只能在瀏覽器中實(shí)現(xiàn)網(wǎng)頁自動登錄 通過上面的代碼在jsp頁面中測試 達(dá)不到預(yù)期目標(biāo) ??? ??? 網(wǎng)頁自動登錄 就是希望程序自動填充用戶名和密碼 然后以Post方式提交給登錄頁面的Form所指向的action頁面或方法 我將系統(tǒng)的登錄頁面的源代碼保存成一個(gè)網(wǎng)頁 然后在username和password文本框中設(shè)置默認(rèn)值 然后通過這網(wǎng)頁登錄系統(tǒng) 測試后 發(fā)現(xiàn)可行 接下來 你可能已經(jīng)想到了解決方法 ??? ??? 我們可以通過url openConnection()建立連接 將返回的scontent打印出來 然后接著打印以下代碼 ??? ??? out println( \r\n ) ??? ??? out println( document getElementsByName(\ username\ )[ ] value=yourname;\r\n ) ??? ??? out println( document getElementsByName(\ password\ )[ ] value= ;\r\n ) ??? ??? out println( document forms[ ] submit() \r\n ) ??? ??? out println( \r\n ) ??? ??? 原理很簡單 通過login jsp將登錄頁面的全部源代碼寫在當(dāng)前頁面 然后使用javascript腳本將用戶名和密碼的值填充上 最后提交表單 這樣中 終于實(shí)現(xiàn)了自動登錄的目標(biāo) 現(xiàn)在我通過一個(gè)特殊的網(wǎng)址 就可以自動訪問這個(gè)oa了 ??? ??? 你可能注意到參數(shù)url 他的值是經(jīng)過加密的 內(nèi)容是用戶名和密碼 當(dāng)然 你也可以加上有效期 即在有效期內(nèi)這個(gè)鏈接才是有效的 才可以實(shí)現(xiàn)自動登錄 lishixinzhi/Article/program/Java/hx/201311/26114
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.swing.*;public class Login extends JFrame{
JLabel user,passwd;
JTextField userput;
JPasswordField passput;
JButton denglu,tuichu;
public Login(){
super("用戶登錄");
Container c=getContentPane();
c.setLayout(null);
Font f=new Font("宋體",Font.PLAIN,12);
user=new JLabel("賬號");
passwd=new JLabel("密碼");
userput=new JTextField();
passput=new JPasswordField();
denglu=new JButton("登錄");
denglu.setFont(f);
denglu.addActionListener(new NewAction());
tuichu=new JButton("退出");
tuichu.setFont(f);
tuichu.addActionListener(new NewAction());
user.setBounds(50,50,60,20);
userput.setBounds(110,50,150,20);
passwd.setBounds(50,80,60,20);
passput.setBounds(110,80,150,20);
denglu.setBounds(50,160,60,30);
tuichu.setBounds(200,160,60,30);
c.add(user);
c.add(userput);
c.add(passwd);
c.add(passput);
c.add(denglu);
c.add(tuichu);
setSize(350, 300);
setVisible(true);
}
class NewAction implements ActionListener{
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=CDM";
String user="sa";
String passwd="394513265";
java.sql.Connection con;
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con= DriverManager.getConnection(url,user,passwd);
}catch(Exception ep){
JOptionPane.showMessageDialog(null, "加載驅(qū)動失敗!");
}
if(e.getSource()==denglu){
Find();
}
if(e.getSource()==tuichu){
dispose();
}
} public void Find(){
String lk="select * from login";
try{
Statement sql=con.createStatement();
ResultSet rs=sql.executeQuery(lk);
while(rs.next()){
if(rs.getString(1).equals(userput.getText()) rs.getString(2).equals(passput.getText()))
new MainClient();
else
JOptionPane.showMessageDialog(null, "用戶名或密碼錯(cuò)誤");
}
rs.close();
}catch(SQLException p){
JOptionPane.showMessageDialog(null, p.getMessage());
}
}
}
public static void main(String[] args) {
Login l=new Login();
l.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
步驟就是建個(gè)工程 然后建個(gè)class