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

 

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

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.编写一个JSP程序,计算1!+2!+3!+4!+5!,并显示出结果。要求先声明计算阶乘的方法,再调用该方法,最后在页面上输出结果。2.2、在JSP页面中静态包含文件。要求程序包含两个文件,主文件静态包含一个能够计算1到1000内的完数的页面。(如果一个正整数刚好等于它的真因子之和,这样的正整数为完数, 例如,6=1+2+3,因此6就是一个完数。)3.动态包含页面并传递数据。要求程序包含两个文件,主文件(actioninclude)加载次文件(redirection),并将随机产生的50~100之间的数据传递给它,并且在页面上显示两个信息:该数据和这个数据的平方根。进阶要求,把动态包含改为动态重定向,比较两者之间的区别。4.本题包括4个JSP程序,one.jsp、two.jsp、three.jsp、error.jsp。 one.jsp具体要求如下:要求one.jsp页面有一个表单,用户使用该表单可以输入一个1至100之间的整数,并提交给下一个页面;如果输入的整数在50至100之间(不包括50)就转向three.jsp,如果在1至50之间就转向two.jsp;如果输入不符合要求就转向error.jsp。要求forward标记在实现页面转向时,使用param子标记将整数传递到转向的two.jsp或three.jsp页面,将有关输入错误传递到转向的error.jsp页面 two.jsp、three.jsp和error.jsp的具体要求如下: 要求two.jsp和three.jsp能输出one.jsp传递过来的值,并显示一幅图像,该图像的宽和高刚好是one.jsp页面传递过来的值。error页面能显示有关抛出的错误信息。(程序中使用的图片,可自行准备)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值