以下问题:
我使用 Servlet 作为控制器,使用 JSB 作为模型,使用 Java Bean 作为信息。这里的代码:
HTML/JSP:
<table summary="Diese Tabelle zeigt Informationen zum aktuellen Spiel">
<jsp:useBean id="game" class="model.Spiel" scope="session"/>
<tr><th id="leaderLabel" class="label">Führender</th><td id="leader" class="data"><%= game.getLeader() %></td></tr>
<tr><th id="roundLabel" class="label">Runde</th><td id="round" class="data"><%= game.getRound() %></td></tr>
<tr><th id="timeLabel" class="label">Zeit</th><td id="time" class="data"><%= game.getTime() %></td></tr>
<tr><th id="computerScoreLabel" class="label">Würfelergebnis <em>Super C</em></th><td id="computerScore" class="data"><%= game.getComputerScore() %></td></tr>
</table>
HTML Servlet 调用:
<a id="dice" href="GameServlet?action=wurfeln" tabindex="4">
<img id="diceImage" src="img/wuerfel1.png" alt="Würfel mit einer Eins" />
</a>
小服务程序:
if(action.equals("wurfeln")){
// Get right game for the session
Spiel game;
HttpSession session = request.getSession(true);
if(sessions.getGame(session)==null) {
sessions.newSessions(session);
game = sessions.getGame(session);
}
else {
game = sessions.getGame(session);
}
// Runt methods on game
game.setSpielerScore(); //Spieler würfelt
game.setComputerScore(); //Computer würfelt
// Load new JSB
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/table.jsp");
dispatcher.forward(request, response);
}
Java Bean:(游戏)
package model;
import java.util.Random;
public class Spiel {
private int Runde;
private String Zeit;
private int Spieler_Feld;
private int Spieler_Wurfelergebnis;
private String Spieler_Name;
private int Computer_Feld;
private int Computer_Wurfelergebnis;
private String Computer_Name;
private Random x;
public Spiel() {
this.Runde = 1;
this.Zeit = "00:00";
this.Spieler_Feld = 1;
this.Computer_Feld = 1;
this.Spieler_Name = "Super Mario";
this.Computer_Name = "Super C";
this.x = new Random();
this.Spieler_Wurfelergebnis = 0;
this.Computer_Wurfelergebnis = 0;
}
public void setRound(int round) {
this.Runde = round;
}
public void setTime(String time) {
this.Zeit = time;
}
public String getTime() {
return this.Zeit;
}
public int getRound() {
return this.Runde;
}
public void newRound() {
this.Runde += 1;
}
public String getLeader() {
if(this.Spieler_Feld > this.Computer_Feld) {
return this.Spieler_Name;
}
else if(this.Spieler_Feld < this.Computer_Feld){
return this.Computer_Name;
}
else {
return "beide";
}
}
public void setSpielerScore() {
//Spieler würfelt
//this.Spieler_Wurfelergebnis = this.x.nextInt(3)+1;
this.Spieler_Wurfelergebnis = 3;
}
public void setComputerScore() {
//Computer würfelt
//this.Computer_Wurfelergebnis = this.x.nextInt(3)+1;
this.Computer_Wurfelergebnis = 2;
}
public int getSpielerScore() {
return this.Spieler_Wurfelergebnis;
}
public int getComputerScore() {
return this.Computer_Wurfelergebnis;
}
}
Java Bean:(会话)
package model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Sessions {
HashMap<HttpSession, Spiel> sessions = new HashMap<HttpSession, Spiel>();
public void newSessions(HttpSession s) {
if(!sessions.containsKey(s)) {
Spiel newgame = new Spiel();
sessions.put(s, newgame);
}
}
public Spiel getGame(HttpSession s) {
Spiel spiel = sessions.get(s);
if (spiel != null) {
return spiel;
}
else {
return null;
}
}
}
所以我遇到的问题是,随着 Servlet(请求调度程序 ....)中 JSP 的新负载,它实际上应该在新的 JSP 中显示更新的值。由于game.setSpielerScore()
它会更改一些变量,但它会继续显示使用构造函数调用设置的值。
我有三个可能的想法为什么会发生这种情况:
1) JSP 代码有问题,可能没有收集到正确对象的值。
2) Session JavaBeans 有问题,它没有为会话返回正确的游戏或其他东西。
3)它没有正确更新游戏对象的变量