Model1模式指的是JSP+JavaBean,Model2模式指的是MVC模式。
Model1模式:
在这种模式下,Web应用程序的开发开始有了层次概念,JSP页面用于显示一个视图,JavaBean用于各种业务逻辑。Model1模式从JSP页面中分离出业务逻辑。
Model2模式:
Model2模式提出了MVC的设计理念,分别为视图层,控制层,模型层相分离。JSP+Servlet+JavaBean,其中JSP作为视图层为用户提供与程序交互的界面,JavaBean作为模型层封装实体对象及业务逻辑,Servlet作为控制层接收各种业务请求,并调用JavaBean模型组件对业务逻辑进行处理。
MVC原理
MVC是一种经典的程序设计理念,此模式将应用程序分为3个部分,分为模型层(Model),视图层(View),控制层(Controller),MVC便是这三个单词的缩写。
1.模型层(Model)
模型层是应用程序的核心部分,主要由JavaBean组件来充当,可以是一个实体对象或一种业务逻辑。之所以称为模型,是因为它在应用程序中有更好的重用性,扩展性。
2.视图层(View)
视图层提供应用程序与用户之间的交互界面。在MVC模式中,这一层并不包含任何的业务逻辑,仅仅提供一种与用户相交互的视图,在Web应用中由JSP,HTML界面充当。
3.
控制层(Controller)
控制层用于对程序中的请求进行控制,起到一种宏观调控的作用,它可以通知容器选择什么样的视图,什么样的模型组件,在Web应用中由Servlet充当。
下面了解一个MVC实例,涉及文件如下:
l login.jsp——视图部分的输入文件
l success.jsp——视图部分的输出文件
l failure.jsp——视图部分的输出文件
l LoginBean.java——模型部分
l LoginServlet.java——控制器部分
l web.xml——web应用的配置文件
下面分别介绍:
1、login.jsp:该功能的输入文件,用户首先访问这个文件。主要用于输入用户名和口令。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
<%@ page contentType="text/html;charset=gb2312"%>
<
script
language
=
"JavaScript"
>
function isValidate(form)
{
// 得到用户输入的信息
username = form.username.value;
userpass = form.userpass.value;
// 判断用户名长度
if(!minLength(username,6))
{
alert("用户名长度小于6位!");
form.username.focus();
return false;
}
if(!maxLength(username,8))
{
alert("用户名长度大于8位!");
form.username.focus();
return false;
}
// 判断口令长度
if(!minLength(userpass,6))
{
alert("口令长度小于6位!");
form.userpass.focus();
return false;
}
if(!maxLength(userpass,8))
{
alert("口令长度大于8位!");
form.userpass.focus();
return false;
}
return true;
}
// 验证是否满足最小长度
function minLength(str,length)
{
if(str.length>=length)
return true;
else
return false;
}
// 判断是否满足最大长度
function maxLength(str,length)
{
if(str.length<=length)
return true;
else
return false;
}
</
script
>
<
html
>
<
head
>
<
title
>用户登陆</
title
>
</
head
>
<
body
>
<
h2
>用户登录</
h2
>
<
form
name
=
"form1"
action
=
"login"
method
=
"post"
onsubmit
=
"return isValidate(form1)"
>
用户名:<
input
type
=
"text"
name
=
"username"
> <
br
>
口令:<
input
type
=
"password"
name
=
"userpass"
><
br
>
<
input
type
=
"reset"
value
=
"重置"
>
<
input
type
=
"submit"
value
=
"提交"
><
br
>
</
form
>
</
body
>
</
html
>
|
代码中提供了客户端验证功能(用户名和口令的长度为6-8位)。验证通过之后会把请求提交给控制器Servlet。
2、success.jsp:
登录成功之后会跳转到这个界面,界面的代码如下:
1
2
3
4
5
6
7
8
9
|
<%@ page contentType="text/html;charset=gb2312"%>
<
html
>
<
head
>
<
title
>登录成功</
title
>
</
head
>
<
body
>
<
h2
>${sessionScope.username}您好,欢迎登录网上书店!</
h2
>
</
body
>
</
html
>
|
代码中使用表达式语言把登录后的用户信息显示在街面上。
3、failure.jsp:
登录失败后会跳转到这个界面,界面的代码如下:
1
2
3
4
5
6
7
8
9
|
<%@ page contentType="text/html;charset=gb2312"%>
<
html
>
<
head
>
<
title
>登录失败</
title
>
</
head
>
<
body
>
<
h2
>用户名或者口令不正确,请<
a
href
=
"login.jsp"
>重新登录!</
a
></
h2
>
</
body
>
</
html
>
|
代码中提供了一个超链接,能够链接到登录界面。
4、LoginBean.java:
完成登录功能,这里假设用户名和口令相等表示登录成功。
1
2
3
4
5
6
|
package
beans;
public
class
LoginBean {
public
boolean
validate(String username,String userpass){
return
username.equals(userpass);
}
}
|
5、LoginServlet.java
该文件完成控制,主要功能可以描述如下:
l 从login.jsp获取用户输入的用户名和口令;
l 创建LoginBean的对象,调用LoginBean的方法validate;
l 根据方法返回的结果,选择success.jsp或者failure.jsp对用户响应。
完整的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package
servlets;
import
java.io.IOException;
import
java.io.PrintWriter;
import
javax.servlet.*;
import
javax.servlet.http.*;
import
beans.*;
public
class
LoginServlet
extends
HttpServlet {
public
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
doPost(request,response);
}
public
void
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
// 获取用户输入的用户ID和口令
String username = request.getParameter(
"username"
);
String userpass = request.getParameter(
"userpass"
);
// 创建模型对象
LoginBean loginBean =
new
LoginBean();
// 调用业务方法进行验证
boolean
b = loginBean.validate(username,userpass);
// 要转向的文件
String forward;
// 如果登陆成功,把用户名写入session中,并且转向success.jsp,
// 否则转向failure.jsp
if
(b){
// 获取session
HttpSession session = (HttpSession)request.getSession(
true
);
// 把用户名保存到session中
session.setAttribute(
"username"
,username);
// 目标转向文件是success.jsp
forward =
"success.jsp"
;
}
else
{
// 目标转向文件是failure.jsp
forward =
"failure.jsp"
;
}
// 获取Dispatcher对象
RequestDispatcher dispatcher = request.getRequestDispatcher(forward);
// 完成跳转
dispatcher.forward(request,response);
}
}
|
代码中把登录用户的用户信息保存在了session中,在实际应用中同样也是这样处理的。
6、web.xml
主要代码是Servlet的配置,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
web-app
version
=
"2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
<
servlet
>
<
description
>This is the description of my J2EE component</
description
>
<
display-name
>This is the display name of my J2EE component</
display-name
>
<
servlet-name
>LoginServlet</
servlet-name
>
<
servlet-class
>servlets.LoginServlet</
servlet-class
>
</
servlet
>
<
servlet-mapping
>
<
servlet-name
>LoginServlet</
servlet-name
>
<
url-pattern
>login</
url-pattern
>
</
servlet-mapping
>
</
web-app
>
|
Model2开发模式以MVC设计理念,
模型层(Model),视图层(View),控制层(Controller)相区分,使各部分独当一面,各负其责,充分体现了程序中的层次概念。Struts框架是其一个典型实现。