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