电商网站搭建(二)
2 登录页面设计
2.1 初始设计
接下来完成登录页面的功能实现,这里先搭起 login.jsp
的框架,框架和注册页面基本相同,唯一不同的地方是,当表单提交到该页面时,将提交的数据传入 testlogin.tag
文件中进行验证,查看用户是否存在。
因此在 login.jsp
中需要加入如下代码:
<testLogin:testlogin usrtest="<%= usrlog %>" pwdtest="<%= pwdlog %>" />
而在 tag 文件中,首先要引入 Mysql 驱动并设置字符编码(防止乱码),使用 arrtibute
标签进行传值。
<%@ attribute name="usrtest" required="true" %>
<%@ attribute name="pwdtest" required="true" %>
<%@ tag import="java.sql.*" %>
<%@ tag pageEncoding="utf-8" %>
- 注意不是
page
而是tag
。
2.2 验证用户名密码
为了区分是否登陆成功,需要设置一个标记 flag
用于记录是否登录成功。
// 设置标记用于记录用户名密码是否匹配
int flag = 0;
如果用户名密码匹配,输出“登陆成功”信息,并将其置为 1 ,否则还保留初始值 0 。如果 flag
为 0 ,则输出“登陆失败”信息。
以下为尝试登陆的核心代码:
// 尝试登录
try{
con = DriverManager.getConnection(url, user, password);
sql = con.createStatement();
String SQL = "SELECT * FROM userInfo";
rs = sql.executeQuery(SQL);
while(rs.next()) {
if(usrtest.equals(rs.getString(2)) && pwdtest.equals(rs.getString(3))){
session.setAttribute("username", usrtest); // 将username放入session中
out.println("您好,登陆成功" + usrtest);
flag = 1;
// response.sendRedirect("shoplist.jsp");
}
}
con.close();
}
catch(SQLException e) {
out.print("<h1>"+e);
}
if(flag==0){
out.println("对不起,登陆失败");
}
- 需要注意:如果登陆成功,即用户名密码匹配成功,则要使用
session
记录下登陆状态。
登录成功显示如下:
登陆失败显示如下:
此时确实可以实现登录的功能,但是在这里其实是有一个小漏洞,就是当用户名为中文时,登陆页面提交表单将用户名传递到 tag 文件的过程中,由于字符编码问题, tag 文件接收到的中文已经是乱码状态,此时如果进行字符串比较,一定不会匹配成功,因此要在最开始接收到乱码中文用户名时就要重新设置字符编码,使用如下代码:
// 为解决用户名乱码导致无法匹配
String usrtestok = new String(usrtest.getBytes("ISO-8859-1"), "utf-8");
- Q:为什么会出现乱码?
由于 Tomcat 中对于 post
方法提交的表单采用的默认编码为 ISO-8859-1
,而这种编码格式不支持中文字符,因此要先进行转换编码格式。
此时验证中文用户名和密码是否匹配结果如下:
至此,注册登录功能基本实现。