ASP结课作业
题目:
学生姓名:
专业:
学号:
一、主要功能
这个小项目的主要的功能就是用户注册与登陆验证的实现。在用户注册的时候,需要用户填写有效的邮箱信息,因为系统会发一个连接给用户注册的邮箱,用户通过点击链接来完成注册。注册完成后,用户多填写的信息就会被保留在数据库内,在用户登陆的时候,用户
所填写的信息会和数据库内存储的信息进行比对,正确,就会进入主页;错误,会进行相应的错误提示。如果用户忘记密码,还可以通过注册信息时所留的邮箱对自己的密码进行重置。
二、技术描述
1、J SP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1]是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。
Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet 和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。
2、MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
3、JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。Node.js。[1]
在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
4、MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
三、数据库信息
四、代码表达
1、注册页面
2、页面信息验证
var accountfage=0;
var passswordfage=0;
var realnamefage=0;
var emailfage=0;
//账号获取焦点
function focusAccount(thisform){
var account=document.getElementById("accountId").value;
var accountMark=document.getElementById("accountMark");
if(account.length>=0){
accountMark.innerHTML="6~12个字符,可用字母、数字,需以字母开头";
}
}
//账号失去焦点
function blurAccount(thisform){
var account=document.getElementById("accountId").value;
var accountMark=document.getElementById("accountMark");
var c=account.charAt(0);//获取账号开头的第一个字符
if(account.length<6||account.length>12){
if(account.length==0){
accountfage=0;
accountMark.innerHTML="错误:此项不能为空";
}else{
accountfage=0;
accountMark.innerHTML="错误:账号长度应为6~12个字符";
}
}else{
if((/^[A-Za-z0-9]+$/.test(account))&&(/^[A-Za-z]+$/.test(c) )){
accountMark.innerHTML="账号输入成功";
}else{
accountMark.innerHTML="错误:账号必须以字母开头,并且由数字和字母组成";
}
}
}
//密码获取焦点
function focuspassword(thisform){
var password=document.getElementById("passwordId").value;
var passwordMark=document.getElementById("passwordMark");
if(password.length>=0){
passwordMark.innerHTML="6~12个字符,区分大小写";
}
}
//密码失去焦点
function blurpassword(thisform){
var password=document.getElementById("passwordId").value;
var passwordMark=document.getElementById("passwordMark");
if(password.length<6||password.length>12){
if(password.length==0){
passwordMark.innerHTML="错误:此项不能为空";
passwordfage=0;
}else{
passwordMark.innerHTML="错误:账号长度应为6~12个字符";
}
}else{
if((/^[A-Za-z0-9]+$/.test(password))){
passwordfage=1;
passwordMark.innerHTML="密码输入成功";
}else{
passwordfage=0;
passwordMark.innerHTML="错误:请输入有效字符";
}
}
}
//再次确认密码获取焦点
function focuspassword1(thisform){
var password1 = document.getElementById("password1Id").value;
var password1Mark = document.getElementById("password1Mark");
if(password1.length>=0){
password1Mark.innerHTML="请再次填写密码";
}
}
//再次确认密码失去焦点
function blurpassword1(thisform){
var password1 = document.getElementById("password1Id").value; var password = document.getElementById("passwordId").value; var password1Mark = document.getElementById("password1Mark"); if (password1.length < 6 || password1.length > 12) {
if(password1.length==0){password1Mark.innerHTML="错误:此项不能为空";
password1fage=0;}else{
password1Mark.innerHTML="错误:两次填写密码不一致";
password1fage=0;
}
} else {
if(password1==password){
password1fage=1;
password1Mark.innerHTML="密码输入成功";
}else{
password1fage=0;
password1Mark.innerHTML="错误:两次填写密码不一致";
}
}
}
//真实姓名输入获取焦点
function focusrealname(thisform){
var realname=document.getElementById("realnameId").value;
var realnameMark=document.getElementById("realnameMark");
if(realname.length>0){
realnameMark.innerHTML="请输入您的真实姓名";
}
}
//真实姓名输入失去焦点
function blurrealname(thisform){
var realname=document.getElementById("realnameId").value;
var realnaemMark=document.getElementById("realnameMark");
if(realname.length<1||realname.length>5){
if(realname.length==0){
realnameMark.innerHTML="错误:此项不能为空";
realnamefage=0;
}else{
realnameMark.innerHTML="错误:请您输入正确姓名";
realnamefage=0;
}
}else{
if(/[\u4e00-\u9fa5]/.test(realname)){
realnamefage=1;
realnameMark.innerHTML="姓名输入成功";
}else{
realnamefage=0;
realnameMark.innerHTML="错误:请您输入正确姓名";
}
}
}
//邮箱获取焦点
function focuesemai(thisform){
var email=document.getElementById("emailId").value;
var emailMark=document.getElementById("emailMark");
if(email.length>=0){
emailMark.innerHTML="请输入邮箱地址";
}
}
//邮箱失去焦点
function bluremail(thisform){
var email=document.getElementById("emailId").value;
var emailMark=document.getElementById("emailMark");
apos=email.indexOf("@");
dotpos=https://www.doczj.com/doc/1e19068973.html,stIndexOf(".");
if(email.length<=0){
emailMark.innerHTML="错误:此项不能为空";
emailfage=0;
}else{
if(apos<1||dotpos-apos<2){
emailMark.innerHTML="错误:请您输入正确邮箱地址";
emailfage=0;
}else{
emailMark.innerHTML="邮箱地址输入成功";
emailfage=1;
}
}
}
function validate_form(thisform){
with(thisform){
if(validate_required(account,"请输入用户名!",accountfage,"账户")==false){
account.foucs();return false;
}
if (validate_required(password,"密码不能为
空!",passwordfage,"密码")==false)
{password.focus();return false;}
if (validate_required(password1,"两次填写密码不一
致!",password1fage,"重写密码")==false)
{password1.focus();return false;}
if (validate_required(email,"请正确地输入邮箱地
址!",emailfage,"邮箱")==false)
{email.focus();return false;}
if (validate_required(realname,"姓名不能为
空!",realnamefage,"姓名")==false)
{realname.focus();return false;}
}}
function returnIndex(theForm){
theForm.action="a.html";
theForm.submit();
}
function validate_required(field,alerttxt,fage,fagename) {
with (field)
{
if (value==null||value=="")
{
alert(alerttxt);return false;
}
else {
if(fage==0){
alert(fagename+"输入有误,请重新输入!");
return false;
}else{
return true;}
}
}
}
2、登陆页面
3、密码重置
public class mailReset extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException {
ConDB con;
String msg;
HttpSession session=request.getSession();
String stu_nameMd5=request.getParameter("stu_nameMd5");
String randMd5=request.getParameter("randMd5");
try {
con =new ConDB();
String stu_name=con.getLegalReset(stu_nameMd5,randMd5);
if(stu_name!=null){
msg="你的密码已被重置为'abc'";
con.resetPassword(stu_name,"abc");
con.delReset(stu_name);
}else{
msg="错误";
}
session.setAttribute("msg",msg);
response.sendRedirect("result.jsp");
}catch(Exception e){
throw new ServletException(e.fillInStackTrace());
}}
3、发送邮件
public class sendMail {
String username="187********@https://www.doczj.com/doc/1e19068973.html,";//发邮件的邮箱
private Message getMessage(){
Properties p=new Properties();
p.put("mail.transport.protocol","smtp");
p.put("mail.smtp.host","https://www.doczj.com/doc/1e19068973.html,");
p.put("mail.smtp.port","25");
p.put("mail.smtp.auth","true");
String password="yykaoziji1718";//该邮箱的密码
MyAuthor auth=new MyAuthor(username,password);
Session session=Session.getDefaultInstance(p,auth);
Message message=new MimeMessage(session);
return message;
}
public void sendVerify(String stu_email,String
stu_nameMd5,String randMd5)
throws MessagingException {
Message message=getMessage();
message.setFrom(new InternetAddress(username));
message.setRecipient(RecipientType.TO,new
InternetAddress(stu_email));
message.setSentDate(new Date());
message.setSubject("邮箱验证");
//"192.168.1.100"为本人电脑临时IP地址
message.setContent(m,"text/html;charset=gb2312");
Transport.send(message);
}
public void sendReset(String stu_email,String
stu_nameMd5,String randMd5)
throws MessagingException {
Message message=getMessage();
message.setFrom(new InternetAddress(username));
message.setRecipient(RecipientType.TO,new InternetAddress(stu_email));
message.setSentDate(new Date());
message.setSubject("邮箱验证");
message.setContent(m,"text/html;charset=gb2312");
Transport.send(message);
}}
4、MD5算法
public class md5 {
public String getMD5Str(String str) throws NoSuchAlgorithmException,UnsupportedEncodingException{ MessageDigest messageDigest = null;
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) { if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
return md5StrBuff.toString();
} }
5、连接数据库
public class ConDB {
private Connection con;
private Statement sta;
private ResultSet res;
private PreparedStatement pres;
public ConDB() throws SQLException,ClassNotFoundException{ Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:330 6/mail",
"root","258456");
sta=con.createStatement();
}
public void addStudentTemp(String stu_name,String
stu_password,String stu_email)
throws SQLException{
String sql="insert into studentTemp values(?,?,?)";
pres.setString(1,stu_name);
pres.setString(2,stu_password);
pres.setString(3,stu_email);
pres.executeUpdate();
}
public void delStudentTemp(String stu_name)
throws SQLException{
String sql="delete from studentTemp where
stu_name='"+stu_name+"'";
sta.executeUpdate(sql);
}
public void addVerify(String stu_name,String
stu_nameMd5,String randMd5)
throws SQLException{
String sql="insert into verify values(?,?,?)";
pres=con.prepareStatement(sql);
pres.setString(1,stu_name);
pres.setString(2,stu_nameMd5);
pres.setString(3,randMd5);
pres.executeUpdate();
}
public void delVerify(String stu_name)
throws SQLException{
String sql="delete from verify where
stu_name='"+stu_name+"'";
sta.executeUpdate(sql);
}
public String getVerify(String stu_nameMd5,String randMd5) throws SQLException{
String stu_name=null;
String sql="select stu_name from verify where stu_nameMd5=? and randMd5=?";
pres=con.prepareStatement(sql);
pres.setString(1,stu_nameMd5);
pres.setString(2,randMd5);
res=pres.executeQuery();
while(res.next()){
stu_name=res.getString("stu_name");
}
return stu_name;
}
public void addStudent(String stu_name)
throws SQLException{
String sql="insert into student select * from studentTemp where stu_name='"+stu_name+"'";
sta.executeUpdate(sql);
}
public String getStu_name(String stu_email)
throws SQLException{
String sql="select stu_name from student where
stu_email='"+stu_email+"'";
String stu_name=null;
res=sta.executeQuery(sql);
while(res.next()){
stu_name=res.getString("stu_name");
}
return stu_name;
}
public void resetPassword(String stu_name,String
stu_password)
throws SQLException{
String sql="update student set stu_password=? where
stu_name=?";
pres=con.prepareStatement(sql);
pres.setString(1,stu_password);
pres.setString(2,stu_name);
pres.executeUpdate();
}
public boolean existStudent(String stu_name,String
stu_password)
throws SQLException{
boolean exist=false;
String sql="select * from student where stu_name=? and stu_password=?";
pres=con.prepareStatement(sql);
pres.setString(1,stu_name);
pres.setString(2,stu_password);
res=pres.executeQuery();
if(res.next()){
exist=true;
}
return exist;
}
public void addReset(String stu_name,String stu_nameMd5, String randMd5)
throws SQLException {
String sql="insert into reset(stu_name,stu_nameMd5,randMd5) values(?,?,?)";
pres=con.prepareStatement(sql);
pres.setString(1,stu_name);
pres.setString(2,stu_nameMd5);
pres.setString(3,randMd5);
pres.executeUpdate();
}
public void delReset(String stu_name)
throws SQLException {
String sql="delete from reset where
stu_name='"+stu_name+"'";
sta.execute(sql);
}
public String getLegalReset(String stu_nameMd5,String randMd5)
throws SQLException {
String stu_name=null;
String sql="select stu_name,
timestampdiff(hour,sent_time,now()) as hours from reset where stu_nameMd5=? and randMd5=?";
pres=con.prepareStatement(sql);
pres.setString(1,stu_nameMd5);
pres.setString(2,randMd5);
res=pres.executeQuery();
if(res.next()){
stu_name=res.getString("stu_name");
int h=res.getInt("hours");
if(h<=24){
return stu_name;
}}
return stu_name;
}
public void close()
throws SQLException {
{
if (res != null) {
res.close();
}
if (sta != null) {
sta.close();
}
if (con != null) {
con.close();
con = null;
}}}} 五、运行界面
注册页面
邮箱验证
登陆页面
重置密码
六、总结体会
课程设计是培养学生综合运用所学知识,发现、提出、分析并解决实际问题、锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新