【一个简单的Model1模式的JavaEE项目(Web登录程序)】

【一个简单的Model1模式的JavaEE项目(Web登录程序)】(1)浏览器发出请求,该请求由JSP页面接受(2)JavaBean用于实现业务逻辑,JSP根据请求的需要与不同的JavaBean进行交互(3)JavaBean执行业务处理,通过JDBC连接数据库(4)JSP将程序运行的

一个简单的Model1模式的JavaEE项目(Web登录程序)

1、Model1开发模式:

早期的JavaEE项目全部采用JSP编写,JSP文件既要负责创建HTML页面,又要控制网页流程,同时还要负责处理业务逻辑。这给Java EE 项目的开发带来了一系列的问题,如代码耦合性强、系统控制流程复杂、难以维护等,为了解决这些问题,原Sun公司制定了Model1模式(JSP+JavaBean+JDBC)作为Java EE 程序开发的参考性规范。遵循Model1模式开发的Java EE项目系统结构如下图所示:

在这里插入图片描述

2、基于Model1架构的Java EE程序的工作流程按以下4个步骤进行:

(1)浏览器发出请求,该请求由JSP页面接受
(2)JavaBean用于实现业务逻辑,JSP根据请求的需要与不同的JavaBean进行交互
(3)JavaBean执行业务处理,通过JDBC连接数据库
(4)JSP将程序运行的结果信息生成动态的Web网页发回浏览器

3、一个简单的Model1模式的Web登录程序(JSP+JavaBean+JDBC)源码已绑定资源可自取直接导入即可,可以看下面这篇文章对比Model1模式与基础的jsp项目的区别

一个简单的jsp+JDBC的Web登录程序

3.1、src下创建model.vo包构造用户表JavaBean

package model.vo;

public class UserTable { 
   
	//Fields
	private Integer id;
	private String username;
	private String password;
	
	//Property accessors
	//属性 id 的 get/set 方法
	public Integer getId(){ 
   
		return this.id;
	}
	public void setId(Integer id){ 
   
		this.id=id;
	}
	//属性 username 的 get/set 方法
	public String getUsername(){ 
   
		return this.username;
	}
	public void setUsername(String username){ 
   
		this.username=username;
	}
	//属性 password 的 get/set 方法
	public String getPassword(){ 
   
		return this.password;
	}
	public void setPassword(String password){ 
   
		this.password=password;
	}

}

3.2、src下创建jdbc包,编写JDBC代码,驱动包资源里有。

package jdbc;
import java.sql.*;
public class SqlSrvDBConn { 
   
	private Statement stmt;
    private Connection conn;
    ResultSet rs;
    //在构造方法中创建数据库连接
    public SqlSrvDBConn(){ 
   
    	stmt=null;
    	try{ 
   
    		/**加载并注册 SQLServer 2008 的 JDBC 驱动*/
    		//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		//conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=TEST","sa","123456");
    		//加载MySQL驱动
    		Class.forName("com.mysql.jdbc.Driver");
    		conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/TEST","root","123456");
    	}catch(Exception e){ 
   
    		e.printStackTrace();
    	}
    	rs=null;
    }
    //执行查询类的SQL语句,有返回集
    public ResultSet executeQuery(String sql)
    { 
   
        try
        { 
   
        	stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        	rs=stmt.executeQuery(sql);
        }catch(SQLException e){ 
   
        	System.err.println("Data.executeQuery: " + e.getMessage());
        }
        return rs;
    }
    //关闭对象
    public void closeStmt()
    { 
   
        try
        { 
   
            stmt.close();
        }catch(SQLException e){ 
   
        	System.err.println("Data.executeQuery: " + e.getMessage());
        }
    }
    public void closeConn()
    { 
   
        try
        { 
   
            conn.close();
        }catch(SQLException e){ 
   
        	System.err.println("Data.executeQuery: " + e.getMessage());
        }
    }
}

3.3、编写login.jsp(登录页),validate.jsp(验证页),main.jsp(欢迎页),error.jsp(错误处理页)。

login.jsp页面代码如下:

<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
	<title>简易留言板</title>
</head>
<body bgcolor="#E3E3E3">
<form action="validate.jsp" method="post">
<table>
	<caption>用户登录</caption>
	<tr>
		<td>用户名:</td>
		<td>
			<input type="text" name="username" size="20"/>
		</td>
	</tr>
	<tr>
		<td>密码:</td>
		<td>
			<input type="password" name="password" size="21"/>
		</td>
	</tr>
</table>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</form>
如果没注册单击<a href="">这里</a>注册!
</body>
</html>

validate.jsp页面如下:

<%@ page language="java" pageEncoding="gb2312" import="java.sql.*,org.easybooks.test.model.vo.UserTable"%>
<jsp:useBean id="SqlSrvDB" scope="page" class="org.easybooks.test.jdbc.SqlSrvDBConn" />
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
    </head>
    <body>
        <%
        	request.setCharacterEncoding("gb2312");				//设置请求编码
        	String usr=request.getParameter("username");		//获取提交的用户名
            String pwd=request.getParameter("password");		//获取提交的密码
            boolean validated=false;							//验证成功标识
        	UserTable user=null;
        	//先获得UserTable对象,如果是第一次访问该页,用户对象肯定为空,但如果是第二次甚至是第三次,就直接登录主页而无须再次重复验证该用户的信息
        	user=(UserTable)session.getAttribute("user");
        	//如果用户是第一次进入,会话中尚未存储user持久化对象,故为null
        	if(user==null){ 
   
        		//查询userTable表中的记录
        		String sql="select * from userTable";
        		ResultSet rs=SqlSrvDB.executeQuery(sql);		//取得结果集
        		while(rs.next())
        		{ 
   
        			if((rs.getString("username").trim().compareTo(usr)==0)&&(rs.getString("password").compareTo(pwd)==0)){ 
   
        				user=new UserTable();					//创建持久化的JavaBean对象user
        				user.setId(rs.getInt(1));
        				user.setUsername(rs.getString(2));
        				user.setPassword(rs.getString(3));
        				session.setAttribute("user", user);		//把user对象存储在会话中
        				validated=true;							//标识为true表示验证成功通过
        			}
        		}
        		rs.close();
        		SqlSrvDB.closeStmt();
        		SqlSrvDB.closeConn();
            }
            else{ 
   
            	validated=true;									//该用户在之前已登录过并成功验证,故标识为true表示无须再验了
            }
            if(validated)
            { 
   
                //验证成功跳转到main.jsp
        %>
                <jsp:forward page="main.jsp"/>
        <%
            }
            else
            { 
   
                //验证失败跳转到error.jsp
        %>
                <jsp:forward page="error.jsp"/>
        <%
            }
        %>
    </body>
</html>

main.jsp页面如下

<%@ page language="java" pageEncoding="gb2312" import="org.easybooks.test.model.vo.UserTable"%>
<html>
<head>
	<title>留言板信息</title>
</head>
<body>
	<%
		UserTable user=(UserTable)session.getAttribute("user");
		String usr=user.getUsername();
	%>
	<%=usr%>,您好!欢迎登录留言板。
</body>
</html>

error.jsp页面如下:

<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
	<title>出错</title>
</head>
<body>
	登录失败!单击<a href="login.jsp">这里</a>返回
</body>
</html>

与单纯地JSP程序相比,在main.jsp页面中不再是通过request请求输出用户名,而是从会话session中取出之前存入的持久化的JavaBean对象user,然后获取用户信息。

4、部署Tomcat服务器后即可成功运行该Web程序。

可以发现,登录一次用户信息后,返回登录页面重新登录时,不输入用户名和密码,直接点击登录,页面也可以成功跳转到欢迎主页。
这是因为在前次登录时刚验证过的用户信息已经被写入了JavaBean持久化对象并保存于会话中,所以可以自动识别该用户,无需再次进行重复验证。

今天的文章【一个简单的Model1模式的JavaEE项目(Web登录程序)】分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85084.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注