import java.awt.GridLayout
import java.awt.Toolkit
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.sql.ResultSet
import java.sql.SQLException
import java.sql.Statement
import javax.swing.JDialog
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JPanel
import javax.swing.JPasswordField
import javax.swing.JTextField/*** * @author mzhe**/
class Loginfrm extends JDialog implements ActionListener
{
JLabel l_name,l_pass,l_error
JTextField t_name
JButton b_enter,b_cancle,b_clear
JPanel pan1,pan2,pan3,pan4
JPasswordField t_pass
String sname,spass
int sunit
NetConn sql
Statement sqll
ResultSet rs
Librarybox lbox
int until=0
Loginfrm(JFrame f,String s)
{
//界面布局
super(f,s)
l_name=new JLabel("名字:")
l_pass=new JLabel("密码:")
l_error=new JLabel("请输入用户名和密码登录")
t_name=new JTextField("",10)
t_pass=new JPasswordField("",10)
t_pass.setEchoChar('*')
b_enter=new JButton("确定")
b_enter.addActionListener(this)
b_cancle=new JButton("取消")
b_cancle.addActionListener(this)
b_clear=new JButton("清除")
b_clear.addActionListener(this)
pan1=new JPanel()
pan2=new JPanel()
pan3=new JPanel()
pan4=new JPanel()
pan1.add(l_name)
pan1.add(t_name)
pan2.add(l_pass)
pan2.add(t_pass)
pan3.add(l_error)
pan4.add(b_enter)
pan4.add(b_cancle)
pan4.add(b_clear)
setLayout(new GridLayout(4,1))
add(pan1)
add(pan2)
add(pan3)
add(pan4)
//建立数据库连接
sql=new NetConn()
//设置窗口大小
setSize(300,300)
setVisible(false)
//得到屏幕信息以便使框架居中显示
Dimension screeSize = Toolkit.getDefaultToolkit().getScreenSize()
int screeWidth=screeSize.width
int screeHeight=screeSize.height
//得到框架的大小信息
Dimension frameSize=this.getSize()
int x=(screeWidth-frameSize.width)/2
int y=(screeHeight-frameSize.height)/2
this.setLocation(x, y)
}
public void actionPerformed(ActionEvent e)
{
//单击确定按钮的事件处理程序
if(e.getSource()==b_enter)
{
//如果连续登录次数小于4
if(until<=4)
{
//如果用户名或者密码为空,将显示提示信息
if(t_name.getText().equals("")||t_pass.getText().equals(""))
{
l_error.setText("用户名和密码不能为空")
}
else
{
try{
sqll=sql.connect()
//根据用户名查询
rs=sqll.executeQuery("SELECT * FROM users where username="+"'"+t_name.getText()+"'")
//遍历查询得到的结果集
while(rs.next())
{
sname=rs.getString(2)
spass=rs.getString(3)
//得到登录用户的级别
sunit=Integer.parseInt(rs.getString(4))
//如果密码正确
if(t_pass.getText().equals(spass))
{
//判断用户的级别,根据不同的级别,显示不同的菜单
switch(sunit)
{
case 1:{l_error.setText("登录成功")
t_name.setText("")
t_pass.setText("")
lbox=new Librarybox()
lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
lbox.setResizable(false)
lbox.bookfi.setEnabled(true)
lbox.bookse.setEnabled(true)
lbox.bookth.setEnabled(true)
lbox.bookfo.setEnabled(true)
lbox.mi_system_manger.setEnabled(true)
lbox.mi_system_login.setEnabled(false)
lbox.setVisible(true)this.dispose()
break
}
case 2: {
l_error.setText("登录成功")
t_name.setText("")
t_pass.setText("")
lbox=new Librarybox()
lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
lbox.setResizable(false)
lbox.bookfi.setEnabled(false)
lbox.bookse.setEnabled(false)
lbox.bookth.setEnabled(true)
lbox.bookfo.setEnabled(false)
lbox.mi_system_manger.setEnabled(false)
lbox.mi_system_login.setEnabled(false)
lbox.setVisible(true)
this.dispose()break
}
case 3:
{
l_error.setText("登录成功")
t_name.setText("")
t_pass.setText("")
lbox=new Librarybox()
lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
lbox.setResizable(false)
lbox.bookfi.setEnabled(true)
lbox.bookse.setEnabled(false)
lbox.bookth.setEnabled(false)
lbox.bookfo.setEnabled(true)
lbox.mi_system_manger.setEnabled(false)
lbox.mi_system_login.setEnabled(false)
lbox.fi_msglabel_user.setEnabled(false)
lbox.setVisible(true)
this.dispose()
break
}
}
}
else{
l_error.setText("用户名或密码错误!")
until++
}
}
}catch(SQLException e2){
e2.printStackTrace()
}
}
}
//超出登录次数
else{
l_error.setText("你已经超出登录次数")
t_name.setEnabled(false)
t_pass.setEnabled(false)
b_enter.setEnabled(false)
b_clear.setEnabled(false)
}
}//单击清除按钮的事件处理程序
else if(e.getSource()==b_clear)
{
t_name.setText("")
t_pass.setText("")
l_error.setText("请输入用户名和密码登录")
}
//单击取消按钮的事件处理程序
else if(e.getSource()==b_cancle)
{
dispose()
}
}
}
第一步:创建一个查询过程,因为在登录时要根据用户名查询用户密码此步要用到pl/sql编程知识,代码如下:
create or replace procedure sel_user(uname in varchar2,pass out varchar2) is
begin
select users.password into pass from users where users.username=uname and rownum = 1
end
第二步:编写登录页面(login.java)(采用纯java+servlet编写)
//login.java如下
package cn.hnu
import java.io.IOException
import java.io.PrintWriter
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
public class testhtml extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/htmlcharset=gbk")
try {
PrintWriter pw = resp.getWriter()
pw.println("<html>")
pw.println("<head>")
pw.println("<title>")
pw.println("用户登录")
pw.println("</title>")
pw.println("</head>")
pw.println("<body>")
pw.println("<h1>用户登录</h1>")
pw.println("<hr>")
pw.println("<form method=post action=loginCl>")
pw.println("用户名:<input type=text name=userName><br>")
pw.println("密&nbsp&nbsp码:<input type=password name=password><br>")
pw.println("<input type=submit value=登录>")
pw.println("<input type=reset value=重置>")
pw.println("</form>")
pw.println("</body>")
pw.println("</html>")
} catch (Exception e) {
e.printStackTrace()
// TODO: handle exception
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp)
}
}
第三步:编程成功登录页面(wel.java) //wel.java如下,它主要用于用户正常登录后显示信息给用户
package cn.hnu
import java.io.IOException
import java.io.PrintWriter
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.http.HttpSession
public class Wel extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//防止用户非法登录
HttpSession hs = req.getSession()
String s = (String)hs.getAttribute("pass")
if(s == null){
resp.sendRedirect("login")
}
PrintWriter pw = resp.getWriter()
pw.write("welcome,hello")
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp)
}
}
第四步:编写login处理页面(loginCl.java)
package cn.hnu
import java.io.IOException
import java.sql.*
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.http.HttpSession
public class loginCl extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String u = req.getParameter("userName")
String p = req.getParameter("password")
//查询数据库
String pa=null
Connection ct = null
CallableStatement cs = null
try {
Class.forName("oracle.jdbc.driver.OracleDriver")
ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle",
"scott", "tiger")
cs = ct.prepareCall("{call sel_user(?,?)}")
cs.setString(1, u)
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR)
cs.execute()
pa = cs.getString(2)
System.out.println("u=" + u + " p=" + pa)
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace()
} finally {
try {
if (cs != null) {
cs.close()
}
if (ct != null) {
ct.close()
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
//验证用户信息是否合法
if (p.equals(pa)) {
HttpSession hs = req.getSession(true)//防止用户非法登录
hs.setAttribute("pass", "OK")
resp.sendRedirect("wel")
} else {
resp.sendRedirect("login")
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp)
}
}
亲,sql可以换成MySQL
这个没关系的,别的都可以照搬来用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)