ea设计 mvc模式_MVC设计模式

本文介绍了MVC模式的概念,包括模型、视图和控制器的职责。通过示例展示了如何在Java中使用Servlet和JSP实现MVC思想,讨论了服务端跳转与客户端跳转的区别,以及在实际操作中遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

MVC 模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。

View(视图) - 视图代表模型包含的数据的可视化。

Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

例子

仅仅使用Servlet,Servlet不仅要准备数据,还要准备html。

仅仅使用JSP,虽然编写html方便了,但是写java代码不如在Servlet中那么方便。

结合Serlvet和JSP进行数据的显示,就是一种MVC的思想。

这里继htmlservlet实现的增删改查,重写展示英雄列表的代码,实现分页功能,并实现MVC模式。

不加分页显示

HeroDAO.java(根据限制去数据)

public Listlist() {return list(0, Short.MAX_VALUE);

}public List list(int start, intcount) {

List heros = new ArrayList();

String sql= "select * from hero order by id asc limit ?,? ";try (Connection c =(Connection) dbutil.getCon();

PreparedStatement ps=(PreparedStatement) c.prepareStatement(sql);) {

ps.setInt(1, start);

ps.setInt(2, count);

ResultSet rs=(ResultSet) ps.executeQuery();while(rs.next()) {

Hero hero= newHero();int id = rs.getInt(1);

String name= rs.getString(2);float hp = rs.getFloat("hp");int damage = rs.getInt(4);

hero.id=id;

hero.name=name;

hero.hp=hp;

hero.damage=damage;

heros.add(hero);

}

}catch(Exception e) {

e.printStackTrace();

}returnheros;

}

ListHeroServlet.java

packageservlet;importjava.io.IOException;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importdao.HeroDAO;importentity.Hero;public class HeroListServlet extendsHttpServlet{protected voidservice(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

String userName= (String) request.getSession().getAttribute("userName");

System.out.println("欢迎"+userName);if (null ==userName) {

response.sendRedirect("login.html");return;

}

response.setContentType("text/html; charset=UTF-8");int start = 0;int count = 5;try{

start= Integer.parseInt(request.getParameter("start"));

}catch(NumberFormatException e) {//当浏览器没有传参数start时

}int next = start +count;int pre = start -count;int total = newHeroDAO().getTotal();intlast;if (0 == total %count)

last= total -count;elselast= total - total %count;

pre= pre < 0 ? 0: pre;

next= next > last ?last : next;

request.setAttribute("next", next);

request.setAttribute("pre", pre);

request.setAttribute("last", last);

List heros = newHeroDAO().list(start, count);

request.setAttribute("heros", heros);

request.getRequestDispatcher("listHero.jsp").forward(request, response);

}

listHero.jsp

$("a").addClass("btn btn-default btn-xs");

});

idnamehpdamageeditdelete${hero.id}${hero.name}${hero.hp}${hero.damage}编辑删除首 页上一页下一页末 页

还存在一个问题:

当用服务器跳转时当登录进listHero页面时当访问下一页时有问题,但把LoginServlet的doPOST方法名要改为service,但是改为客户端跳转就没有问题了。

//request.getRequestDispatcher("/listHero").forward(request, response);//服务器跳转

response.sendRedirect("listHero");//客户端跳转

待解决:服务端跳转和客户端跳转之间的区别,doPOST、doGET、service之间的区别

根据查两种跳转之间的区别和上一页下一页他们的url,把服务器端跳转改为客户端跳转就可以理解了,因为服务端跳转不改变url,当我们执行上一页下一页时用的时listHero这个url,因此需要用客户端跳转。

至于为什么把doPOST改为service,就是因为我写错了doPOST,应该为doPost,这样就可以了,但是服务器端跳转必须改为客户端跳转。(一定不要因为大意而忽略一些细节。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值