JSP-两种开发模式

本文介绍了JSP的两种开发模式:Model1和Model2。Model1模式结合了JSP和JavaBean,而Model2模式遵循MVC架构,提供更好的组织和可维护性。通过一个具体的MVC实例,阐述了各组成部分的角色,包括login.jsp作为输入页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 >
两种模式的比较
Model1开发模式通过JavaBean改变了java代码与HTML代码混合交织的情况,但它对JavaBean的操作仍然在JSP页面中进行,甚至部分JSP页面只用于与JavaBean交互处理业务逻辑,并不包含HTML网页代码,JSP又充当了控制业务逻辑的角色,使显示层和业务层混合在一起,因此该模式不是理想状态。
Model2开发模式以MVC设计理念, 模型层(Model),视图层(View),控制层(Controller)相区分,使各部分独当一面,各负其责,充分体现了程序中的层次概念。Struts框架是其一个典型实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值