Eclipse通过链接数据库进行对表单的登陆验证,由于刚接触JSP,所以在.jsp里面写了java代码,杂七杂八的,没有对各功能分别封装,全写在一个jsp文件里了,只为了实现功能 。
代码:
<%@ page language="java" import="java.util.*"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<%
String path = request.getContextPath();
%>
<%!public static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
public static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
public static final String USERNAME = "xxxxx";
public static final String PASSWORD = "xxxxx";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="3.jsp" method="post" onsubmit="return validate(this)">
<labelfor"i1">账号</label> <input type="text" id="i1" name="params">
<br />
<labelfor"i2">密码</label> <input type="password" id="i2"
name="Password"> <br />
<!-- <label>行</label>
<input type="text" name="rowspan"> <label>列</label>
<input type="text" name="colspan"> --> <input type="submit"
value="提交">
</form>
</body>
<%
Connection conn = null;
PreparedStatement paste = null;
ResultSet res = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "select user_account,user_password from dh12_user";
paste = conn.prepareStatement(sql);
res = paste.executeQuery(); %>
<script type="text/javascript">
function validate(f) {
var params = f.params.value;
var password = f.Password.value;
if (params == "" || params == null) {
alert("输入信息不能为空");
f.params.focus();//取得焦点
return false;
}<%
while (res.next()) {
%>else if (params == "<%=res.getString(1) %>" && password =="<%=res.getString(2) %>") {
alert("输入成功");
return true;
}<% } %>else {
alert("账号密码不匹配");
return false;
}
}
</script>
<%
} catch (Exception e) {
e.getStackTrace();
} finally {
try {
res.close();
paste.close();
conn.close();
} catch (Exception e2) {
e2.getStackTrace();
}
}
%>
</html>
写了很久,开始一直搞不清,js和jsp要怎么相互融入。刚开始分开写,发现实现不了验证,于是把js嵌入在jsp里面,还是不验证直接跳转了下一个页面,调试发现
params == "<%=res.getString(1) %>" && password =="<%=res.getString(2) %>"
<%= >外面要加引号,然后拼拼凑凑完成了功能 - -;
收获:
一. js一般是把自定义函数放在head,调用函数的语句写在body里。但这个是没有硬性规定的,随你喜欢,可以全部放在body也可以的。只要注意把函数写在调用语句的前面就行了。
二. 基于JavaScript 声明全局变量的三种方式
1)使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。该方式即为显式声明详细如下:
var test = 5; //全局变量
function a()
{
var cc=3; //局部变量
alert(test);
}
function b(){alert(test);}
2)没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量:
test = 5;//全局变量
function a()
{
aa=3; //全局变量
alert(test);
}
3)使用window全局对象来声明,全局对象的属性对应也是全局变量,详细如下:
window.test;
window.test = 5;
三. jsp声明所用action,一般是jsp中的表格信息跳转到action,body和js,body先执行,js一般放在body后面。
四.两个字符串匹配一般使用“==”或者“===”判断,其不同是:
1.== equality 等同,=== identity 恒等。
2.==, 两边值类型不同的时候,要先进行类型转换,再比较。
3.==,不做类型转换,类型不同的一定不等。
①“==”匹配:
不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等var str1=”a”;
var str2="b";
var str1="a";
if(str1 == str2)alert("相等");
else alert("不等");
②”===”匹配:
===如果类型不同,其结果就是不等var str2=”1”;
var str2="b";
var str1="a";
if(str1 === str2)alert("相等");
else alert("不等");
③mach对象比较:
var str1='1;2;3';
var str2='231';
function M(str1,str2){
function sort(s){return s.match(/\d/g).sort()+'' }
return sort(str1)==sort(str2)
}
alert( M(str1,str2)?'相等':'不等');
④equals方法,如:
if(pwd1.equals(pwd2)) {
...}