感谢支持
我们一直在努力

node.js实现tomcat经典例子猜数字

学jsp都时候知道tomcat有一个seesion的经典例子,猜数字。


相关阅读:


http://www.linuxidc.com/Linux/2012-02/53528.htm


http://www.linuxidc.com/Linux/2012-02/53529.htm


http://www.linuxidc.com/Linux/2012-02/53530.htm


http://www.linuxidc.com/Linux/2012-02/53532.htm


tomcat 中有源码,JavaBean源码NumberGuessBean.java代码如下:


[java]


  1. package num;  

  2.   

  3. import java.io.Serializable;  

  4. import java.util.Random;  

  5.   

  6. public class NumberGuessBean implements Serializable {  

  7.   

  8.     private static final long serialVersionUID = 1L;  

  9.   

  10.     private int answer;  

  11.     private String hint;  

  12.     private int numGuesses;  

  13.     private boolean success;  

  14.     private Random random = new Random();  

  15.   

  16.     public NumberGuessBean() {  

  17.         reset();  

  18.     }  

  19.   

  20.     public int getAnswer() {  

  21.         return answer;  

  22.     }  

  23.   

  24.     public void setAnswer(int answer) {  

  25.         this.answer = answer;  

  26.     }  

  27.   

  28.     public String getHint() {  

  29.         return “” + hint;  

  30.     }  

  31.   

  32.     public void setHint(String hint) {  

  33.         this.hint = hint;  

  34.     }  

  35.   

  36.     public void setNumGuesses(int numGuesses) {  

  37.         this.numGuesses = numGuesses;  

  38.     }  

  39.   

  40.     public int getNumGuesses() {  

  41.         return numGuesses;  

  42.     }  

  43.   

  44.     public boolean getSuccess() {  

  45.         return success;  

  46.     }  

  47.   

  48.     public void setSuccess(boolean success) {  

  49.         this.success = success;  

  50.     }  

  51.   

  52.     public void setGuess(String guess) {  

  53.         numGuesses++;  

  54.   

  55.         int g;  

  56.         try {  

  57.             g = Integer.parseInt(guess);  

  58.         } catch (NumberFormatException e) {  

  59.             g = –1;  

  60.         }  

  61.   

  62.         if (g == answer) {  

  63.             success = true;  

  64.         } else if (g == –1) {  

  65.             hint = “a number next time”;  

  66.         } else if (g < answer) {  

  67.             hint = “higher”;  

  68.         } else if (g > answer) {  

  69.             hint = “lower”;  

  70.         }  

  71.     }  

  72.   

  73.     public void reset() {  

  74.         answer = Math.abs(random.nextInt() % 100) + 1;  

  75.         success = false;  

  76.         numGuesses = 0;  

  77.     }  

  78. }  
JSP源码numguess.jsp代码如下:


[html]


  1. <%@ page import = “num.NumberGuessBean” %>  

  2.   

  3. <jsp:useBean id=“numguess” class=“num.NumberGuessBean” scope=“session”/>  

  4. <jsp:setProperty name=“numguess” property=“*”/>  

  5.   

  6. <html>  

  7. <head><title>Number Guess</title></head>  

  8. <body bgcolor=“white”>  

  9. <font size=4>  

  10.   

  11. <% if (numguess.getSuccess()) { %>  

  12.   

  13.   Congratulations!  You got it.  

  14.   And after just <%= numguess.getNumGuesses() %> tries.<p>  

  15.   

  16.   <% numguess.reset(); %>  

  17.   

  18.   Care to <a href=“numguess.jsp”>try again</a>?  

  19.   

  20. <% } else if (numguess.getNumGuesses() == 0) { %>  

  21.   

  22.   Welcome to the Number Guess game.<p>  

  23.   

  24.   I’m thinking of a number between 1 and 100.<p>  

  25.   

  26.   <form method=get>  

  27.   What’s your guess? <input type=text name=guess>  

  28.   <input type=submit value=“Submit”>  

  29.   </form>  

  30.   

  31. <% } else { %>  

  32.   

  33.   Good guess, but nope.  Try <b><%= numguess.getHint() %></b>.  

  34.   

  35.   You have made <%= numguess.getNumGuesses() %> guesses.<p>  

  36.   

  37.   I’m thinking of a number between 1 and 100.<p>  

  38.   

  39.   <form method=get>  

  40.   What’s your guess? <input type=text name=guess>  

  41.   <input type=submit value=“Submit”>  

  42.   </form>  

  43.   

  44. <% } %>  

  45.   

  46. </font>  

  47. </body>  

  48. </html>  
仿照tomcat 我写了一个node.jsp版本,也用到了node.js module的写法。

仿照bean的NumberGuess.js 代码如下


[Javascript]


  1. var NumberGuess = exports.NumberGuess = function(guessObj){  

  2.     if(! guessObj){  

  3.         this.answer=0;  

  4.         this.hint=;  

  5.         this.numGuesses=0;  

  6.         this.success=false;  

  7.   

  8.         this.reset();  

  9.     }else{  

  10.         this.answer=guessObj.answer;  

  11.         this.hint=guessObj.hint;  

  12.         this.numGuesses=guessObj.numGuesses;  

  13.         this.success=guessObj.success;  

  14.     }  

  15. }  

  16.   

  17. NumberGuess.prototype.setGuess=function(guess) {  

  18.     this.numGuesses++;  

  19.   

  20.     var g;  

  21.     if(! isNaN(guess)){  

  22.         g=guess;  

  23.     } else {  

  24.         g=-1;  

  25.     }  

  26.   

  27.     if (g == this.answer) {  

  28.         this.success = true;  

  29.     } else if (g == -1) {  

  30.         this.hint = ‘a number next time’;  

  31.     } else if (g < this.answer) {  

  32.         this.hint = ‘higher’;  

  33.     } else if (g > this.answer) {  

  34.         this.hint = ‘lower’;  

  35.     }  

  36. };  

  37.   

  38. NumberGuess.prototype.reset=function() {  

  39.     this.answer = Math.floor(Math.random() * 100) + 1;  

  40.     this.success = false;  

  41.     this.numGuesses = 0;  

  42. };  
仿照jsp的guess.js代码如下:


[javascript]


  1. var connect = require(‘connect’);  

  2. var NumberGuess = require(‘./NumberGuess.js’).NumberGuess;  

  3.   

  4. var server = connect.createServer();  

  5. server.use(connect.cookieParser());  

  6. server.use(connect.session({ secret: ‘keyboard cat’}));  

  7. server.use(connect.query());  

  8. server.use(function(req, res){  

  9.     var sess = req.session;  

  10.        

  11.      if (! sess.guessObj) {  

  12.         sess.guessObj = new NumberGuess();  

  13.      } else {  

  14.         //self.sessions[sid] = JSON.stringify(sess);      

  15.         //sess = self.sessions[sid]; sess = JSON.parse(sess)   

  16.         //只序列化数据,反序列化js无类型信息,不能和java一样   

  17.         sess.guessObj = new NumberGuess(sess.guessObj);  

  18.      }  

  19.   

  20.     var guess = req.query.guess;   

  21.     if(guess){  

  22.         sess.guessObj.setGuess(guess);  

  23.     }  

  24.   

  25.     var result = ‘<html>’  

  26.             +‘<head><title>Number Guess</title></head>’  

  27.             +‘<body bgcolor=”white”>’  

  28.             +‘<font size=4>’;  

  29.   

  30.     if (sess.guessObj.success) {  

  31.         result += ‘Congratulations!  You got it.’  

  32.             + ‘And after just ‘+sess.guessObj.numGuesses +‘ tries.<p>’  

  33.             +‘ Care to <a href=”.”>try again</a>?’;  

  34.         sess.guessObj.reset();  

  35.     } else if (sess.guessObj.numGuesses == 0) {  

  36.         result += ‘Welcome to the Number Guess game.<p>’  

  37.             +‘I\’m thinking of a number between 1 and 100.<p>’  

  38.             + ‘<form method=”get”>’  

  39.             +‘What\’s your guess? <input type=”text” name=”guess”>’  

  40.             +‘<input type=”submit” value=”Submit”>’  

  41.             +‘</form>’;  

  42.     } else {  

  43.         result += ‘Good guess, but nope.  Try <b>’+sess.guessObj.hint+‘</b>.’  

  44.             +‘You have made ‘+sess.guessObj.numGuesses+‘ guesses.<p>’  

  45.             +‘I\’m thinking of a number between 1 and 100.<p>’  

  46.             +‘<form method=”get”>’  

  47.             +‘What\’s your guess? <input type=text name=guess>’  

  48.             +‘<input type=”submit” value=”Submit”>’  

  49.             +‘</form>’;   

  50.     }  

  51.   

  52.     result += ‘</font></body></html>’;  

  53.   

  54.     res.setHeader(‘Content-Type’‘text/html’);  

  55.     res.write(result);  

  56.     res.end();  

  57. });  

  58.   

  59. server.listen(8080);  

  60.   

  61. console.log(‘127.0.0.1:8080’)  

在命令行中输入node guess.js



在浏览器地址栏中输入 http://localhost:8080/,效果如下:




试试自己的运气吧,我的运气不好就不试了,这个大家应该都玩过,我就不继续截图了。


这个有点硬套,主要是试试connect对session的支持。


//self.sessions[sid] = JSON.stringify(sess);   
//sess = self.sessions[sid]; sess = JSON.parse(sess)
//只序列化数据,反序列化js无类型信息,不能和java一样


这段注释注意一下,这个知识点我搞了半天,我没想到。

赞(0) 打赏
转载请注明出处:服务器评测 » node.js实现tomcat经典例子猜数字
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏