import java.awt.Container;
為彭山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及彭山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、彭山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
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("賬號(hào)");
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ū)動(dòng)失敗!");
}
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
你要先學(xué)會(huì)截圖哦,你發(fā)的看不清楚,重新寫了一個(gè)你參考參考!
import java.awt.GridLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public class Day30A extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel labelName,labelId,labelPass,labelMoney,labelSelect,labelCar;
private JComboBoxString jcb;
private JPanel jp1,jp2,jp3,jp4,jp5,jp6,jp7;
private ButtonGroup btg;
private JRadioButton jr1,jr2;
Day30A(){
this.setTitle("注冊(cè)賬戶");
this.setLayout(new GridLayout(7,1));
this.setSize(300,280);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
this.setVisible(true);
}
private void init() {
String str="卡片類型1,卡片類型2,卡片類型3,卡片類型4,卡片類型5";
jcb=new JComboBox(str.split(","));
labelId=new JLabel("賬號(hào): ");
labelName=new JLabel("姓名: ");
labelPass=new JLabel("密碼: ");
labelMoney=new JLabel("開戶金額:");
labelSelect=new JLabel("存款類型:");
labelCar=new JLabel("卡片類型:");
addFun1();
addFun2();
}
private void addFun2() {
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
this.add(jp5);
this.add(jp6);
this.add(jp7);
}
private void addFun1() {
jp1=new JPanel();
jp1.add(labelId);
jp1.add(new JTextField(15));
jp2=new JPanel();
jp2.add(labelName);
jp2.add(new JTextField(15));
jp3=new JPanel();
jp3.add(labelPass);
jp3.add(new JTextField(15));
jp4=new JPanel();
jp4.add(labelMoney);
jp4.add(new JTextField(13));
jp5=new JPanel();
jp5.add(labelSelect);
btg=new ButtonGroup();
jr1=new JRadioButton("定期");
jr2=new JRadioButton("活期",true);
btg.add(jr1);
btg.add(jr2);
jp5.add(jr1);
jp5.add(jr2);
jp6=new JPanel();
jp6.add(labelCar);
jp6.add(jcb);
jp7=new JPanel();
jp7.add(new JButton("確定"));
jp7.add(new JButton("取消"));
}
public static void main(String[] args) {
new Day30A();
}
}
;?? 我不得不使用好幾個(gè)系統(tǒng) 都是B/S結(jié)構(gòu)的 每次登錄都需要輸入用戶名和密碼 覺得非常麻煩 考慮到其他同事也會(huì)有這樣的需求 不妨就寫個(gè)自動(dòng)登錄的程序吧 之前 也考慮過使用單點(diǎn)登錄 幾經(jīng)嘗試之后還是放棄了 ??? ??? 我習(xí)慣使用Java 本能地開始尋找Java的解決方法 在Google中輸入 Java自動(dòng)登錄 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)下 可以到得到控制臺(tái)輸出了返回值 從返回內(nèi)容里可以看出程序已經(jīng)成功登錄 但要是把這個(gè)網(wǎng)址瀏覽器打開 還是得重新登錄 問題沒有得到根本解決 如果只是惡意注冊(cè) 到這里應(yīng)該就達(dá)到目的了 ??? ??? 看樣子C/S結(jié)構(gòu)下不容易實(shí)現(xiàn)網(wǎng)頁程序自動(dòng)登錄 除非你在C/S程序中內(nèi)嵌一個(gè)瀏覽器 直接在這個(gè)瀏覽器中自動(dòng)訪問系統(tǒng) 應(yīng)該沒有別的方法 主要問題在于我們沒有辦法共享Session ??? ??? 為了便于共享Session 我們只能在瀏覽器中實(shí)現(xiàn)網(wǎng)頁自動(dòng)登錄 通過上面的代碼在jsp頁面中測試 達(dá)不到預(yù)期目標(biāo) ??? ??? 網(wǎng)頁自動(dòng)登錄 就是希望程序自動(dò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)了自動(dòng)登錄的目標(biāo) 現(xiàn)在我通過一個(gè)特殊的網(wǎng)址 就可以自動(dòng)訪問這個(gè)oa了 ??? ??? 你可能注意到參數(shù)url 他的值是經(jīng)過加密的 內(nèi)容是用戶名和密碼 當(dāng)然 你也可以加上有效期 即在有效期內(nèi)這個(gè)鏈接才是有效的 才可以實(shí)現(xiàn)自動(dòng)登錄 lishixinzhi/Article/program/Java/hx/201311/26114
什么都不說了 直接給你代碼吧\x0d\x0apackage com.moliying.ui;\x0d\x0aimport java.awt.BorderLayout;\x0d\x0aimport java.awt.Container;\x0d\x0aimport java.awt.FlowLayout;\x0d\x0aimport java.awt.List;\x0d\x0aimport java.awt.event.ActionEvent;\x0d\x0aimport java.awt.event.ActionListener;\x0d\x0aimport java.io.BufferedWriter;\x0d\x0aimport java.io.FileOutputStream;\x0d\x0aimport java.io.OutputStreamWriter;\x0d\x0aimport java.util.ArrayList;\x0d\x0aimport java.util.Arrays;\x0d\x0aimport javax.swing.JButton;\x0d\x0aimport javax.swing.JFrame;\x0d\x0aimport javax.swing.JLabel;\x0d\x0aimport javax.swing.JPanel;\x0d\x0aimport javax.swing.JPasswordField;\x0d\x0aimport javax.swing.JTextField;\x0d\x0apublic class Login {\x0d\x0aprivate JFrame frame = new JFrame("登錄");\x0d\x0aprivate Container c = frame.getContentPane();\x0d\x0aprivate JTextField username = new JTextField();\x0d\x0aprivate JPasswordField password = new JPasswordField();\x0d\x0aprivate JButton ok = new JButton("確定");\x0d\x0aprivate JButton cancel = new JButton("取消");\x0d\x0apublic Login() {\x0d\x0aframe.setSize(300, 200);\x0d\x0aframe.setBounds(450, 300, 300, 200);\x0d\x0ac.setLayout(new BorderLayout());\x0d\x0ainitFrame();\x0d\x0aframe.setVisible(true);\x0d\x0a}\x0d\x0aprivate void initFrame() {\x0d\x0a// 頂部\x0d\x0aJPanel titlePanel = new JPanel();\x0d\x0atitlePanel.setLayout(new FlowLayout());\x0d\x0atitlePanel.add(new JLabel("系統(tǒng)管理員登錄"));\x0d\x0ac.add(titlePanel, "North");\x0d\x0a// 中部表單\x0d\x0aJPanel fieldPanel = new JPanel();\x0d\x0afieldPanel.setLayout(null);\x0d\x0aJLabel a1 = new JLabel("用戶名:");\x0d\x0aa1.setBounds(50, 20, 50, 20);\x0d\x0aJLabel a2 = new JLabel("密 碼:");\x0d\x0aa2.setBounds(50, 60, 50, 20);\x0d\x0afieldPanel.add(a1);\x0d\x0afieldPanel.add(a2);\x0d\x0ausername.setBounds(110, 20, 120, 20);\x0d\x0apassword.setBounds(110, 60, 120, 20);\x0d\x0afieldPanel.add(username);\x0d\x0afieldPanel.add(password);\x0d\x0ac.add(fieldPanel, "Center");\x0d\x0a// 底部按鈕\x0d\x0aJPanel buttonPanel = new JPanel();\x0d\x0abuttonPanel.setLayout(new FlowLayout());\x0d\x0abuttonPanel.add(ok);\x0d\x0abuttonPanel.add(cancel);\x0d\x0ac.add(buttonPanel, "South");\x0d\x0a\x0d\x0aok.addActionListener(new ActionListener() {\x0d\x0a\x0d\x0a@Override\x0d\x0apublic void actionPerformed(ActionEvent e) {\x0d\x0aSystem.out.println(username.getText().toString());\x0d\x0a}\x0d\x0a});\x0d\x0a\x0d\x0acancel.addActionListener(new ActionListener() {\x0d\x0a\x0d\x0a@Override\x0d\x0apublic void actionPerformed(ActionEvent e) {\x0d\x0aframe.setVisible(false);\x0d\x0a}\x0d\x0a});\x0d\x0a}\x0d\x0apublic static void main(String[] args) {\x0d\x0a//new Login();\x0d\x0a\x0d\x0aString ss = "abbabbbaabbbccba";\x0d\x0a\x0d\x0aSystem.out.println(ss.split("b").length);\x0d\x0a\x0d\x0a}\x0d\x0a}
之前,也考慮過使用單點(diǎn)登錄,幾經(jīng)嘗試之后還是放棄了。
我習(xí)慣使用Java,本能地開始尋找Java的解決方法,在Google中輸入"Java自動(dòng)登錄"、"Java網(wǎng)頁模擬登錄"、"JavaPost登錄",結(jié)果倒是不少,內(nèi)容也差不多,我嘗試很多次終究也沒有達(dá)到我預(yù)期的目標(biāo)。后來,我都不知道這些代碼應(yīng)該在jsp頁面中執(zhí)行還是在c/s結(jié)構(gòu)的程序中執(zhí)行。但這些代碼確實(shí)管用。 我們先分析一下代碼: URLurl=newURL(surl); URLConnectionconn=url.openConnection(); conn.setDoOutput(true); OutputStreamWriterout=newOutputStreamWriter(conn.getOutputStream()); Stringstr="username=yournamepassword=123456"; 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-8")); while((sling=in.readLine())!=null) scontent+=in+"\r\n"; System.out.println(scontent); 在C/S結(jié)構(gòu)下,可以到得到控制臺(tái)輸出了返回值,從返回內(nèi)容里可以看出程序已經(jīng)成功登錄,但要是把這個(gè)網(wǎng)址瀏覽器打開,還是得重新登錄,問題沒有得到根本解決。如果只是惡意注冊(cè),到這里應(yīng)該就達(dá)到目的了。 看樣子C/S結(jié)構(gòu)下不容易實(shí)現(xiàn)網(wǎng)頁程序自動(dòng)登錄,除非你在C/S程序中內(nèi)嵌一個(gè)瀏覽器,直接在這個(gè)瀏覽器中自動(dòng)訪問系統(tǒng),應(yīng)該沒有別的方法,主要問題在于我們沒有辦法共享Session. 為了便于共享Session,我們只能在瀏覽器中實(shí)現(xiàn)網(wǎng)頁自動(dòng)登錄,通過上面的代碼在jsp頁面中測試,達(dá)不到預(yù)期目標(biāo)。 網(wǎng)頁自動(dòng)登錄,就是希望程序自動(dò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\")[0].value=yourname;\r\n"); out.println("document.getElementsByName(\"password\")[0].value=123456;\r\n"); out.println("document.forms[0].submit();\r\n"); out.println("\r\n"); 原理很簡單,通過login.jsp將登錄頁面的全部源代碼寫在當(dāng)前頁面,然后使用javascript腳本將用戶名和密碼的值填充上,最后提交表單。這樣中,終于實(shí)現(xiàn)了自動(dòng)登錄的目標(biāo)?,F(xiàn)在我通過一個(gè)特殊的網(wǎng)址,就可以自動(dòng)訪問這個(gè)oa了。 你可能注意到參數(shù)url,他的值是經(jīng)過加密的,內(nèi)容是用戶名和密碼。當(dāng)然,你也可以加上有效期,即在有效期內(nèi)這個(gè)鏈接才是有效的,才可以實(shí)現(xiàn)自動(dòng)登錄。
希望能解決您的問題。
import?java.awt.Dimension;
import?java.awt.Toolkit;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?javax.swing.JButton;
import?javax.swing.JFrame;
import?javax.swing.JLabel;
import?javax.swing.JOptionPane;
import?javax.swing.JPasswordField;
import?javax.swing.JTextField;
public?class?Test26?{
public?static?void?main(String[]?args)?{
final?String?userName?=?"abc";
final?String?passwrod?=?"123";
JFrame?jFrame?=?new?JFrame("登陸界面");
Dimension?dimension?=?Toolkit.getDefaultToolkit().getScreenSize();
jFrame.setBounds(((int)dimension.getWidth()?-?200)?/?2,?((int)dimension.getHeight()?-?300)?/?2,?200,?150);
jFrame.setResizable(false);
jFrame.setLayout(null);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel?label1?=?new?JLabel("姓名");
label1.setBounds(10,?10,?100,?30);
jFrame.add(label1);
JLabel?label2?=?new?JLabel("密碼");
label2.setBounds(10,?40,?100,?30);
jFrame.add(label2);
final?JTextField?text1?=?new?JTextField();
text1.setBounds(50,?15,?130,?20);
jFrame.add(text1);
final?JPasswordField?text2?=?new?JPasswordField();
text2.setBounds(50,?45,?130,?20);
jFrame.add(text2);
JButton?button?=?new?JButton("Login");
button.setBounds(10,?75,?170,?40);
button.addActionListener(new?ActionListener()?{
@Override
public?void?actionPerformed(ActionEvent?e)?{
if(userName.equals(text1.getText())??passwrod.equals(text2.getText()))?{
JOptionPane.showMessageDialog(null,?"登陸成功誤",?"提示",?JOptionPane.INFORMATION_MESSAGE);
}?else?{
JOptionPane.showMessageDialog(null,?"錯(cuò)誤",?"提示",?JOptionPane.ERROR_MESSAGE);
text1.setText("");
text2.setText("");
}
}
});
jFrame.add(button);
jFrame.setVisible(true);
}
}
我有一個(gè)微信公眾號(hào),經(jīng)常會(huì)分享一些Java技術(shù)相關(guān)的干貨,還有一些學(xué)習(xí)資源。
如果你喜歡我的分享,可以用微信搜索“Java團(tuán)長”或者“javatuanzhang”關(guān)注。