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,这样就可以了,但是服务器端跳转必须改为客户端跳转。(一定不要因为大意而忽略一些细节。)