mport?java.awt.HeadlessException;
為衡東等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及衡東網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、衡東網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?javax.swing.ImageIcon;
import?javax.swing.JButton;
import?javax.swing.JFrame;
import?javax.swing.JLabel;
import?javax.swing.JOptionPane;
import?javax.swing.JPanel;
import?javax.swing.JPasswordField;
import?javax.swing.JTextField;
@SuppressWarnings("serial")
public?class?MainFrame?extends?JFrame?{
JLabel?lbl1?=?new?JLabel("用戶(hù)名:");
JLabel?lbl2?=?new?JLabel("密?????碼:");
JTextField?txt?=?new?JTextField("admin",20);
JPasswordField?pwd?=?new?JPasswordField(20);
JButton?btn?=?new?JButton("登錄");
JPanel?pnl?=?new?JPanel();
private?int?error?=?0;
public?MainFrame(String?title)?throws?HeadlessException?{
super(title);
init();
}
private?void?init()?{
this.setResizable(false);
pwd.setEchoChar('*');
pnl.add(lbl1);
pnl.add(txt);
pnl.add(lbl2);
pnl.add(pwd);
pnl.add(btn);
this.getContentPane().add(pnl);
btn.addActionListener(new?ActionListener()?{
@Override
public?void?actionPerformed(ActionEvent?e)?{
if?("admin".equals(new?String(pwd.getPassword()))){
pnl.removeAll();
JLabel?lbl3?=?new?JLabel();
ImageIcon?icon?=?new?ImageIcon(this.getClass().getResource("pic.jpg"));
lbl3.setIcon(icon);
pnl.add(lbl3);
}
else{
if(error??3){
JOptionPane.showMessageDialog(null,"密碼輸入錯(cuò)誤,請(qǐng)?jiān)僭囈淮?);
error++;
}
else{
JOptionPane.showMessageDialog(null,"對(duì)不起,您不是合法用戶(hù)");
txt.setEnabled(false);
pwd.setEnabled(false);
btn.setEnabled(false);
}
}
}
});
}
public?static?void?main(String[]?args)?{
MainFrame?frm?=?new?MainFrame("測(cè)試");
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setBounds(100,?100,?300,?120);
frm.setVisible(true);
}
}
首先,我們得明白用戶(hù)登錄使用什么登陸的,即用戶(hù)在線(xiàn)的原理。這只是將用戶(hù)的對(duì)象存放在了session中而已,然后再frame中進(jìn)行調(diào)用,其他特定頁(yè)面也進(jìn)行直接引用就行。那么實(shí)現(xiàn)“擠下來(lái)”的功能就是讓新生成的session有效,讓原來(lái)存放用戶(hù)的session失效就行。到此,大體思路已經(jīng)有了。那怎么實(shí)現(xiàn)呢?
想要知道怎么實(shí)現(xiàn),就必須要明白session存放用戶(hù)對(duì)象的過(guò)程了。在用戶(hù)登錄之后,我們可以得到用戶(hù)的對(duì)象user,而存放到session中需要執(zhí)行session.setAttribute(key,value); 我們將用戶(hù)的userId或是其他的唯一標(biāo)識(shí)存為key,將用戶(hù)對(duì)象存為值。這樣就能隨時(shí)隨地調(diào)用唯一用戶(hù)了。user存放的問(wèn)題解決了,那相同 登錄 時(shí)session廢除的問(wèn)題呢?
?
這個(gè)其實(shí)也不難,我們可以更具session的特性一樣,用map進(jìn)行存貯,將用戶(hù)的標(biāo)識(shí)存為key,而將其所對(duì)應(yīng)的session存為value,那么當(dāng)重復(fù)用戶(hù)登錄時(shí),只需要取出對(duì)應(yīng)的session,將其invalidate就行了。
至此,實(shí)現(xiàn)思路已經(jīng)明了,聒噪了這么久,大家都急不可耐地想看代碼了吧?以下是代碼:
前置準(zhǔn)備,jsp界面
界面很簡(jiǎn)單,只是一個(gè)簡(jiǎn)單的登錄界面
form action ="%=request.getContextPath()%/UserWXPServlet" method = "post"
用戶(hù)名?input type = "text" name = "username"/br/
密碼?input type = "text" name = "password"/br/
input type = "submit" value ="提交"/
/form
成功后跳轉(zhuǎn)頁(yè)面
歡迎:${sessionScope.user.username}登陸!br/
我這沒(méi)有寫(xiě)失敗頁(yè)面,大家可以自己寫(xiě),失敗頁(yè)面也沒(méi)什么好說(shuō)的了
entity和登錄的實(shí)現(xiàn)
user的javabean
private String username;
private String password;
public User() {
}
public User(String user, String password) {
super();
this.username = user;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
登錄user的service實(shí)現(xiàn)方法,這里就不寫(xiě)dao和接口了,一切以簡(jiǎn)單為
public boolean dologin(User user){
Properties pro = new Properties();
InputStream is = UserWXPServlet.class.getClassLoader().getResourceAsStream("user_wxp.properties");
String password = null;
System.out.println(is+"---------"+pro);
if(user==null){
return false;
}
try {
pro.load(is);
password = pro.getProperty(user.getUsername());
if(user.getPassword()!=nulluser.getPassword().equals(password)){
System.out.println("登陸成功");
return true;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
登錄成功返回true,失敗則返回false。
這篇文章主要介紹了java通過(guò)JFrame做一個(gè)登錄系統(tǒng)的界面完整代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
在java的JFrame內(nèi)通過(guò)創(chuàng)建匿名對(duì)象的方式做登錄界面
package com.sxt;
import java.awt.Container;
import java.awt.GridLayout;
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.JPasswordField;
import javax.swing.JTextField;
public class LoginFrame extends JFrame{
JTextField txtname=new JTextField();
JPasswordField txtpass=new JPasswordField();
JButton bl=new JButton("登錄");
JButton bg=new JButton("關(guān)閉");
//構(gòu)造無(wú)參構(gòu)造器把主要的方法放在構(gòu)造器里,然后在main方法里面調(diào)
public LoginFrame(){
setBounds(25,25,250,250);
Container c = getContentPane();
c.setLayout(new GridLayout(4,2,10,10));
c.add(new JLabel("用戶(hù)名"));
c.add(txtname);
c.add(new JLabel("密碼"));
c.add(txtpass);
c.add(bl);
c.add(bg);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
//注意:此處是匿名內(nèi)部類(lèi)
bg.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
}
);
//注意:此處是匿名內(nèi)部類(lèi)
bl.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {