南昌大学javaweb大作业报告书

更新时间:2024-07-06 04:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件学院大作业实验报告

题 目: 基于Struts的图书管理系统

专 业: 软件工程 班 级: 122班(java方向) 学 号: 8000112163 学生姓名: 王冠 完成人数: 1 人 起讫日期: 2015/05/20

任课教师: 周兴斌 职称: 副教授 部分管主任: 刘晓强 完成时间: 2015/05/30

南昌大学软件学院 java web大作业 实验报告

目录

1.前言 ............................................................................................................................................... 3

1.1 实验目的............................................................................................................................ 3 1.2 实验的基本要求 ................................................................................................................ 3 2. 系统分析与设计 .......................................................................................................................... 3

2.1 系统功能描述(简单需求分析) .................................................................................... 3 2.2 系统功能流程 .................................................................................................................... 3 2.3数据库设计................................................................................................................................. 4

2.3.1数据表的构建 .................................................................................................................. 4 3.系统的实现与测试 ........................................................................................................................ 5

3.1系统采用的关键技术 ......................................................................................................... 5 3.2 关键程序流程 .................................................................................................................... 6 3.3 关键代码分析 .................................................................................................................... 7 3.4 出现的问题及解决 .......................................................................................................... 18

3.4.1向数据库中插入数据出现乱码以及界面显示有中文乱码问题: .................... 18 3.4.2弹出提示框问题 .................................................................................................... 19

4. 系统界面.................................................................................................................................... 19

4.1 进入系统界面 (登录界面) ........................................................................................ 19 4.2 管理员模块界面: .......................................................................................................... 19 4.3 添加图书界面: .............................................................................................................. 20 4.4 罚金设置界面: .............................................................................................................. 20 4.5 用户管理界面: .............................................................................................................. 20 4.6 用户模块界面: .............................................................................................................. 21 4.7 图书检索、借阅界面: .................................................................................................. 21 4.8 续借图书界面: .............................................................................................................. 22 4.9 归还界面: ...................................................................................................................... 22 4.9 安全退出界面: .............................................................................................................. 23 5.操作方法...................................................................................................................................... 23

5.1 登录 ................................................................................................................................. 23 5.2 图书检索,借阅 .............................................................................................................. 23 5.3图书归还,续借 ............................................................................................................... 23 5.4图书,用户的添加 ........................................................................................................... 23 5.5 图书,用户的删除操作 .................................................................................................. 24 5.6 图书,用户的更新操作 .................................................................................................. 24 6.分析与总结.................................................................................................................................. 24

6.1实验分析与总结 ............................................................................................................... 24 7.附录:......................................................................................................................................... 25

7.1 参考文献: ...................................................................................................................... 25 7.3 MVC架构模式的认识 ...................................................................................................... 25

2 / 27

南昌大学软件学院 java web大作业 实验报告

1.前言

1.1 实验目的

学习Web应用程序的开发,以B/S方式,JSP编程技术开发图书管理系统; 通过编程实践掌握JSP的动态网页与sql2012数据库相结合的技术;

通过MVC(模型-视图-控制)架构模式,使其在开发过程中得以应用,并了解Web编程模式下的Model1和Model2 的区别;了解Struts框架的具体含义及在Struts模式下的开发。

1.2 实验的基本要求

数据库表不少于3个,且表之间必须存在关联。

页面设计布局合理,颜色使用恰当,风格统一,页面应不少于10个。 系统功能不少于6个,且能正确运行。

系统采用面向对象的方式设计,尽量使界面、业务、数据之间的耦合关系降低。 代码实现尽量使用事件处理、事务处理。 系统应对一些常见的异常进行适当的处理。

数据的操作以事务的方式实现,要求处理并发问题。

2. 系统分析与设计

2.1 系统功能描述(简单需求分析)

图书管理系统是典型的信息管理系统(MIS),本系统是根据现代化校园的发展而设计的基于jsp的图书管理系统,本系统就是为了管理好图书信息和借阅等一系列操作而设计的。 图书管理系统需要满足来自两方面的需求,这三个方面分别是学生和管理员。学生的需求是查询图书馆的藏书,借阅图书,和退换图书等功能;管理员的功能最为复杂,包括对学生、图书进行管理,及系统状态的查看、维护并。学生要使用图书管理系统,需要进行登陆,登陆之后则可以进行一系列的操作,例如:查询图书,借阅图书,归还图书等功能。而作为管理员,则可以对学生进行添加,只有已添加有卡号的学生才可以进行图书管理系统的登陆,管理员还可以对图书进行增,删,改,查。亦可以对用户进行增,删,改查等功能。

2.2 系统功能流程

为了满足以上的需求,系统分成了两大模块,普通用户模块和管理员模块。

3 / 27

南昌大学软件学院 java web大作业 实验报告

功能模块图如图所示。

相应Struts页面流程如下所示(电子版可自行放大):

2.3数据库设计

2.3.1数据表的构建

本系统采用如下的数据表:

用户信息表 users:用于记录用户信息数据表

4 / 27

南昌大学软件学院 java web大作业 实验报告

字段名 ID username password cardnum userlevel coater borrowed can_borrow 字段名 b_ID b_name b_author b_publish b_type b_count b_hot 类型 nchar nchar nchar int int int int int 类型 int nvarchar nchar nvarchar nchar int int 长度 10 10 10 10 10 10 10 10 长度 10 50 10 50 10 10 10 是否为主键 是 否 否 否 否 否 否 否 是否为主键 是 否 否 否 否 否 否 可否为空 否 否 否 否 否 否 否 否 可否为空 否 否 否 否 否 否 否 说明 用户ID 用户姓名 用户密码 卡号信息 用户级别 借阅限额 已借阅数 可借阅数 说明 图书ID 图书名称 图书作者 图书出版社 图书类型 拥有数量 欢迎度 图书信息表books: (用于存储图书相关信息)

借阅表 borrowbook: (用于表示借阅信息) 字段名 brid cardnum b_ID borrowday shouldreturn 类型 int int int nchar nchar 长度 10 10 10 10 10 是否为主键 是 是 是 否 否 可否为空 否 否 否 否 否 说明 借阅表id 用户表外键 图书表外键 借阅日期 应还日期 罚金表fine: (用于设置罚金) 字段名 fine 类型 float 长度 10 是否为主键 是 可否为空 否 说明 罚金 3.系统的实现与测试

3.1系统采用的关键技术

本系统采用的是Model2模型,Model2表示的是基于MVC模式的框架。MVC是Model-View-Controller的简写。\代表的是应用的业务逻辑(通过JavaBean,), \是应用的表示面(由JSP页面产生),\是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。从而弥补了Model1的不足。

5 / 27

南昌大学软件学院 java web大作业 实验报告

Model2具有组件化的优点从而更易于实现对大规模系统的开发和管理,但是开发MVC系统比简单的JSP开发要复杂许多,它需要更多的时间学习和掌握。同时新东西的引入会带来新的问题(这让我想起来关于\自动计算\的一篇文章,中间提到为了降低系统的复杂度,却导致更高的复杂度)。必须基于MVC组件的方式重新思考和设计应用结构。原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。 所有的页面和组件必须在MVC框架中实现,所以必须进行附加地开发工作。 MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的MVC框架,由于Struts有完整的文档并且相对来讲比较简单,所以用它开发MVC系统还是比较方便地。

3.2 关键程序流程

本实验的总体流程如下:

本系统应用3层架构模型,现分别对其进行阐述:

第一层架构为数据库层,也是程序的最底层(主要由DataBase.java实现),它的功能实现sql2012数据库的连接,函数里封装了几个操作。 public boolean query(String s) (用于查询数据表操作);

public ResultSet getlist(String s) (用于获取数据的可以滚动结果集) ; public int update(String s)(用于简单的数据更新操作)

public boolean executebatch(String a[])(批处理,用于处理多条sql);

第二层为JavaBean层和DAO层,主要实现对数据表的信息及对其进行操作的信息进行封装(主要由文件Books.java、Fine.java、borrowbook.java、Users.java、BookService.java 、borrowbookSevice.java、FineService.java和 UserService.java来实现的)。在相应的JavaBean层封装了所有数据表的信息,在上述的实体类中(Books.java、Fine.java、borrowbook.java、Users.java)仅包含对属性的set和get方法,在相应的DAO层主要包含对数据表的相关操作,如获得该数据表的全部信息或部分信息,增加、删除、修改、查询相应的数据表;

第三层为业务逻辑层,主要由Struts和其的action来实现,实现页面的控制和跳转到相应的jsp页面,其中action主要包括BooksAction.java、LoginAction.java、ResetfineAction.java、UserAction.java。

6 / 27

南昌大学软件学院 java web大作业 实验报告

相应的程序架构如图所示:

3.3 关键代码分析

? 数据库的连接和相关一些操作函数 (在文件DataBase.java中实现的):

package com.wk.util;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;

public class DataBase {

7 / 27

private Connection conn = null; private Statement stmt; ResultSet rs = null; //数据库的url

南昌大学软件学院 java web大作业 实验报告

8 / 27

private String url = \//数据库的用户名密码 String user = \String pass = \

//用于验证查询操作

public boolean query(String s) throws SQLException{

try{

//加载驱动

Class.forName(\

}catch(ClassNotFoundException e){ } try{

//创建链接

conn = DriverManager.getConnection(url, user, pass); stmt = conn.createStatement(); rs = stmt.executeQuery(s);

System.out.println(\加载驱动器类时异常\

}catch(SQLException e){ }

return(rs.next());

System.out.println(\连接数据库的过程中出现SQL异常
\

}

//用于结果集可滚动的操作

public ResultSet getlist(String s) throws SQLException{

try{

南昌大学软件学院 java web大作业 实验报告


\

9 / 27

//加载驱动

Class.forName(\

}catch(ClassNotFoundException e){ System.out.println(\加载驱动器类时异常\

} try{ //建立连接

conn = DriverManager.getConnection(url, user, pass); //得到statement对象 stmt = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

//得到一个可滚动但不可以更新的结果集rs

rs = stmt.executeQuery(s);

}catch(SQLException e){

System.out.println(\更新操作连接数据库的过程中出现SQL异常

} return rs;

}

//用于对数据库的更新

public int update(String s) throws SQLException{ int msg=0; try{ //加载驱动

Class.forName(\

}catch(ClassNotFoundException e){

System.out.println(\加载驱动器类时异常\

南昌大学软件学院 java web大作业 实验报告

}

//批处理,用于处理多条sql

public boolean executebatch(String a[]){

try {

//创建链接

conn = DriverManager.getConnection(url, user, pass); conn.setAutoCommit(false);//关闭自动提交,进行事物处理 stmt = conn.createStatement(); for(int i=0;i

int [] number = stmt.executeBatch();//开始批处理,返回被执行的sql

stmt.addBatch(a[i]);

} try{

//创建链接

conn = DriverManager.getConnection(url, user, pass); stmt = conn.createStatement();

msg = stmt.executeUpdate(s); }catch(SQLException e){ }

return(msg);

System.out.println(\连接数据库的过程中出现SQL异常
\

语句的序号

10 / 27

conn.commit();

System.out.println(\共有\条sql语句被执行\stmt.clearBatch();//清空batch conn.close(); return true;

南昌大学软件学院 java web大作业 实验报告

}

}

//关闭数据流

public void close() throws SQLException{ }

conn.close(); stmt.close(); rs.close();

} catch (SQLException e) { }

return false;

// TODO Auto-generated catch block try {

conn.rollback(); return false;

} catch (SQLException e1) { }

e.printStackTrace();

// TODO Auto-generated catch block e1.printStackTrace();

? 管理员操作用户(在文件UserService.java中实现的)

//管理员对用户的添加操作

public boolean adduser(String a[]) throws SQLException{ //将密码明文转换为密文存入数据库 a[2] = ead.encrypt(a[2]); //利用字符串的拼接组成sql语句

11 / 27

南昌大学软件学院 java web大作业 实验报告

sql = \

values('\ System.out.println(\添加的sql\//调用数据库的更新数据的操作函数 int result = db.update(sql); if(result!=0) return true; return false; }

//管理员对用户的删除操作 public boolean deluser(String id) throws SQLException{ sql = \ System.out.println(\ int result = db.update(sql); if(result!=0) return true; return false; }

//管理员对用户的更新操作 public boolean updateusers(String a[]) throws SQLException{ sql = \ID='\ System.out.println(\更新sql=\ int result = db.update(sql); if(result!=0) return true; return false; } 这里管理员对图书的操作和对用户的操作很类似,这里就不再赘述了。

? 用户对图书的查询,借阅和续借和归还(主要在BooksService.java和

borrowbookService.java实现的) BooksService.java部分代码:

//模糊查询,获取用户的关键词,以此为查询条件进行搜索,默认按人气高至低排列

public ArrayList getbook(String a[]) throws SQLException{ ArrayList al = new ArrayList();

12 / 27

南昌大学软件学院 java web大作业 实验报告

for(int i=0;i

//调用DataBase.java的函数,获取相应的图书列表 rs = db.getlist(sql); while (rs.next()) { Books bk = new Books(); bk.setB_ID(rs.getInt(1)); bk.setB_name(rs.getString(2)); bk.setB_author(rs.getString(3)); bk.setB_publish(rs.getString(4)); bk.setB_type(rs.getString(5)); bk.setB_count(rs.getInt(6)); bk.setB_hot(rs.getInt(7));

al.add(bk); // 将al放到arrayList中 } return al;}

borrowbookService.java部分代码:

//归还图书, public boolean returnbook(String brid,String cardnum,String b_ID) throws SQLException{ String sql1 = \can_borrow+1 where cardnum = \ String sql2 = \ String sql3 = \ String a[] = {sql1,sql2,sql3}; //处理多条语句时,使用事务处理和使用批处理进行处理。 if(db.executebatch(a)) return true; return false; }

//续借图书

13 / 27

南昌大学软件学院 java web大作业 实验报告

public boolean renewbook(String brid) throws SQLException{

//将当前时间获得,拼接之sql,进行数据库表的更新操作 sql = \

Day().getnowdate()+\ System.out.println(\ int r = db.update(sql); if(r!=0){ return true; } return false; }

? 管理员对罚金的设置(主要由FineService.java和Resetfine.java完成的)

FineService.java代码:

package com.wk.service;

import java.sql.ResultSet; import java.sql.SQLException;

import com.wk.util.DataBase;

public class FineService { DataBase db = new DataBase(); ResultSet rs = null; String sql = \

14 / 27

//管理员设定罚金金额

public boolean setfine(float f){

//字符拼接将设置的金额拼接成sql sql = \System.out.println(sql); try { //调用database.java的更新函数进行数据库操作 int r = db.update(sql); if(r!=0){ System.out.println(\设置罚金成功!\ return true; }else{ System.out.println(\设置罚金失败!\ }

} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }

南昌大学软件学院 java web大作业 实验报告

}

return false; }

//获取上一次设定的罚金金额 public float getlastfine(){ float m = 0; sql = \ try { }

//获取当前设定的金额 rs = db.getlist(sql); while(rs.next()){ m = rs.getFloat(1); }

} catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }

return m;

Resetfine.java部分代码:

//设置罚金 if(\ f.setFine(fs.getlastfine()); request.setAttribute(\ return mapping.findForward(\ }else{ f.setFine(fs.getlastfine()); System.out.println(\ request.setAttribute(\ //获取表单输入的罚金金额,转为float类型 fs.setfine(Float.parseFloat(fineForm.getFine())); f.setFine(fs.getlastfine()); System.out.println(\ request.setAttribute(\ //跳转至成功界面 return mapping.findForward(\

}

15 / 27

南昌大学软件学院 java web大作业 实验报告

? 辅助工具包(实现用户密码的加密和时间的计算转换问题)

Day.java

/*

* 换算时间

* 计算两个日期之间相差的天数

* 计算一个日期在n天之后的日期字符串 */

package com.wk.util;

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;

public class Day {

//传入两个时间字符串,计算其中相差的天数

public int getlaterday(String d1,String d2) throws ParseException{

Date a = new SimpleDateFormat(\Date b = new SimpleDateFormat(\//获取相减后天数

long day = (a.getTime()-b.getTime())/(24*60*60*1000);

System.out.println(day+\ return (int) day; }

//获取两个月后时间字符串 public String getdate(){ SimpleDateFormat formatDate = new SimpleDateFormat(\

//字符串转换 Calendar c = Calendar.getInstance(); //new Date().getTime();这个是获得当前电脑的时间,你也可以换成一个随意的时间 c.setTimeInMillis(new Date().getTime()); c.add(Calendar.DATE, 60);//天后的日期 Date date= new Date(c.getTimeInMillis()); //将c转换成Date System.out.println(\ return formatDate.format(date); } //获取当前的时间

16 / 27

南昌大学软件学院 java web大作业 实验报告

}

public String getnowdate(){ Date dt=new Date();

SimpleDateFormat matter1=new SimpleDateFormat(\ System.out.println(matter1.format(dt)); return matter1.format(dt); }

EncryptAndDecrypt.java

package com.wk.util;

public class EncryptAndDecrypt { /**

* 加密String明文输入,String密文输出 *

* @param * @return */ public String encrypt(String sourceString){

char [] p = \图书管理\int n = p.length;

char [] c = sourceString.toCharArray(); int m = c.length;

for(int k = 0;k

return new String (c);//返回密文 } /**

* 输入加密后的String,返回原本的String *

* @param * @return */

public String decrypt(String sourceString){ char [] p = \图书管理\ int n = p.length;

17 / 27

南昌大学软件学院 java web大作业 实验报告

}

}

char [] c = sourceString.toCharArray(); int m = c.length;

for(int k = 0;k

return new String (c);//返回明文

3.4 出现的问题及解决

3.4.1向数据库中插入数据出现乱码以及界面显示有中文乱码问题:

问题描述:当需要将数据插入数据库时,会发现插入的数据有乱码。在界面的表单进行数据输入时,传出传入的中文数据也会出现乱码。

1、JSP显示中文乱码的问题,一般都是没有设置页面编码,注意添加以下这样一段代码 <%@ page pageEncoding=”UTF-8”%>

<%@ page language=\

\指定了当前jsp文件存储使用的编码方式,“contentType”用来指定响应头消息中的\

当服务端的响应头消息中没有指定charset时,客户端会依据上面代码中的charset指定的编码方式解码页面。

2、从表单获取的数据有中文乱码,在Struts里面,一般都使用过滤器进行数据的过滤,保证数据的编码格式与你自己页面设置的一致。关键代码如下: public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub //这里设置接受编码 arg0.setCharacterEncoding(\ //继续让它前进,这句话必须要有 arg2.doFilter(arg0, arg1); }

值得一提的是,arg0.doFilter(arg0,arg1);这句话一定要有,不然过滤器不会向前执行,会停止不前,这样程序就没法运行了!

18 / 27

南昌大学软件学院 java web大作业 实验报告

3、读取数据时,在Servlet中添加request.setCharacterEncoding(\可以很好地解决从JSP页面接受中文参数乱码。

3.4.2弹出提示框问题

问题描述:由于对Struts还不是完全的熟悉,对于其该怎样使用弹出框还是有点困扰,其不能再action里弹出一个弹出框后再进行return mapping 的操作,这样写并不会有提示框,而是直接执行了return mapping语句。 解决方法:使用servlet和jsp结合来弹出提示框,即在servlet里给jsp传递一个参数,然后在jsp里进行该参数的判断,然后根据判断结果看是否弹出提示框,因为在jsp里可以直接写js代码,这样弹出框会方便很多,只要用alert(“我是弹出框!”);这一句就可以了。

4. 系统界面

4.1 进入系统界面 (登录界面)

4.2 管理员模块界面:

19 / 27

南昌大学软件学院 java web大作业 实验报告

4.3 添加图书界面:

4.4 罚金设置界面:

4.5 用户管理界面:

20 / 27

南昌大学软件学院 java web大作业 实验报告

4.6 用户模块界面:

4.7 图书检索、借阅界面:

21 / 27

南昌大学软件学院 java web大作业 实验报告

4.8 续借图书界面:

4.9 归还界面:

22 / 27

南昌大学软件学院 java web大作业 实验报告

4.9 安全退出界面:

5.操作方法

5.1 登录

首先,输入正确网址即可打开系统登录界面,输入正确账号密码,系统会根据账号的级别,相应的进入不同的操作界面。

5.2 图书检索,借阅

登录成功,点击左侧导航栏的检索、借阅,即可进入相应界面。输入关键词,或选择类别,点击搜索,会出现相应内容。

5.3图书归还,续借

登录成功后,点击左侧相应的归还或续借菜单,即可进入相关界面,点击归还或续借按钮即可完成操作。

5.4图书,用户的添加

管理员界面,点击左侧菜单的添加用户和添加图书,输入相关信息,点击添加即可。

23 / 27

南昌大学软件学院 java web大作业 实验报告

5.5 图书,用户的删除操作

管理员界面,点击左侧菜单的删除用户和删除图书,找到想要删除的用户或图书,当然也可以通过id号或卡号进行搜索,然后进行操作。

5.6 图书,用户的更新操作

管理员界面,点击左侧菜单的更新用户和更新图书,找到想要更新的用户或图书,当然也可以通过id号或卡号进行搜索,然后在该用户的这一条记录的相应位置填写修改后的数据(当然有些字段是不能修改的),点击更新按钮即可。

6.分析与总结

6.1实验分析与总结

在这一节中,我主要讨论了两个问题,一个是系统的联机文档,另一个是系统的测试,下面我们分别加以说明。作为一个完整的系统,联机文档是其中不可缺少的部分也是相当重要的部分。好的文档能够使用户快速了解并准确的使用系统的各项功能。减少误操作,减少错误产生的可能,这对用户和开发人员都有很多的好处。所以在开发本系统中,也加入了不少的文档,除了对于几大模块的详细说明外,对于易出错和不易操作的地方(如多条件查询部分)又作了详细的说明。

由于本身能力的局限性,所以做编写的代码,即使经过反复检查也难免出错所以在本阶段力求使用有限的时间找出尽可能多的错误,力求系统尽量正确。我们在本系统的测试中使用了黑盒法(即不关心程序内部的逻辑结构,而是根据程序的功能来设计是检测)请一位不熟悉本系统的人来进行随意性的操作,打破习惯的操作顺序,从中发现错误,在此阶段系统的大量错误得到了改正.

信息管理系统所涉及的数据库设计的重要步骤加载测试。加载测试工作贯穿于程序测试工作的全过程,整个录入、修改、查询、处理工作均可视为对数据库的加载测试工作。要设计出一个好的信息管理系统数据库,除满足系统所要求的功能外,还必须遵守下列原则:1)基本表的个数越少越好。2) 主键的个数越少越好。键是表间连接的工具,主键越少,表间的连接就越简单。3)字段的个数越少越好。4) 所有基本表的设计均应尽量符合第三范式。数据库的设计中,如何处理多对多的关系和如何设计主键,是两个有着较大难度、需要重点考虑的问题。 最后,希望自己在以后的空闲时间,能将该系统逐渐完美,将bugs一个一个的消除,将界面重新设计,使其符合当代的审美潮流。

24 / 27

南昌大学软件学院 java web大作业 实验报告

7.附录:

7.1 参考文献:

[1]JSP编程技巧/清宏计算机工作室编著. 北京:机械工业出版社,2001.1 [2]JAVA EE 工程实训教程/朱俊炎,吴英培编著.天津科学技术出版社., 2010.2 [3]深入JAVA Servlet 网络编程. 清华大学出版社

[4]Struts开发入门与项目实践. 北京:人民邮电出版社, 2005.8 [5]J2EE 应用开发实例精解. 清华大学出版社

7.3 MVC架构模式的认识

模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。 1、模型(Model)

模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.

2、视图(View)

视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。

3、控制器(controller)

控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。

25 / 27

南昌大学软件学院 java web大作业 实验报告

MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性

早期的程序中,如果不注意对数功能和显示的解耦合,常常会导致程序的复杂及难以维护。很多VB,Delphi等RAD程序都有这种问题。甚至现在的C#,Java有时候也会出现把业务逻辑写在显示模块中的现象

管MVC设计模式很早就提出,但在Web项目的开发中引入MVC却是步履维艰。主要原因:一是在早期的Web项目的开发中,程序语言和HTML的分离一直难以实现。CGI程序以字符串输出的形式动态地生成HTML内容。后来随着脚本语言的出现,前面的方式又被倒了过来,改成将脚本语言书写的程序嵌入在HTML内容中。这两种方式有一个相同的不足之处即它们总是无法将程序语言和HTML分离。二是脚本语言的功能相对较弱,缺乏支持MVC设计模式的一些必要的技术基础。直到基于J2EE的JSP Model 2问世时才得以改观。它用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBean技术实现模型的功能

JSP Model 1 与 JSP Model 2

SUN在JSP出现早期制定了两种规范,称为Model1和Model2。虽然Model2在一定程度上实现了MVC,但是它的应用用并不尽如人意

JSP Model 1

JSP Model 2

26 / 27

南昌大学软件学院 java web大作业 实验报告

model2 容易使系统出现多个Controller,并且对页面导航的处理比较复杂

有些人觉得model2仍不够好,于是Craig R. McClanahan 2000年5月 提交了一个WEB framework给Java Community.这就是后来的Struts.

2001年7月,Struts1.0,正式发布。该项目也成为了Apache Jakarta的子项目之一 Struts 质上就是在Model2的基础上实现的一个MVC架构。它只有一个中心控制器,他采用XML定制转向的URL。采用Action来处理逻辑。

27 / 27

本文来源:https://www.bwwdw.com/article/2p4.html

Top