一个简单的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