Servlet的测试题

题目:
新建一个项目,创建两个Servlet,分别为ServletA和ServletB。当浏览器访问ServletA的时候,ServletA5秒之后跳转至ServletB。
注意:浏览器上要显示五秒的倒计时过程。

本题思路:
1、当浏览器通过ServletA的地址进行访问ServletA时;
2、ServletA接收到浏览器的请求之后,回复一个消息给浏览器,让浏览器改变地址,访问ServletB;
3、浏览器收到ServletA的消息,并开始改变请求地址,访问ServletB。

当了解了本题思路后,接下来所要知道的是如何在浏览器上显示五秒的倒计时。

我们知道动态数据是可变的,那么我们完全可以创建一个动态数据用来表示时间,然后通过对动态数据进行修改来达到时间倒计时的效果。那么ServletA的具体代码如下:

/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		//我们动态数据是可变的是,那么我们完全可以创建一个动态数据用来表示时间的变换
		//首先创建一个ServletContext对象
		ServletContext context = getServletContext();
		//使用getAttribute方法来获取指定名称的属性
		Object ob = context.getAttribute("time");	//这里的值一开始为null——因为还没有为其添加动态数据
		//创建一个变量用来表示当前所剩余的时间
		int number = 5;
		if(ob == null) {
			//如果ob为空的话,那么就为其添加上动态数据
			context.setAttribute("time", number);
		}else {
			//将其转换成整数类型,否则将无法进行运算
			number = Integer.parseInt(ob + "");
			//进行时间的倒计时——即动态数据的修改
			context.setAttribute("time", number != 0 ? number - 1 : 5);
			//当时间为0时,开始跳转页面
			if(number == 0) response.sendRedirect("ServletB");
		}
		//将当前剩余的时间输出
		response.getWriter().write("还剩下" + number + "S");
		//设置每隔一秒刷新一次——其实就是每秒的倒计时
		response.setHeader("refresh", "1");
		
		//以下所使用的是另一个对象,但不管怎么样,逻辑都是一样的
//		HttpSession session = request.getSession();
//		Object ob = session.getAttribute("time");
//		//number表示为剩余时间的秒数
//		int number = 5;
//		if(ob == null) {
//			session.setAttribute("time", number);
//		}else {
//			number = Integer.parseInt(ob + "");
//			session.setAttribute("time", number != 0 ? number - 1 : 5);
//			//当时间为0时,跳转页面
//			if(number == 0) response.sendRedirect("ServletB");
//		}
//		response.getWriter().write("还剩下" + number + "S");
//		response.addHeader("refresh", "1");
		
		//response.getWriter().append("Served at: ").append(request.getContextPath());
	}

之后,我们再创建一个跳转的ServletB(当然,这里的内容可以随意书写),具体代码如下:

/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8");
		
		String info = "<h1>欢迎来到君子的诞生的之地!</h1>"
				+ "<br>孔子曰:“<span style='color:red;'>君子有九思:视思明,听思聪,色思温,貌思恭,言思忠,事思敬,疑思问,忿思难,见得思义。</span>”\r\n" + 
				"<br>释意编辑\r\n" + 
				"<br>孔子说:「君子有九种要用心思考的事:\r\n" + 
				"<br>看要看得明确,不可以有丝毫模糊。\r\n" + 
				"<br>耳闻声音而心能辨别其真伪,不能够含混。\r\n" + 
				"<br>脸色要温和,不可以显得严厉难看。\r\n" + 
				"<br>容貌要谦虚恭敬有礼,不可以骄傲、轻忽他人。\r\n" + 
				"<br>言语要忠厚诚恳,没有虚假。\r\n" + 
				"<br>做事要认真负责,不可以懈怠懒惰。\r\n" + 
				"<br>有疑惑要想办法求教,不可以得过且过,混过日子。\r\n" + 
				"<br>生气的时候要想到后果灾难,不可以意气用事。\r\n" + 
				"<br>遇见可以取得的利益时,要想想是不是合乎义理?」";
		PrintWriter pw = response.getWriter();
		pw.print(info);
		
		//response.getWriter().append("Served at: ").append(request.getContextPath());
	}

最终显示的效果是:浏览器上会进行5秒倒计时,倒计时结束后,浏览器从ServletA跳转到ServletB上,显示ServletB上的信息。
这里就不允许结果了,你们可以自行运行!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐