实例,用模式一实现用户登录功能

9 篇文章 0 订阅
 

实例,用模式一实现用户登录功能。

login.jsp为显示登录表单和处理登录请求的页面,登录成功后跳转到logonSuccess.jsp页面,登录失败时重新显示登录表单和失败的帮助信息,以便用户重新登录;如果已登录用户再次访问logon.jsp,login.jsp将请求转发给logonSuccess.jsp页面。

login.jsp页面代码及其分析如下:

<%@ page language="java" import="java.util.*,com.csdn.beans.*,com.csdn.web.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'login.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<%--在当前会话的范围内,如果用户已经登录,那么直接转向到loginSuccess.jsp页面 --%>

<%

if(session.getAttribute("user")!=null){

%>

<jsp:forward page="loginSuccess.jsp"></jsp:forward>

<%

}

%>

<%--如果是没有登录,要显示表单。 --%>

<%--用户信息的验证,用户名和密码封装在LoginFormBean对象中,用户名和密码是否正确,如果正确,就跳转到loginSuccess.jsp页面,如果不正确,还要跳转到login.jsp页面中来,让用户重新登录 --%>

<jsp:useBean id="loginForm" class="com.csdn.beans.LoginFormBean" scope="page"></jsp:useBean>

<jsp:setProperty property="*" name="loginForm"/>

<%

if(request.getParameter("submit")!=null){

//验证

if(loginForm.validate()){//基本语法格式的验证:用户名是不是空格字符或者密码的长度是不是在6-10个字符之间?

//验证用户名和密码是否是合法的

DbUtil util=DbUtil.getInstance();

//查看用户名是否合法

UserBean user=util.getUser(loginForm.getName());

if(user==null){

loginForm.setErrorMsg("name","name is not validate!");

}else{

if(user.validatePassword(loginForm.getPassword())){

//表示登录成功

session.setAttribute("user",user);

pageContext.forward("loginSuccess.jsp");//实现页面跳转

}else{

//用户名存在,但是密码错误

loginForm.setErrorMsg("password","password is error!");

}

}

}

}

%>

<%--表单的显示 --%>

<form action="login.jsp" method="post">

<table>

<tr>

<td>用户名:</td>

<td><input type="text" name="name"/></td>

<td><%=loginForm.getErrorMsg("name ") %></td>

</tr>

<tr>

<td>密&nbsp;&nbsp;码:</td>

<td><input type="password" name="password"/></td>

<td><%=loginForm.getErrorMsg("password") %></td>

</tr>

<tr>

<td><input type="submit" value="submit" name="submit"/></td>

<td><input type="reset" value="reset" name="reset"/></td>

<td>&nbsp;</td>

</tr>

</table>

</form>

</body>

</html>

loginSuccess.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<base href="<%=basePath%>">

<title>My JSP 'loginSuccess.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

<%--用户的详细信息显示出来 --%>

<jsp:useBean id="user" class="com.csdn.beans.UserBean" scope="session"></jsp:useBean>

<jsp:getProperty property="name" name="user"/><br/>

<jsp:getProperty property="password" name="user"/><br/>

<jsp:getProperty property="email" name="user"/><br/>

<a href="login.jsp">注销用户</a>

</body>

</html>

LoginFormBean.java就是封装登录表单信息的JavaBean程序,它可以对各个属性(也就是登录表单内的各个字段中所填写的数据)进行语法格式方面的校验。

LoginFormBean.java代码:

package com.csdn.beans;

import java.util.Hashtable;

//这是一个表单bean

public class LoginFormBean {

private String name;

private String password;

//定义一个属性errors,用来存储所有的错误消息.通过键值对来进行存储的

private Hashtable errors=new Hashtable();

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

//定义一个验证的方法,验证一下输入的账号和密码是否存在语法格式错误

public boolean validate(){

boolean allOk=true;

//验证的代码,验证账号和密码是否有效

//判断

if(name.trim().equals("")){

errors.put("name","name is not empty,please input your true name!");//添加一条错误消息

allOk=false;

}

if(password.length()>10||password.length()<6){

errors.put("password","password must have 6-10 characters!");

allOk=false;

}

return allOk;

}

//想要得到具体的错误消息

public void setErrorMsg(String err,String errMsg){

if(err!=null || errMsg!=null){

//调用put方法

errors.put(err,errMsg);

}

}

//获取Hashtable集合中存储的错误消息

public String getErrorMsg(String err){

String errMsg=(String)errors.get(err);

return (errMsg==null)? "" : errMsg;

}

}

UserBean.java为代表用户信息的JavaBean程序,logon.jsp页面根据登录信息从DbUtil对象中检索出相应的UserBean对象,logonSuccess.jsp页面从UserBean对象中提取用户信息显示。

UserBean.java代码:

package com.csdn.beans;

public class UserBean {

private String name;

private String password;

private String email;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

//验证方法

public boolean validatePassword(String password){

if(this.password.equals(password)){

return true;

}else{

return false;

}

}

}

DbUtil.java是用于访问数据库的辅助类,它相当于一个DAO(数据访问对象),这里用DbUtil类中封装的一个HashTable对象来代替数据库,HashTable对象中的每一个元素即为一个UserBean对象。

DbUtil.java代码:

package com.csdn.web.util;

import java.util.Hashtable;

import com.csdn.beans.UserBean;

public class DbUtil {

private Hashtable users=new Hashtable();

static DbUtil instance=new DbUtil();

private DbUtil(){

UserBean user1=new UserBean();

user1.setName("zhangsan");

user1.setPassword("1234567");

user1.setEmail("zhangsan@126.com");

UserBean user2=new UserBean();

user2.setName("lisi");

user2.setPassword("1234567");

user2.setEmail("lisi@126.com");

UserBean user3=new UserBean();

user3.setName("wangwu");

user3.setPassword("1234567");

user3.setEmail("wangwu@126.com");

users.put(user1.getName(),user1);

users.put(user2.getName(),user2);

users.put(user3.getName(),user3);

}

public static DbUtil getInstance(){

return instance;

}

//根据用户名查找指定的用户

public UserBean getUser(String name){

UserBean user=(UserBean)users.get(name);

return user;

}

}

logonSuccess.jsp是用户登录成功后进入的页面,这里仅仅是显示出登录用户的信息和提供注销用户登录的功能;如果用户没有登录就直接访问logonSuccess.jsp页面,logonSuccess.jsp将请求转发给logon.jsp页面要求用户登录。

UserBean中仅仅是定义了三个属性:name、password和email。注意:要存储在Session域中或跨JVM传输的JavaBean应实现Serializable接口

DbUtil类是一个单件类,在整个Web应用程序中只能创建DbUtil类的一个实例对象,在DbUtil类内部预存储了两个用户信息来模拟数据库中的用户记录。

LogonFormBean对其中的每个属性进行基本的格式验证,如果有误则将相应的错误信息保存到一个HashTable对象中,同时也定义了供JSP页面检索错误信息的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值