首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

100分求解JSP登陆验证代码,该如何处理

2012-02-03 
100分求解JSP登陆验证代码要求:JSP+sevlet+javabean+orace的数据库查询跟连接不能写在JSP中有这个代码提供

100分求解JSP登陆验证代码
要求:JSP+sevlet+javabean+orace的
数据库查询跟连接不能写在JSP中
有这个代码提供的朋友送100分,如果提供不了代码的朋友可以帮我找出本人写的所在错误的代码并修改,也给予100分!

QQ:350386127
E-MAIL:lanxinabc@163.com

[解决办法]
import java.sql.DriverManager;
import java.sql.Connection;

public class MyConnection {
public static java.sql.Connection getConnection() throws Exception {
Connection conn = null;
String url = "jdbc:oracle:thin:@localhost:1521:databaseName ";
String usr = "userName ";
String pass = "psw ";
Class.forName( "oracle.jdbc.OracleDriver ");
conn = DriverManager.getConnection(url, usr, pass);
return conn;
}

}

这个类我测试过的,你改一下相应参数,看能不能获取到Connection

[解决办法]
<%@ page contentType= "text/html; charset=GBK " %>
<%@ page import = "java.sql.* "%>

<%Class.forName( "oracle.jdbc.driver.OracleDriver ").newInstance();

String url= "jdbc:oracle:thin:@192.168.1.13:1521:orcl ";

//orcl为你的数据库的SID

String user= "user ";

String password= "password ";

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

request.setCharacterEncoding( "GB2312 ");
String admin_name = request.getParameter( "admin_name ");
String admin_pwd = request.getParameter( "admin_pwd ");
String sql = "select * from scott.admin where admin_name = ' " +admin_name+ " ' ";

ResultSet rs = stmt.executeQuery(sql);
if(rs.next()){
if(rs.getString( "admin_pwd ").equals(admin_pwd)){
session.putValue( "admin ",admin_name);
session.putValue( "password ",admin_pwd);
response.sendRedirect( "/case/corpweb/page/main.jsp ");
}else{
out.print( " <script language= 'javascript '> document.write( '\u5bc6\u7801\u4e0d\u6b63\u786e\uff0c\u8bf7\u540e\u9000\u91cd\u586b\uff01 '); </script> ");
}
}else{
out.print( " <script language= 'javascript '> document.write( '\u8be5\u7528\u6237\u4e0d\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u586b\u5199\uff01 '); </script> ");
}
%>

[解决办法]
<%!
Connection con= null ;
PreparedStatement stmt= null ;
ResultSet rs= null ;
%>
<%
// 声明一个boolean变量,用于保存用户是否合法的状态
boolean flag = false ;

// 接收参数
String name= request.getParameter( "name ") ;
String password = request.getParameter( "psw ") ;
%>
<%
String sql = "SELECT name FROM info WHERE name=? and psw=? " ;
try
{
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");
con=DriverManager.getConnection( "jdbc:odbc:jsjdj ");
stmt = con.prepareStatement(sql) ;
stmt.setString(1,name) ;
stmt.setString(2,password) ;
rs = stmt.executeQuery() ;
if(rs.next())
{
// 用户合法
flag = true ;
// 将用户名保存在session之中
session.setAttribute( "uname ",rs.getString(1)) ;


}
else
{
// 保存错误信息
request.setAttribute( "err ", "错误的用户名及密码!!! ") ;
}
rs.close() ;
stmt.close() ;
con.close() ;
}
catch(Exception e)
{}
%>


<%// 跳转
if(flag)
// 用户合法
{ %>

<jsp:forward page= "admin.jsp "/>
<%
}
else
{
// 用户非法
%>
<jsp:forward page= "index.jsp "/>

<%
}

%>

[解决办法]
http://blog.csdn.net/jsnjlc/archive/2006/10/26/1351853.aspx
本人BLOG上的,代码如下:
首先是要生成验证码:
package XX.XX

import java.io.*;
import java.util.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.*;

public class ImageEnsure ...{
public ImageEnsure() ...{
}

private char mapTable[] = ...{ '0 ', '1 ', '2 ', '3 ',
'4 ', '5 ', '6 ', '7 ', '8 ', '9 '};

public String getEnsure(int width, int height, OutputStream os) ...{

if (width <= 0)
width = 60;
if (height <= 0)
height = 20;

BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();

// 设定背景色
g.setColor(new Color(0xDCCCCC));
g.fillRect(0, 0, width, height);

//画边框
g.setColor(Color.black);
g.drawRect(0, 0, width - 1, height - 1);

// 取随机产生的认证码
String strEnsure = " ";

// 4代表4位验证码
for (int i = 0; i < 4; ++i) ...{
strEnsure += mapTable[(int) (mapTable.length * Math.random())];
}

// 将认证码显示到图象中
g.setColor(Color.red);
g.setFont(new Font( "Atlantic Inline ", Font.PLAIN, 14));

//画的具体坐标
String str = strEnsure.substring(0, 1);
g.drawString(str, 8, 14);
str = strEnsure.substring(1, 2);
g.drawString(str, 20, 15);
str = strEnsure.substring(2, 3);
g.drawString(str, 35, 18);
str = strEnsure.substring(3, 4);
g.drawString(str, 45, 15);

// 释放图形上下文
g.dispose();

try ...{
// 输出图象到页面
ImageIO.write(image, "JPEG ", os);
} catch (IOException e) ...{
return " ";
}

return strEnsure;
}
}

然后是调用,可以在页面调用,也可以在servlet中调用,我推荐是单独的一个servlet调用,在页面调用可能会出现异常,但是不影响使用。在servlet中写上如下的代码:
//禁用缓存,每次访问此页面,都重新生成
response.setHeader( "Pragma ", "No-cache ");
response.setHeader( "Cache-Control ", "no-cache ");
response.setDateHeader( "Expires ", 0);

//生成验证码的实例对象
ImageEnsure ie = new ImageEnsure();

//调用里面的方法,返回的是生成的验证码中的字符串
String str = ie.getEnsure(0,0,response.getOutputStream());

//获得session,并把字符串保存在session中,为后面的对比做基础
HttpSession session = request.getSession();
session.setAttribute( "strEnsure ", str);

然后把servlet内嵌到具体的网页中,具体嵌入就是用DreamWeaver在需要插入验证码的地方插入图像,地址就指向此servlet即可。


输入验证码并提交后,在新的页面中可以按如下方法判断:


<body>
<%
//session的默认存在时间为20分钟,如果20分钟不输入验证码,session将会消失,因此要做下判断
if(session.getAttribute( "strEnsure ")==null)
...{
%>
<jsp:forward page= "ImageErr.jsp "/>
<%
}else...{
//获取在session中保存的生成验证码的数字
String ensure = (String)session.getAttribute( "strEnsure ");

//获取在页面的表单中输入的验证码
String code = request.getParameter( "txtimage ");

//判断输入的验证码,跟保存的生成的验证码是否一样
if(ensure.equals(code) && code != null)
...{
%>
<jsp:forward page= "searchword?method=add "/>
<%
}else...{
%>
<jsp:forward page= "ImageErr.jsp "/>
<%
}
}
%>
</body>

热点排行