MVCçå®ç¨æç¨ï¼å¸¦ä½ çè§£å®çä¸ç
ä¹åçè¿æå客çæååºè¯¥é½å·²ç»æäºservletåJSPç使ç¨åä»ä»¬çç¹æ§ï¼æä»¬å¨ä½¿ç¨servletè¿è¡è®¾è®¡å¼åæ¶ï¼ä¼éå°çæ¿ï¼æä»¬éè¦å¨åå°ä»£ç ä¸åå ¥å¤§éçhtmlå 容ï¼å 容ç¹çèä¸ä¹ä¸å¥½çæ´ä¸æ¹ä¾¿ä¿®æ¹åç»´æ¤ãæä»¬å¨ä½¿ç¨JSPè¿è¡å¼åçæ¶åï¼åå°ä¸å¡é»è¾ä»£ç å带å°äºåå°é¡µé¢ä¸å»åï¼å¾ä¸æ¹ä¾¿ãé£MVCçè¿ç§è®¾è®¡æ¨¡å¼å°±è§£å³äºè¿ä¸ªé®é¢ï¼å®è½å¤è®©æä»¬çåå端ä¸å¨ä¸èµ·åï¼é¡µé¢å°±æ¯é¡µé¢ï¼åå°å°±æ¯åå°ï¼æä»¬åªéè¦å®æååç«¯æ°æ®ç交äºå°±OKäºãé£å¾å¤äººä¼çº³é·ï¼æ°æ®æä¹ä¼ éçå¢ï¼å«çæ¥ï¼å¨ä¸é¢çdemo䏿ä¼å¾è¯¦ç»çè§£éã
ææ¯å°±æ¯è¿æ ·ï¼åä¸çç¹æ§å¾éè¦ï¼ä½æ¯åªææä»ä»¬çåä¸ç¹æ§ç»åèµ·æ¥ä½¿ç¨ï¼æ´æ¹ä¾¿æä»¬çå¼åï¼è¿ææ¯æ´éè¦çï¼å ¶å®è¿ä¹å°±æ¯æè°æ¡æ¶çç念ã
MVCï¼Model View Controlï¼æ¯ä¸ç§åå±è®¾è®¡æ¨¡å¼ï¼æè°åå±ï¼å°±æ¯è°è¯¥å¹²å就干åï¼äºä¸ææ°ã
Modelæçæ¯æ¨¡åï¼ä¹å°±æ¯æä»¬é常çè§£çæ°æ®åå¤å±ï¼å®ä¸»è¦è´è´£è¿æ¥æ°æ®åºï¼åå¤sqlå¹¶æ§è¡ï¼å®ææä»¬çå¢å æ¹æ¥æä½ã
Viewæçæ¯è§å¾ï¼ä¹å°±æ¯æä»¬å¸¸è¯´çå端页é¢ï¼ç¨æ¥å±ç¤ºå尿们éè¦çæ°æ®åå 容ã
Controlæçæ¯æ§å¶å±ï¼ä»æ¯MVCçæ ¸å¿é¨åï¼è¿éæ°æ®å±åå±ç¤ºå±ã宿乿§å¶å¢ï¼é¦å å®ä¼ä»æ°æ®åå¤å±è°åç¸åºçæ¹æ³ï¼è·åå°æ°æ®å°ä»è¿éï¼ç¶åæè¿äºæ°æ®è¿è¡ä¸å¡å¤çï¼åéè¿ä¼ éåæ°æè request对象çå°æ°æ®ä¼ éå°å端页é¢ãæè 宿å端页é¢ä¼ éè¿æ¥çæ°æ®éè¿è°ç¨å¶å®çæ¹æ³äº¤ç»æ°æ®åå¤å±ï¼è®©ä»åè¿æ°æ®åºä¸ãè¿å°±æ¯ä»çå·¥ä½å 容ã
å ¶å®MVCçè¿ç§è®¾è®¡æ¹å¼å¾å®¹æçè§£ï¼çè§£æäºMVCï¼ç¸ä¿¡å¤§å®¶å¨ä»¥åçè§£æ´å¤æ¡æ¶çæ¶å伿å¾å¤§ç帮å©ã
ä¸é¢æéè¿èªå·±æå»ºçdemoç»å¤§å®¶éæ¥åæMVCæ¯ææ ·ä»æ å°æçã
ä¸ï¼åå¤å·¥ä½
1. é¦å åå¤æä»¬çæ°æ®åºï¼æè¿éçdemoæ¯éè¿mvc宿坹ä¸å¼ 表çå¢å æ¹æ¥æä½ãæä»¥åªæ°å»ºä¸å¼ 表ï¼è¡¨ç»æå¦ä¸å¾ï¼
主é®idï¼èªå¢é¿ï¼ãè±éånameãè¡éHpã伤害damage
æå¨æ·»å å æ¡æ°æ®è¿å»ãæ°å»ºæ°æ®åºåæ·»å æ°æ®å°±ä¸ä¸ä¸èµè¿°äºã
2.eclipse䏿°å»ºä¸ä¸ªdynamic Web project项ç®ï¼é 置好tomcatï¼æ°å»ºweb.xmlæä»¶ãå¨libè·¯å¾ä¸å¯¼å ¥jarå ï¼è¿éç¨å°çjarå æï¼mysql-conncetor-java-bin.jar,servlet-api.jar,jstl.jar,standard.jarã项ç®è·¯å¾æªå¾å¦ä¸ï¼
3. å¨web䏿°å»ºheroList.jspç¨æ¥å±ç¤ºæä»¬æ¥è¯¢å°çç»æãsrcè·¯å¾ä¸æ°å»ºbeanå ï¼javabeanä¹å°±æ¯æä»¬çå®ä½ç±»ï¼ãdaoå ï¼è¿æ¥æ°æ®åºå¹¶æ§è¡sqlï¼ä¹å°±æ¯modelå±ï¼ï¼è¿éçdefault packageå ä¸å°±æ¯æä»¬çcontrolå±ï¼å¨srcä¸å³å»æ°å»ºclassï¼æé»è®¤çæ¥åå æå°±ä¼æ°å»ºå¨è¿ä¸ª default packageå ä¸ã
äºï¼å¼å§è®¾è®¡
æä»¬å å®ç°ä¸ä¸ªåè½ï¼ä»æ°æ®åºä¸æ¥è¯¢åºææçè±éï¼å¹¶æ¾ç¤ºå¨å端页é¢çè¡¨æ ¼ä¸ã
1. é¦å æ°å»ºæä»¬çbeanå ä¸javaBeanå®ä½ç±»ï¼Hero.javaï¼å®ä¹åéid,name,hp,damageãå¹¶ç»åºå¯¹åºçgetteråsetteræ¹æ³ãå®ä½ç±»åå¤å¥½äºãï¼å¦æä¸æç½ä¸ºä»ä¹è¦å»ºå®ä½ç±»çè¯ï¼ä½ å°±æå®çè§£æä¸ä¸ªå¯¹è±¡ï¼ä¸ä¸ªå¯¹è±¡éé¢è£ çå°±æ¯æä»¬æ°æ®åºä¸ç䏿¡è®°å½å°±å¥½äºï¼é åç¾åº¦ä½ å°±æäºï¼
2. å¨daoå 䏿°å»ºHeroDao.javaï¼å®æJDBCè¿æ¥æ°æ®åºï¼å®ææ¥è¯¢æ°æ®åºä¸ææè±éçæ¹æ³ã代ç å¦ä¸ï¼
package com.mvc.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.mvc.bean.Hero;
public class HeroDao {
public HeroDao() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection() {
String user = "root";
String password = "root";
String data = "jdbc:mysql://localhost:3306/test";
Connection con = null;
try {
con = DriverManager.getConnection(data, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("*****************æ°æ®åºè¿æ¥æåï¼*****************");
return con;
}
public List<Hero> getList() {
List<Hero> listHero = new ArrayList<Hero>();
try {
Connection con = getConnection();
Statement stmt = con.createStatement();
String sql = "select * from hero";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
Hero hero = new Hero();
int id = rs.getInt("id");
String name = rs.getString("name");
int damage = rs.getInt("damage");
float hp = rs.getFloat("hp");
hero.setId(id);
hero.setName(name);
hero.setHp(hp);
hero.setDamage(damage);
listHero.add(hero);
}
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return listHero;
}
}
大æ¦è§£éä¸ä¸ï¼éåheroDaoçæ åæé æ¹æ³ï¼å¹¶å¨å ¶ä¸å è½½JDBCMySQLçå 载类ã
æ°å»ºgetConnectionæ¹æ³ï¼ç¨æ¥è¿æ¥æ°æ®åºï¼æä»¬å¨å ¶ä»æ¹æ³ä¸ç´æ¥è°ç¨å³å¯ ã
getList()æ¹æ³ï¼è·åæ°æ®åºä¸ææçè±éï¼æ¤ä¸ºJDBCåºç¡ç¥è¯ï¼å¦æç䏿就çè¡¥ä¸ä¸JDBCçåºç¡å§ã
ä¹å°±æ¯è¯´ï¼å¦ææä»¬å¨å ¶ä»ç±»ä¸è°ç¨äºgetList()æ¹æ³ä¹åï¼è¿åå¼ä¸çlistHeroéåä¸å°±æ¯æä»¬æ°æ®åºä¸çå ¨é¨è±éæ°æ®ã
3. ç¼åæä»¬çcontrolå±ï¼è¿éåå端ãå¨src䏿°å»ºç±»HeroList.javaï¼é»è®¤å å æï¼ä¸»è¦æ¯æ¹ä¾¿å¨web.xmlä¸é ç½®servletç®ä¾¿ï¼ä¸ç¨å å åï¼ãè¿ä¸ªç±»å°±æ¯ä¸ä¸ªservlet,让ä»ç»§æ¿httpServletç±»ãå¹¶éåserviceæ¹æ³ï¼ç¨æ¥å¤ç请æ±ãå¨serviceæ¹æ³ä¸ï¼æä»¬æ°å»ºheroå®ä½ï¼å¹¶æ°å»ºä¸ä¸ªéåherosæ¥åæ¾æ°æ®åºä¸æ¥è¯¢åºæ¥çéåãç¶åè°ç¨heroDaoä¸çgetList()æ¹æ³ãå°è¿åç»æç»herosãå°herosåå¨å¨sessionä¸ï¼éç¹æ¥äºï¼MVCæ§å¶å±å¨ååç«¯äº¤æ¢æ°æ®çæ¹å¼å°±æ¯éè¿requestæè session对象çsetAttribute()æ¹æ³æ¥åæ¾åæ¿åæ°æ®ãè¿éåè§£éä¸ä¸ï¼sessionä¼è¯å¯¹è±¡å¨ç¨æ·å¼åæµè§å¨ï¼è®¿é®æå¡å¨çæ¶åå°±èªå¨å建äºï¼å ³éæµè§å¨æè è¶ è¿æææå°±å¤±æäºãrequestå¯¹è±¡ä¼ éåæ°åªä¼å¨ä¸æ¬¡å®æ´ç请æ±ä¸ææï¼è¯·æ±ç»ææè åèµ·æ°çè¯·æ±æ¶æ°æ®å°±ä¸¢å¤±äºãä¸è¬ä½¿ç¨sessionåæ¾æ°æ®çå¤ãå ·ä½è¯·åèæçå客JSPåservletä¸å¯¹sessionçä»ç»ãæåå°æå¡å¨éå®åå°heroList.jsp页é¢ä¸ã代ç å¦ä¸ï¼
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mvc.bean.Hero;
import com.mvc.dao.HeroDao;
public class HeroList extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
//éªè¯æ¯å¦ç»å½æå ææ¶å
忽ç¥
if(null == request.getSession().getAttribute("user") || "" == request.getSession().getAttribute("user")) {
response.sendRedirect("login.html");
return;
}
//以ä¸ä¸ºå页代ç ï¼ææ¶å
忽ç¥
int total = new HeroDao().getTotal();
int start = 0;
int count = 5;
int lastPage = 0;
if(total/count == 0) {
lastPage = total -count;
}else {
lastPage = (total/count) * count;
}
try {
int next = Integer.parseInt(request.getParameter("next"));
if(next <= total) {
start = next;
}else {
start = (total/count) * count;
}
} catch (Exception e) {
start = 0;
}
//ä»è¿éå¼å§çï¼æ°å»ºéå对象
List<Hero> heros = new ArrayList<Hero>();
//忽ç¥ï¼æ¤ä¸ºå页å
容
int xiaye = start + count;
int shangye = xiaye - (count * 2);
if(shangye < 0) {
shangye = 0;
}
//å°æ°æ®åºæ¥è¯¢ç»æèµå¼ç»herosï¼å¹¶åå¨sessionä¸ï¼key为hero1,éå®åå°å端页é¢ã
heros = new HeroDao().getHeroList(start,count);
request.setAttribute("xiaye", xiaye);
request.setAttribute("shangye", shangye);
request.setAttribute("lastPage", lastPage);
request.getSession().setAttribute("hero1", heros);
request.setAttribute("hero", heros);
request.getRequestDispatcher("heroList.jsp").forward(request, response);
}
}
4. æ¤æ¶æå¡å¨å°åå°è½¬åï¼http:localhost:8080/mvc/heroList.jspï¼å¹¶å¨sessionä¸åäºä¸ä¸ªkey为hero1çæ°æ®ãæ¥ä¸æ¥æ¯æä»¬çViewå±heroList.jspå¦ä½å°sessionä¸çå¼ååºï¼ç¶åæ¾ç¤ºåºæ¥çæ¶åäºã
卿¹JSPä¸ï¼æä»¬éè¦ç¨å°jstlçç¥è¯åEL表达å¼ï¼ä¸¤è æçJSPå客䏿ä»ç»ï¼å¾ç®åï¼ï¼jarå å·²ç»å¯¼å ¥å¥½ã
å å ¥æä»¤<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>åè¯æµè§å¨æä»¬ä½¿ç¨cæ ç¾ã
å ä¸ä»£ç ï¼
<%@page import="com.mvc.bean.Hero"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style>
a{
text-decoration: none
}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>è±éå表</title>
</head>
<body>
<h2>***************使ç¨JSPè·åçæ°æ®åºä¸çéåå¼***************</h2>
<%
List<Hero> hlist = (List<Hero>)request.getSession().getAttribute("hero1");
%>
<table style="width: 400px;" align="center" border="1">
<tr>
<td>id</td>
<td>name</td>
<td>hp</td>
<td>damage</td>
</tr>
<%for(int i = 0; i < hlist.size(); i++) { %>
<tr>
<td><%=hlist.get(i).getId() %></td>
<td><%=hlist.get(i).getName() %></td>
<td><%=hlist.get(i).getHp() %></td>
<td><%=hlist.get(i).getDamage() %></td>
</tr>
<%} %>
</table>
<h2>***************使ç¨JSTLä¸çforEachè·åçæ°æ®åºä¸çéåå¼***************</h2>
<table style="400px;"border="1" bordercolor="lightSkyBlue" align="center" cellspacing="0">
<tr>
<td>id</td>
<td>name</td>
<td>hp</td>
<td>damage</td>
<td colspan="2" align="center"><font color="green">æä½</font></td>
</tr>
<c:forEach items="${hero1}" var="hero" varStatus="st">
<tr>
<td>${hero1.id}</td>
<td>${hero1.name}</td>
<td>${hero1.hp}</td>
<td>${hero1.damage}</td>
<td><a href="update?id=${hero1.id}"><font color="green">æ´æ°</font></a></td>
<td><a href="del?id=${hero1.id}"><font color="red">å é¤</font></a></td>
</tr>
</c:forEach>
</table>
<div align="center">
<a href="?next=0">é¦é¡µ</a>
<a href="?next=${shangye}">ãä¸ä¸é¡µã</a>
<a href="?next=${xiaye}">ãä¸ä¸é¡µã</a>
<a href="?next=${lastPage}">æ«é¡µ</a>
</div>
<hr>
<p>å½åå¨çº¿ç¨æ·æ°ä¸ºï¼${online_number}</p>
<a href="goOut">éåºç»å½</a>
</body>
</html>
æè¿é使ç¨äºä¸¤ç§æ¹å¼å±ç¤ºæ°æ®ï¼ä¸ç§æ¯çº¯JSPå±ç¤ºï¼ä¸ç§æ¯æ¯è¾æ¹ä¾¿çEL表达å¼å±ç¤ºæ°æ®ãå页åå 餿´æ°åå½åç¨æ·å¨çº¿æ°é£éå ä¸ç¨çãåªçè¡¨æ ¼ä¸çæ°æ®å±ç¤ºå³å¯ã
对代ç è¿è¡è§£éï¼æå¡å¨å¸¦çsessionæ°æ®è¿å ¥å°è¯¥é¡µé¢ï¼æä»¬è·åsession䏿°æ®çæ¹å¼æå¾å¤ç§ï¼è¿é使ç¨äºJSPçéå¼å¯¹è±¡request.getSession.getAttribute(heros1)æ¹æ³æ¥è·åæè 使ç¨EL表达å¼ä¸${heros1}ãå 为æä»¬heros1æ¯ä¸ªéåï¼éåä¸åçæ¯heroå¯¹è±¡ï¼æä»¬éè¦çæ°æ®å¨å¯¹è±¡ä¸ï¼ä¹å°±æ¯heros1[*].hero.nameè¿æ ·çå½¢å¼è·åï¼æä»¥æä»¬éè¦éåæ°æ®ï¼å®æåæ°ãè¿é使ç¨çæ¯JSTLä¸çforEachãéè¿è¿ç§æ¹å¼ï¼æä»¬åç«¯é¡µé¢æåçæ¾ç¤ºåºäºæ°æ®åºä¸çå 容ãå 为使ç¨äºå页ï¼åªæ¾ç¤ºäºæ¡æ°æ®
5. é ç½®web.xmlï¼é ç½®æä»¬çservletï¼å°åæ è¾å ¥ï¼http:localhost:8080/mvc/heroListï¼è¯·æ±æå¡å¨ï¼å°±ä¼å°æä»¬æ¾ç¤ºè±éç页é¢å¦ã
<servlet>
<servlet-name>HeroList</servlet-name>
<servlet-class>HeroList</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HeroList</servlet-name>
<url-pattern>/heroList</url-pattern>
</servlet-mapping>
6. å ¶å®ä½ 妿伿ä½çè¿äºï¼å¯¹äºMVCä½ å·²ç»ææ¡äºï¼ä»å°±æ¯servletåJSPçç»åçï¼æ²¡æä»ä¹ç¹æ®çå
ä¸ï¼å æ¹æä½ãå¢å æä½è¿éä¸ååäºï¼æå ´è¶£çæåå¯ç»åæçservletå客èªè¡èç³» ã
1. å¨heroDaoä¸å¢å å é¤åä¿®æ¹çæ¹æ³ï¼å ¶ä¸å é¤å¾ç®åï¼åªéè¦è·åè¯¥æ¡æ°æ®çID对åºå»æ°æ®åºæ§è¡å 餿ä½å³å¯ï¼æ´æ°åå¤äºä¸é¨ï¼éè¦å 仿°æ®åºä¸è·åå°è¯¥æ¡æ°æ®ï¼ç¶åå¨ç¼è¾åä¿åãå ·ä½ä»£ç å¦ä¸ï¼
//å é¤
public void delHero(int id) {
try {
String sql = "delete from hero where id = ?";
Connection con = getConnection();
PreparedStatement pm = con.prepareStatement(sql);
pm.setInt(1, id);
pm.execute();
pm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//è·å
public Hero getById(int id) {
Hero hero = new Hero();
try {
String sql = "select * from hero where id=?";
Connection con = getConnection();
PreparedStatement pm = con.prepareStatement(sql);
pm.setInt(1, id);
ResultSet rs = pm.executeQuery();
while(rs.next()) {
hero.setId(rs.getInt("id"));
hero.setName(rs.getString("name"));
hero.setHp(rs.getFloat("hp"));
hero.setDamage(rs.getInt("damage"));
}
pm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return hero;
}
//æ´æ°
public void updateHero(Hero hero) {
try {
Connection con = getConnection();
String sql = "update hero set name=?,hp=?,damage=? where id = ?";
PreparedStatement pm = con.prepareStatement(sql);
pm.setString(1, hero.getName());
pm.setFloat(2, hero.getHp());
pm.setInt(3, hero.getDamage());
pm.setInt(4, hero.getId());
pm.execute();
pm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2. é ç½®web,xmlæä»¶ï¼é ç½®å é¤åæ´æ°çservlet:
3.. ç¼ådelHero.javaåupdateHero.javaç±»ï¼é¦å ä¸å®åæï¼è§å¯ä¸é¢çheroList.jspä¸ï¼å¯¹åºçå é¤åæ´æ°é¾æ¥ä¼ä¼ éä¸ä¸ªåæ°ï¼å°±æ¯è¯¥æ¡æ°æ®çidå¼ãæä»¬å¨é¡µé¢ä¸ç¹å 餿¶ï¼è¿æ¥è®¿é®servletï¼servlet访é®delHeroç±»ï¼æ§è¡serviceæ¹æ³ãæä»¬å¨delHero.javaä¸éè¿request.getParameter("id")è·åå°è¯¥æ¡æ°æ®çIDå¼ï¼ç¶åæ§è¡å 餿¹æ³ï¼æåéå®åå°heroListè¿ä¸ªservletä¸å»ï¼å廿¥è¯¢ä¸éæ°æ®åºï¼æ¾ç¤ºheroList.jspï¼ä»£ç å¦ä¸ï¼
public class DelHero extends HttpServlet {
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
int id = Integer.parseInt(request.getParameter("id"));
new HeroDao().delHero(id);
response.sendRedirect("heroList");
}
}
4. ç¹æ´æ°åï¼æ ¹æ®servleté ç½®ä¼è·³è½¬å°è·åæ°æ®çç±»ä¸ï¼è·åä¼ è¿æ¥çidå¼ï¼æ§è¡getByIdæ¹æ³ï¼è·åæ°æ®ï¼å°æ°æ®ä¿åå¨requestä¸ï¼æå¡å¨è·³è½¬å°editHero.jspï¼ä»£ç å¦ä¸ï¼
public class UpdateHero extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
Hero hero = new Hero();
hero = new HeroDao().getById(Integer.parseInt(request.getParameter("id")));
request.setAttribute("hero", hero);
request.getRequestDispatcher("editHero.jsp").forward(request, response);
}
}
å¨ç¼è¾é¡µé¢editHero.jspï¼è¯¥é¡µé¢ä¸ä¼è·åå°è¿æ¡éè¦æ´æ°çæ°æ®çææå¼ï¼æ¾ç¤ºåºæ¥ï¼æéè¦ä¿®æ¹çæ°æ®è¿è¡ä¿®æ¹åï¼ç¹å»æ´æ°æé®ï¼éæ°æäº¤è¯·æ±å°å®ç°æ´æ°çservletè¿è¡æ§è¡updateæä½ã
<title>ä¿®æ¹è±é屿§</title>
</head>
<body>
<form action="update1Hero" method="get">
è±éï¼<input type="text" name="name" value="${hero.name}">
è¡éï¼<input type="text" name="hp" value="${hero.hp}">
伤害ï¼<input type="text" name="damage" value="${hero.damage}">
<input type="hidden" name="id" value="${hero.id}">
<input type="submit" value="æ´æ°">
</form>
</body>
</html>
æ¤æ¶ç¹æ´æ°åä¼è¯·æ±å°åupdate1Heroï¼web.xmlä¸é ç½®äºè¯¥servletç对åºçç±»ï¼ç¶åå¨è¯¥ç±»ä¸è·åå°ææéè¿form表åæäº¤çåæ°å¼ï¼å°åæ°å¼åæ¾å¨hero对象ä¸ï¼ç¶åæ§è¡updateHero()æ¹æ³ãå®ææ´æ°ãæåéå®åå°listHeroä¸ï¼éæ°æ¥è¯¢æ°æ®åºä¸ææçæ°æ®ï¼æ¾ç¤ºå°heroList.jspéé¢ãæ´æ°ç±»ç代ç å¦ä¸ï¼
public class Update1Hero extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
Hero hero = new Hero();
hero.setId(Integer.parseInt(request.getParameter("id")));
hero.setName(request.getParameter("name"));
hero.setDamage(Integer.parseInt(request.getParameter("damage")));
hero.setHp((float)Double.parseDouble(request.getParameter("hp")));
new HeroDao().updateHero(hero);
response.sendRedirect("heroList");
//request.getRequestDispatcher("heroList").forward(request, response);
}
}
åï¼å页ï¼
åé¡µçæ ¸å¿ç¥è¯ç¹å ¶å®å°±å¨äºsqlçlimit a,bçç¨æ³ï¼ä»çææå°±æ¯ä»ç¬¬aæ¡æ°æ®å¼å§æ¥è¯¢ï¼æ¥è¯¢bè·³ï¼aä»åºæ°0å¼å§æ°ã
æ ¸å¿sql:select * from hero order by id asc limit ?,? å ¶ä¸order by id ascæ¯æç §idéåºæåºçææãä¹å°±æ¯è¯´ï¼æä»¬åªéè¦ä¿®æ¹åé¢çä¸¤ä¸ªåæ°ï¼å³å¯å®æå页åè½ãæä¹åå«å¨é¡µé¢ä¸ç»ä¸ä¸é¡µï¼ä¸ä¸é¡µï¼é¦é¡µï¼æªé¡µèµäºä¸ä¸ªåæ°ï¼å¹¶å°è¯¥åæ°éè¿è¿æ¥æ¹åå°åæ çå°åï¼å°å°å带ä¸åæ°è®¿é®æå¡å¨ãç¶åå¨servletä¸å¯¹è¿äºåæ°å®æé»è¾å¤çï¼å³å¯è½»æ¾å®ç°å页åè½ãå ¶ä¸å页æ¥è¯¢çæ¹æ³å¦ä¸ï¼æä¸¤ä¸ªåæ°
public List<Hero> getHeroList(int start, int count) {
List<Hero> listHero = new ArrayList<Hero>();
try {
Connection con = getConnection();
String sql = "select * from hero order by id asc limit ?,?";
PreparedStatement pm = con.prepareStatement(sql);
pm.setInt(1, start);
pm.setInt(2, count);
ResultSet rs = pm.executeQuery();
while(rs.next()) {
Hero hero = new Hero();
int id = rs.getInt("id");
String name = rs.getString("name");
int damage = rs.getInt("damage");
float hp = rs.getFloat("hp");
hero.setId(id);
hero.setName(name);
hero.setHp(hp);
hero.setDamage(damage);
listHero.add(hero);
}
pm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
return listHero;
}
servletä¸å¤çåæ°çé»è¾å¦ä¸ï¼
int total = new HeroDao().getTotal();
int start = 0;
int count = 5;
int lastPage = 0;
if(total/count == 0) {
lastPage = total -count;
}else {
lastPage = (total/count) * count;
}
try {
int next = Integer.parseInt(request.getParameter("next"));
if(next <= total) {
start = next;
}else {
start = (total/count) * count;
}
} catch (Exception e) {
start = 0;
}
List<Hero> heros = new ArrayList<Hero>();
int xiaye = start + count;
int shangye = xiaye - (count * 2);
if(shangye < 0) {
shangye = 0;
}
heros = new HeroDao().getHeroList(start,count);
request.setAttribute("xiaye", xiaye);
request.setAttribute("shangye", shangye);
request.setAttribute("lastPage", lastPage);
request.getSession().setAttribute("hero1", heros);
request.setAttribute("hero", heros);
request.getRequestDispatcher("heroList.jsp").forward(request, response);
大ä½å¯¹å¤çå页çé»è¾è¿è¡è§£æï¼
totalå°±æ¯è·åæ°æ®åºä¸çæ»è®°å½æ¡æ°ãç¨ä»¥å¤ææªé¡µä¸å¨è·³è½¬ã
ç¬¬ä¸æ¬¡è®¿é®servletæ¶ï¼æ ¹æ®é»è¾æä»¬å¤æå¥½äºlastPageçå¼åxiayeçå¼åshangyeçå¼ï¼å°è¯¥å¼ä¼ éç»å端页é¢ï¼ç¹å»æ¶éè¿nextåæ°ä¼ éè¿æ¥ã
åå¦ä¸å ±æ13页ï¼å¨åå°ä¸ç¹å»ä¸ä¸é¡µï¼å°åæ ä¼ éä¸ä¸ªnextçåæ°ï¼è¯¥å¼åå§å¼ä¸º5ï¼å ä¸ºç¬¬ä¸æ¬¡è®¿é®servletæ¶ï¼è¿ä¸ªå¼å°±è¢«èµäºäº5ï¼ï¼next=5å¨servletä¸è·åä¹åï¼å¤æä¸ä¸é¡µçåæ°æ¯å¦è¶ è¿äºæ»è®°å½æ¡æ°ï¼å¦æè¶ è¿åstartçå¼å°±æ¯æ»è®°å½æ¡æ°é¤ä»¥åé¡µæ¡æ°åæ´ç¶åä¹ä»¥æ¯é¡µæ¡æ°ï¼ä¹å°±æ¯13/5 * 5=10ï¼ä¹å°±æ¯æåä¸é¡µçå¼å§æ°ãå¦ææ²¡æè¶ è¿ï¼å让startçå¼çäºè¿ä¸ªnextï¼æ¤æ¶start=5,ç¶åå设置åå¤ä¼ éç»åå°é¡µé¢ä¸ä¸ä¸ä¸ªä¸ä¸ä¸ªåæ°çå¼ï¼ä¹å°±æ¯xiaye:5+5=10,ç¶åä¼ éç»åå°ä¸æ¬¡ç¹å»ä¸é¡µæ¶åºè¯¥ä¼ éçå¼ï¼shangyeï¼10-(5*2)=0ï¼è°ç¨æ¹æ³getHeroList(start,count)ï¼å ¶ä¸count弿¯ä¸åçï¼åçæ¯startçå¼ï¼æ¤æ¶è¯¥å¼ä¸º5ï¼åæ°æ®åºå»æ¥è¯¢ä»ç¬¬å æ¡æ°æ®å¼å§ï¼æ¥è¯¢äºæ¡ï¼ä¹å°±æ¯æä»¬ç第äºé¡µã
æ¤æ¶è·³è½¬å°ç¬¬äºé¡µï¼æä»¬åç¹å»ä¸ä¸é¡µæ¶ï¼nextæ¯å å¢ï¼è·³è½¬ä¹å就以为为æä»¬ç®å¥½äºï¼æ¤æ¶nextæ¯10ï¼æ²¡æè¶ è¿æ»è®°å½æ¡æ°ï¼start=10,ä¸ä¸ä¸ªä¸é¡µç弿´æ°ä¸º:15ï¼ä¸ä¸ä¸ªä¸é¡µç弿´æ°ä¸º5ï¼ç¶åæ§è¡getHeroList(10ï¼5)æ¾ç¤ºç¬¬ä¸é¡µã
第ä¸é¡µä¸åç¹å»ä¸ä¸é¡µï¼next=15äºï¼è¶ è¿äºè®°å½æ¡æ°ï¼start=10,å¨è®¾ç½®ä¸ä¸ä¸ªä¸é¡µçå¼ä¸º15ï¼ç¶å廿¥è¯¢getHeroList(10ï¼5)ä»ç¶æ¾ç¤ºç¬¬ä¸é¡µï¼å¨å»ç¹å»ä¸ä¸é¡µçæ¶åï¼startè¿æ¯çäº10ï¼ä»ç¶ä¼æ¥è¯¢getHeroList(10ï¼5)第ä¸é¡µã
妿å¨ç¬¬ä¸é¡µç¹å»ä¸ä¸é¡µçæ¶åï¼æ¤æ¶nextç弿¯ä»ä¹å¢ï¼æä»¬è·³è½¬ä¹å就设置好äºï¼æ¤æ¶nextä¼ éçæ¯5ï¼æ²¡æè¶ è¿è®°å½æ¡æ°ï¼start=5,设置ä¸ä¸ä¸ªä¸é¡µçå¼ä¸º10ï¼ä¸ä¸ä¸ªä¸é¡µçå¼ä¸º0ï¼ç¶åæ§è¡getHeroList(5ï¼5)è¿åå°ç¬¬äºé¡µä¸ã
妿å¨ç¬¬ä¸é¡µç¹å»ä¸ä¸é¡µå¢ï¼next=0ï¼start=0ï¼shangyeçå¼ï¼5-5*2=-5ï¼å¢å äºå¤æif(shangye < 0)ï¼shangyeå°±=0ï¼åæ¤æ¶æ§è¡getHeroList(0ï¼5)è¿æ¯æ¥è¯¢ç¬¬ä¸é¡µçå¼ã
ç¨å¾®æèä¸ä¸å°±è½çè§£è¿ä¸ªé»è¾äºï¼ç®æ³å¥½ç人ä¸çåºè¯¥å°±æãæç«ç¶èµè¿°äºè¿ä¹å¤...
äºï¼è³æ¤ï¼MVC设计模å¼ä¸å°demoçå¢å 该æ¥å·²ç»å ¨é¨å®æäºï¼å°±è¿ä¹ç®åã
å¨è¿ä¸ªdemo䏿å¢å äºç»å½åè½åçå¬å¨çå¬sessionårequestçåå¨ï¼å¦æéè¦äºè§£ï¼æä¼å¨ä¸é¢çå客ä¸è¿è¡è§£æåå享ãä¹å°±æ¯å¤§å®¶ä¹åçå°çéªè¯ç»å½ï¼å¤æç¨æ·æ¯å¦ç»å½ï¼å¦æç»å½å¯ä»¥è®¿é®å ¨é¨é¡µé¢ï¼å¦ææªç»å½ï¼ååªè½è®¿é®ç»å½é¡µé¢ï¼æ æ³è®¿é®è±éå表ç页é¢ï¼åçå¬å¨çº¿äººæ°