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

 

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+"/";

%>

"<%=basePath%>">

My JSP 'login.jsp' starting page

"pragma" content="no-cache">

"cache-control" content="no-cache">

"expires" content="0">

"keywords" content="keyword1,keyword2,keyword3">

"description" content="This is my page">

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

<%

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

%>

"loginSuccess.jsp">

<%

}

%>

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

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

"loginForm" class="com.csdn.beans.LoginFormBean" scope="page">

"*" 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!");

}

}

}

}

%>

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

"login.jsp" method="post">

用户名: "text" name="name"/> <%=loginForm.getErrorMsg("name ") %>
密  码: "password" name="password"/> <%=loginForm.getErrorMsg("password") %>
"submit" value="submit" name="submit"/> "reset" value="reset" name="reset"/>  

loginSuccess.jsp页面代码如下:

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

<%

String path = request.getContextPath();

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

%>

"<%=basePath%>">

My JSP 'loginSuccess.jsp' starting page

"pragma" content="no-cache">

"cache-control" content="no-cache">

"expires" content="0">

"keywords" content="keyword1,keyword2,keyword3">

"description" content="This is my page">

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

"user" class="com.csdn.beans.UserBean" scope="session">

"name" name="user"/>

"password" name="user"/>

"email" name="user"/>

"login.jsp">注销用户

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("[email protected]");

UserBean user2=new UserBean();

user2.setName("lisi");

user2.setPassword("1234567");

user2.setEmail("[email protected]");

UserBean user3=new UserBean();

user3.setName("wangwu");

user3.setPassword("1234567");

user3.setEmail("[email protected]");

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页面检索错误信息的方法。

你可能感兴趣的:(用模式一实现用户登录功能)