学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]
- package num;
- import java.io.Serializable;
- import java.util.Random;
- public class NumberGuessBean implements Serializable {
- private static final long serialVersionUID = 1L;
- private int answer;
- private String hint;
- private int numGuesses;
- private boolean success;
- private Random random = new Random();
- public NumberGuessBean() {
- reset();
- }
- public int getAnswer() {
- return answer;
- }
- public void setAnswer(int answer) {
- this.answer = answer;
- }
- public String getHint() {
- return “” + hint;
- }
- public void setHint(String hint) {
- this.hint = hint;
- }
- public void setNumGuesses(int numGuesses) {
- this.numGuesses = numGuesses;
- }
- public int getNumGuesses() {
- return numGuesses;
- }
- public boolean getSuccess() {
- return success;
- }
- public void setSuccess(boolean success) {
- this.success = success;
- }
- public void setGuess(String guess) {
- numGuesses++;
- int g;
- try {
- g = Integer.parseInt(guess);
- } catch (NumberFormatException e) {
- g = –1;
- }
- if (g == answer) {
- success = true;
- } else if (g == –1) {
- hint = “a number next time”;
- } else if (g < answer) {
- hint = “higher”;
- } else if (g > answer) {
- hint = “lower”;
- }
- }
- public void reset() {
- answer = Math.abs(random.nextInt() % 100) + 1;
- success = false;
- numGuesses = 0;
- }
- }
[html]
- <%@ page import = “num.NumberGuessBean” %>
- <jsp:useBean id=“numguess” class=“num.NumberGuessBean” scope=“session”/>
- <jsp:setProperty name=“numguess” property=“*”/>
- <html>
- <head><title>Number Guess</title></head>
- <body bgcolor=“white”>
- <font size=4>
- <% if (numguess.getSuccess()) { %>
- Congratulations! You got it.
- And after just <%= numguess.getNumGuesses() %> tries.<p>
- <% numguess.reset(); %>
- Care to <a href=“numguess.jsp”>try again</a>?
- <% } else if (numguess.getNumGuesses() == 0) { %>
- Welcome to the Number Guess game.<p>
- I’m thinking of a number between 1 and 100.<p>
- <form method=get>
- What’s your guess? <input type=text name=guess>
- <input type=submit value=“Submit”>
- </form>
- <% } else { %>
- Good guess, but nope. Try <b><%= numguess.getHint() %></b>.
- You have made <%= numguess.getNumGuesses() %> guesses.<p>
- I’m thinking of a number between 1 and 100.<p>
- <form method=get>
- What’s your guess? <input type=text name=guess>
- <input type=submit value=“Submit”>
- </form>
- <% } %>
- </font>
- </body>
- </html>
仿照bean的NumberGuess.js 代码如下
[Javascript]
- var NumberGuess = exports.NumberGuess = function(guessObj){
- if(! guessObj){
- this.answer=0;
- this.hint=”;
- this.numGuesses=0;
- this.success=false;
- this.reset();
- }else{
- this.answer=guessObj.answer;
- this.hint=guessObj.hint;
- this.numGuesses=guessObj.numGuesses;
- this.success=guessObj.success;
- }
- }
- NumberGuess.prototype.setGuess=function(guess) {
- this.numGuesses++;
- var g;
- if(! isNaN(guess)){
- g=guess;
- } else {
- g=-1;
- }
- if (g == this.answer) {
- this.success = true;
- } else if (g == -1) {
- this.hint = ‘a number next time’;
- } else if (g < this.answer) {
- this.hint = ‘higher’;
- } else if (g > this.answer) {
- this.hint = ‘lower’;
- }
- };
- NumberGuess.prototype.reset=function() {
- this.answer = Math.floor(Math.random() * 100) + 1;
- this.success = false;
- this.numGuesses = 0;
- };
[javascript]
- var connect = require(‘connect’);
- var NumberGuess = require(‘./NumberGuess.js’).NumberGuess;
- var server = connect.createServer();
- server.use(connect.cookieParser());
- server.use(connect.session({ secret: ‘keyboard cat’}));
- server.use(connect.query());
- server.use(function(req, res){
- var sess = req.session;
- if (! sess.guessObj) {
- sess.guessObj = new NumberGuess();
- } else {
- //self.sessions[sid] = JSON.stringify(sess);
- //sess = self.sessions[sid]; sess = JSON.parse(sess)
- //只序列化数据,反序列化js无类型信息,不能和java一样
- sess.guessObj = new NumberGuess(sess.guessObj);
- }
- var guess = req.query.guess;
- if(guess){
- sess.guessObj.setGuess(guess);
- }
- var result = ‘<html>’
- +‘<head><title>Number Guess</title></head>’
- +‘<body bgcolor=”white”>’
- +‘<font size=4>’;
- if (sess.guessObj.success) {
- result += ‘Congratulations! You got it.’
- + ‘And after just ‘+sess.guessObj.numGuesses +‘ tries.<p>’
- +‘ Care to <a href=”.”>try again</a>?’;
- sess.guessObj.reset();
- } else if (sess.guessObj.numGuesses == 0) {
- result += ‘Welcome to the Number Guess game.<p>’
- +‘I\’m thinking of a number between 1 and 100.<p>’
- + ‘<form method=”get”>’
- +‘What\’s your guess? <input type=”text” name=”guess”>’
- +‘<input type=”submit” value=”Submit”>’
- +‘</form>’;
- } else {
- result += ‘Good guess, but nope. Try <b>’+sess.guessObj.hint+‘</b>.’
- +‘You have made ‘+sess.guessObj.numGuesses+‘ guesses.<p>’
- +‘I\’m thinking of a number between 1 and 100.<p>’
- +‘<form method=”get”>’
- +‘What\’s your guess? <input type=text name=guess>’
- +‘<input type=”submit” value=”Submit”>’
- +‘</form>’;
- }
- result += ‘</font></body></html>’;
- res.setHeader(‘Content-Type’, ‘text/html’);
- res.write(result);
- res.end();
- });
- server.listen(8080);
- 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一样
这段注释注意一下,这个知识点我搞了半天,我没想到。