Jsp实践、Jsp案例之猜数

来源:互联网 发布:淘宝代工品牌怎么样 编辑:程序博客网 时间:2024/06/07 05:33

Jsp的最佳实践:
一、对比Servlet技术和Jsp技术
1、Servlet技术: 开发动态资源。是一个java类,最擅长写java代码
2、jsp技术: 开发动态资源。通过java代码最擅长输出html代码

二、如何处理Servlet技术和Jsp技术的关系
各取所长:在web项目中涉及到的逻辑:
1、接收参数—-servlet做
2、处理业务逻辑,返回结果—- servlet做
3、显示数据到浏览器—-jsp做
4、跳转到其他页面—-servlet做
servlet+jsp模式

三、分工:
1、servlet:
1)接收参数
2)处理业务逻辑
3)把结果保存到域对象中
4)跳转到jsp页面
2、Jsp:
1)从域对象取出数据
2)把数据显示到浏览器

四、Jsp案例:猜数
1、代码实现:
1)GuessServlet.java代码:

package sram.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class GuessServlet extends HttpServlet {    //定义全局变量,存储生成随机数    int answer;    public void newGame(){        Random random = new Random();        answer = random.nextInt(30);    }    /*     * 每次游戏开始都会自动产生一个新的随机数     */    public GuessServlet(){        newGame();    }    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        request.setCharacterEncoding("utf-8");        String lucyNoStr = request.getParameter("lucyNo");        //判断幸运数字和用户的数字        //把用户输入的数字转成整数        Integer lucyNo = null;//Integer可以等于null,而int类型不可以        if(lucyNoStr==null||lucyNoStr.equals("")){            response.sendRedirect("/jsp_test/guess.jsp");            return;        }        lucyNo = Integer.parseInt(lucyNoStr);        //标记记录当前竞猜的次数        Integer times = 0;        //接收客户当前竞猜次数        String timeStr = request.getParameter("times");        if(timeStr==null){            times=1;        }else{            times = Integer.parseInt(timeStr)+1;        }        if(times<=5){            String msg = "";            if(lucyNo>answer){                msg = "可惜了大了点!再试试!";            }else if(lucyNo<answer){                msg = "可惜小了点!再试试!";            }else{                msg = "恭喜你,中得百万现金大奖,请等待工作人员的联系!";            }            request.setAttribute("msg", msg);            request.setAttribute("times", times);        }else{            //游戏结束            response.getWriter().write("游戏结束。<a href='"+request.getContextPath()+"/guess.jsp'>再来一盘</a>");            return;        }        //使用request域对象,要想实现页面跳转,必须使用转发,而不能使用重定向        request.getRequestDispatcher("/guess.jsp").forward(request, response);    }    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        this.doGet(request, response);    }}

2)guess.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>guess.jsp</title>  </head>  <body>   <%         //从request域中取出信息        String msg = (String)request.getAttribute("msg");        if(msg!=null){            out.write("<font color='red'>"+msg+"</font>");        }    %>   <%        //获取竞猜次数        Integer times = (Integer)request.getAttribute("times");        if(times!=null){            out.write(",你还有"+(5-times)+"次机会!");        }    %>   <form action="/jsp_test/GuessServlet" method="post">        请输入30以下的整数:<input type="text" name="lucyNo"/><br/>        <%             if(times!=null){        %>        <input type="hidden" name="times" value="<%=times%>"/>        <%            }                %>        <input type="submit" value="开始竞猜"/>    </form>  </body></html>

2、效果图:
1)首页面:

2)猜数页面:

3)猜中页面:

4)次数达到页面:

0 0