Jsp实践、Jsp案例之猜数

本文探讨了Jsp与Servlet技术的区别,强调在Web项目中如何结合两者优势,分工处理逻辑与展示。详细介绍了Jsp在接收参数、处理业务逻辑、显示数据和页面跳转的角色。同时,提供了一个猜数案例,包括GuessServlet.java和guess.jsp的代码实现,展示了从首页面到猜中、次数达到页面的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)次数达到页面:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值