Web开发之MVC模式实现学生课程信息管理系统
什么是mvc模式?
MVC是一个架构,或者说是一个设计模式,它就是强制性使应用程序的输入,处理和输出分开。将一个应用程序分为三个部分:Model,View,Controller。
Model模型(完成业务逻辑:由javaBean构成,在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和javabean这样的构件对象来处理数据库。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。)
View 视图(就是负责跟用户交互的界面。一般就是由HTML,css元素组成的界面,当然现在还有一些像js,ajax,flex一些也都属于视图层。 在视图层里没有真正的处理发生,之负责数据输出,并允许用户操纵的方式。MVC能为应用程序处理很多不同的视图。 )
Controller 控制器(接收请求—>调用模型—>根据结果派发页面并经过模型处理返回相应数据 )
Mvc模式的优缺点:
优点:
1、分工明确(开发人员可以只关注整个结构中的其中某一层):使用MVC可以把数据库开发,程序业务逻辑开发,页面开发分开,每一层都具有相同的特征,方便以后的代码维护。
它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
2、松耦合(可以降低层与层之间的依赖):视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
3、复用性高(利于各层逻辑的复用):像多个视图能够共享一个模型,不论你视图层是用flash界面或是wap界面,用一个模型就能处理他们。将数据和业务规则从表示层分开,就可以最大化从用代码。、
3、有利于标准化(有利于通过工程化、工具化产生管理程序代码);
用更通俗易懂的话来说就是:分层式设计可以达到:分散关注、松散耦合、逻辑复用、标准定义的目的。
缺点:
1、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
2、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
3、由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。
4、MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
下面是我用javabean+jsp+servlet来实现一个实现一个简单的web项目—一个简易的学生课程信息的管理系统。
其中:
JavaBean对应于Model层
Jsp对应于View层
Servlet对应于Controller层
这三者之间的调用关系如下:
学生课程管理系统能够实现学生课程信息的增删改查功能:
系统功能的具体实现:
For example:
查找学生课程信息功能的实现:
写一个jsp页面,包含一个标签,点击链接到courseFindservlet。courseFindserrvlet用于接受请求, 然后调用JavaBean,由JavaBean来与数据库进行数据的交互,完成数据交互后,然后courseFindservlet将数据转发给jsp页面,jsp页面最后响应浏览器的请求,将学生课程的信息展示在浏览器上,查询学生课程相关信息的功能就实现了。
增加学生课程信息功能的实现:
写一个jsp页面,然后设置一个添加按钮,点击跳转到添加课程信息的一个界面,然后写一个添加信息的界面,包含一个标签,点击链接到增加课程信息的courseAddservlet。这个servlet用于接受请求,然后调用JavaBean,由JavaBean来与数据库进行数据的交互,将数据存储到后台的数据库中,然后将数据转发给jsp页面,点击提交按钮后跳转到学生课程信息的jsp页面,jsp页面最后响应浏览器的请求,显示学生课程信息,发现添加成功,添加学生课程相关信息的功能就实现了。
其他功能的实现大体一致,就不一一展示了。
项目的目录如下:
Jsp文件如下:
项目部分重要代码如下:
课程实体类代码:
public class Course1 {
private String cid;
public String cxf;
public String cmax;
public String cgrade;
public String ctea;
public String cname;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getCxf() {
return cxf;
}
public void setCxf(String cxf) {
this.cxf = cxf;
}
public String getCmax() {
return cmax;
}
public void setCmax(String cmax) {
this.cmax= cmax;
}
public String getCgrade() {
return cgrade;
}
public void setCgrade(String cgrade) {
this.cgrade = cgrade;
}
public String getCtea() {
return ctea;
}
public void setCtea(String ctea) {
this.ctea = ctea;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
添加课程的具体函数如下:
添加功能实现的servlet的主要代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String couid = req.getParameter(“couid”);
String couxf =req.getParameter(“couxf”);
String coumax = req.getParameter(“coumax”);
String cougrade = req.getParameter("cougrade");
String coutea= req.getParameter("coutea");
String couname = req.getParameter("couname");
Course1 course1=new Course1();
course1.setCid(new String(couid.getBytes("ISO-8859-1"), "UTF-8"));
course1.setCxf(new String(couxf.getBytes("ISO-8859-1"), "UTF-8"));
course1.setCmax(new String(coumax.getBytes("ISO-8859-1"), "UTF-8")); // 转值,中文需要转换为utf-8
course1.setCgrade(new String(cougrade.getBytes("ISO-8859-1"), "UTF-8"));
course1.setCtea(new String(coutea.getBytes("ISO-8859-1"), "UTF-8"));
course1.setCname(new String(couname.getBytes("ISO-8859-1"), "UTF-8"));
course1Dao dao=new course1Dao();
dao.addcourse(course1);
req.getRequestDispatcher("FindServlet.do").forward(req, resp);
}
连接数据库的代码:
jsp页面的主要代码:
课程信息:
</tr>
<%
List<Course1> list= (List<Course1>)request.getAttribute("list");
List<Course2> list2= (List<Course2>)request.getAttribute("list2");
if(list == null || list.size() < 1){
out.print("<script language='javascript'>alert('没有数据');</script>");
}else{
for(Course1 Course1:list){
%>
<tr align="center">
<td> <%= Course1.getCid() %></td>
<td> <%= Course1.getCxf() %></td>
<td> <%= Course1.getCmax() %></td>
<td> <%= Course1.getCgrade() %></td>
<td> <%= Course1.getCtea() %></td>
<td> <%= Course1.getCname() %></td>
<td><a href="updateServlet.do?id=<%=Course1.getCid()%>">修改课程信息</a> </td>
课程ID | 课程学分 | 课程容量 | 学生成绩 | 教师 | 课程名 | 添加课程 |
---|