展开全部
界面:
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
* 仿QQ登录界面
*
* @author jiang
*/
public class GUIQQ extends JFrame {
// 用户名
private JTextField username;
// 密码
private JPasswordField password;
// 小容器
private JLabel jl1;
private JLabel jl2;
private JLabel jl3;
private JLabel jl4;
// 小按钮
private JButton bu1;
private JButton bu2;
private JButton bu3;
// 复选框
private JCheckBox jc1;
private JCheckBox jc2;
// 列表框
private JComboBox jcb;
/*
* 构造方法
*/
public GUIQQ() {
62616964757a686964616fe58685e5aeb931333332623334// 设置窗口标题
this.setTitle("QQ2012正式版");
// 窗体组件初始化
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置布局方式为绝对定位
this.setLayout(null);
this.setBounds(0, 0, 355, 265);
// 设置窗体的标题图标
Image image = new ImageIcon("e:/a.gif").getImage();
this.setIconImage(image);
// 窗体大小不能改变
this.setResizable(false);
// 居中显示
this.setLocationRelativeTo(null);
// 窗体可见
this.setVisible(true);
}
/*
* 初始化方法
*/
public void init() {
// 创建一个容器
Container con = this.getContentPane();
jl1 = new JLabel();
// 设置背景图片
Image image1 = new ImageIcon("e:/background.jpg").getImage();
jl1.setIcon(new ImageIcon(image1));
jl1.setBounds(0, 0, 355, 265);
// QQ登录头像设定
jl2 = new JLabel();
Image image2 = new ImageIcon("e:/a.gif").getImage();
jl2.setIcon(new ImageIcon(image2));
jl2.setBounds(40, 95, 50, 60);
// 用户号码登录输入框
username = new JTextField();
username.setBounds(100, 100, 150, 20);
// 用户号码登录输入框旁边的文字
jl3 = new JLabel("注册账号");
jl3.setBounds(260, 100, 70, 20);
// 密码输入框
password = new JPasswordField();
password.setBounds(100, 130, 150, 20);
// 密码输入框旁边的文字
jl4 = new JLabel("找回密码");
jl4.setBounds(260, 130, 70, 20);
// 输入框下方文字
jc1 = new JCheckBox("记住密码");
jc1.setBounds(105, 155, 80, 15);
jc2 = new JCheckBox("自动登录");
jc2.setBounds(185, 155, 80, 15);
// 用户登录状态选择
jcb = new JComboBox();
jcb.addItem("在线");
jcb.addItem("隐身");
jcb.addItem("离开");
jcb.setBounds(40, 150, 55, 20);
// 按钮设定
bu1 = new JButton("登录");
bu1.setBounds(280, 200, 65, 20);
// 给按钮添加1个事件
bu1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String str=e.getActionCommand();
if("登录".equals(str)){
String getName =username.getText();
//String getPwd =password.getText();
JOptionPane.showConfirmDialog(null, "您输入的用户名是"+getName);
}
}
});
bu2 = new JButton("多账号");
bu2.setBounds(5, 200, 75, 20);
bu3 = new JButton("设置");
bu3.setBounds(100, 200, 65, 20);
// 所有组件用容器装载
jl1.add(jl2);
jl1.add(jl3);
jl1.add(jl4);
jl1.add(jc1);
jl1.add(jc2);
jl1.add(jcb);
jl1.add(bu1);
jl1.add(bu2);
jl1.add(bu3);
con.add(jl1);
con.add(username);
con.add(password);
}
public static void main(String[] args) {
// 实例化对象
GUIQQ qq = new GUIQQ();
}
}
后台:
这是一个需要在下面用到的一个自定义运行时异常:
package com.pb.web.exectpion;
/**
* 专用于用户登陆检查的Exception
* @author Voishion
*/
public class DataAccessException extends RuntimeException{
private static final long serialVersionUID = 744741608422506769L;
public DataAccessException() {
super();
// TODO Auto-generated constructor stub
}
public DataAccessException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
}
这是用户登陆的接口:UserDao,因为项目比较简单就省去了业务层的代码,有GenericDao,但是不用紧张,我们的登陆方法比较特殊,所以就没有在GenericDao上面定义:
package com.pb.web.dao;
import com.pb.blog.entity.User;
import com.pb.web.base.GenericDao;
public interface UserDao extends GenericDao{
/**
* 用户登录
* @param name
* @param pass
* @return
* @throws RuntimeException
*/
public User login(String name,String pass) throws RuntimeException;
}
这是我们UserDaoImpl的实现类,当我的用户名和密码正确的时候就返回给Contorl层一个User对象,当用户名或密码错误的时候,我将通过自定义异常DataAccessException来返回给用户错误信息
package com.pb.web.dao;
import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import com.pb.blog.entity.User;
import com.pb.web.base.GenericDaoImpl;
import com.pb.web.exectpion.DataAccessException;
public class UserDaoImpl extends GenericDaoImpl implements UserDao{
@Override
public User login(String name, final String pass) throws RuntimeException{
final String hql="from User where username = '" + name +"'";
return (User) this.getHibernateTemplate().execute(new HibernateCallback() {
User user = null;
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
user = (User) session.createQuery(hql).uniqueResult();
if(user == null){
//用户名不存在
throw new DataAccessException("用户名账号错误");
}else{
//用户存在,判断密码
if(!user.getPassword().equals(pass)){
throw new DataAccessException("用户密码错误");
}
}
return user;
}
});
}
}
接下来就是在Contort层来使用方法了,首先声明本人使用了Spring的事务管理以及IOC,还有就是Struts.xml的配置也省略了,SO You understand^^
package com.pb.web.action;
import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
import com.pb.blog.entity.User;
import com.pb.web.service.UserService;
public class UserAction extends ActionSupport implements SessionAware{
private static final long serialVersionUID = -5053933981088584268L;
private String msg;
private User user;
private UserService service;
private Map session;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setService(UserService service) {
this.service = service;
}
public void setSession(Map session) {
this.session = session;
}
/**
* 登陆用户
* @return
*/
public String login(){
try {
user = service.loginCheck(user);
if(user != null){
session.put("user", user);
msg = "true";
}
} catch (RuntimeException e) {
msg = e.getMessage();
}
return "LOGIN";
}
接下来在页面上使用Jquery来访问吧!-----
/**无刷新登陆及验证*/
function login(){
var name = $("#name").val();
var pass = $("#pass").val();
if((name != null && name !="") && (pass != null && pass !="")){
var params = {"user.username":name,"user.password":pass};
$.ajax({
url:"user!login.action",
type:"post",
data:params,
dataType:"json",
success:function(data){
if(data.msg == "true"){
$("#templatemo_logoutMsg").html("").append("Welcome,"+data.user.username+"!个人主页|退出");
$("#templatemo_logout").show();
$("#templatemo_login").hide();
}else{
$("#templatemo_loginMsg").html(data.msg);
}
},
error:function(){
$("#templatemo_loginMsg").html("网络连接异常");
}
});
}else{
$("#templatemo_loginMsg").html("用户名和密码不能为空");
}
}
所以这样一来,是不是用户就可以清楚的知道,到底是用户名错误还是密码错误了呢?????欢迎提出升级意见哦……………………TKS
已赞过
已踩过<
你对这个回答的评价是?
评论
收起