【摘要】:图7.1JSP Model 1 体系结构典型的交互过程是这样的,首先用户通过浏览器调用Web 应用程序中的JSP 页面,发送request 请求,JSP 页面接收到浏览器的请求后,通过调用JavaBean 对象的方法从数据库中读取数据,然后JSP 页面再把数据返回给浏览器,最终在浏览器中显示相应的信息。例7.1:JSP Model 1 示例。所以,Model 1 不能满足大型应用程序的需要。尽管Model 1 体系十分适合简单应用的需要,但却不能满足复杂的大型应用程序的实现。
为了更好地指导Web 开发的架构设计,Sun 公司推广Java Web 开发的时候,提出了两个不同的开发架构模型,又称为JSP Model 1 和JSP Model 2。
JSP Model 1 的结构如图7.1 所示。这种架构主要使用JSP 和JavaBean 技术来开发Web 应用,JavaBean 封装对数据库的操作代码和部分的业务逻辑的代码,JSP 页面中既会包含输出效果的HTML、CSS 代码,也会包含表示业务逻辑的Java 代码。

图7.1 JSP Model 1 体系结构
典型的交互过程是这样的,首先用户通过浏览器调用Web 应用程序中的JSP 页面,发送request 请求,JSP 页面接收到浏览器的请求后,通过调用JavaBean 对象的方法从数据库中读取数据,然后JSP 页面再把数据返回给浏览器,最终在浏览器中显示相应的信息。
下面按照JSP Model 1 的架构编写一个用户登录验证的程序。
例7.1:JSP Model 1 示例。
本例需建立数据库UserDB,UserDB 中包含一张用户信息表(UserInfo),其字段信息见表7.1。
表7.1 UserInfo 表

建立项目ch08_model1,在这个例子程序中有两个JavaBean 类:ConnBean.java 和User.java。ConnBean 类主要封装了获取数据库连接和关闭连接资源的方法。User是用户对应的JavaBean,主要封装了用户的信息,并提供了验证用户的方法。
User.java 的代码如下:


isValidate()方法主要用于对用户名和密码进行验证,登录验证功能的主要业务逻辑在这个Bean 中完成。
ConnBean.java 代码如下:


除了以上两个类之外,在ch08_model1 项目中,还包含3 个JSP 页面,它们分别为:login.jsp、validate.jsp 和index.jsp。它们都在WebRoot 目录下。
login.jsp 主要包含一个登录表单,代码如下:
(www.chuimin.cn)
validate.jsp 主要获取用户提交的表单参数进行验证,其代码如下:


在这个页面中,首先利用<jsp:useBean>动作元素创建User 对象,并设定该对象在page 的范围内可用。接着调用<jsp:setProperty>设置user 对象的属性,然后调用user 对象的isValidate()方法对用户名和密码进行验证,如果验证通过,则利用<jsp:forward>动作元素将请求转发给index.jsp 页面,否则返回登录页面。
index.jsp 页面代码如下:

index.jsp 页面主要就是显示了登录用户的欢迎信息。
下面来测试应用程序,假设数据库中正确的用户名为“admin”,密码为“123456”。发布项目之后,首先访问登录页面,如图7.2 所示。

图7.2 登录页面
输入错误的用户名“zhangsan”和密码“123”进行登录,将出现如图7.3 所示的效果。

图7.3 登录失败
然后输入正确的用户名“admin”和密码“123456”进行登录,将出现如果8.4 所示的效果。

图7.4 登录成功
通过这个例子可以看到,在JSP 页面中编写了流程控制和调用JavaBean 的代码,也就是说,JSP 页面功能不单一,同时肩负了多重角色。试想一下,假如在一个大型的应用程序中,当需要处理的业务逻辑非常复杂时,这种情况将会变得何其糟糕?在JSP 页面中嵌入大量的Java 代码将会使程序变得非常复杂,对于前端页面设计人员来说,大量的嵌入代码使他们无从下手。从根本上讲,将导致角色定义不清和职责分配不明,给项目管理带来不必要的麻烦。
所以,Model 1 不能满足大型应用程序的需要。但是对于小型应用,因为该模型简单,且不涉及过多的要素,从而可以很好地满足小型应用的需求。
尽管Model 1 体系十分适合简单应用的需要,但却不能满足复杂的大型应用程序的实现。不加选择地随意运用Model 1,会导致JSP 页面中被嵌入大量的Java 代码,特别是当需要处理的请求量很大时,情况更为严重。
相关推荐