第五部分_Servlet深入剖析续与再论JavaBean

练习续:

答案:A、B、D、E、F、G

其中C,没有request.setParameter()方法。

请求转发与重定向

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
{
	request.setAttribute("test", "hello")
	// 请求转发
	request.getRequestDispatcher("/test4.jsp").forward(request, response);
	
	// 重定向
	// response.sendRedirect("test4.jsp");
}


<%--test4.jsp--%>
<body>
	<%= request.getAttribute("test") %>
</body>

请求转发的方式,从表象上来看,在浏览器中访问地址栏localhost:8080/test/HelloServlet,页面出现hello,地址栏信息保持不变;而重定向的方式地址栏访问localhost:8080/test/HelloServlet后,页面跳转到:localhost:8080/test/test4.jsp,页面信息为null。从本质上,底层的分析,请求转发的方式从Servlet到jsp始终是同一个request对象,而重定向的方式是,一旦调用sendRedirect(注意到是response对象调用),首先响应到达客户端,告诉客户端必须再去请求页面test.jsp,于是客户端重新发送一个请求,此时先前的request对象已经被销魂了,被一个新的request对象所取代,因此结果为null。

JavaBean的作用范围实例

package com.test.servlet;

public class Student
{
	private long classNo;

	private String name; 

	private int age;

	private boolean sexy;

	public Student() // 构造函数
	{
		classNo = 970431;
		name = "ZZZl";
		age = 34;
		sexy = true;
	}

	/**
	 * @return 返回 age。
	 */
	public int getAge()
	{
		return age;
	}

	/**
	 * @param age
	 *            要设置的 age。
	 */
	public void setAge(int age)
	{
		this.age = age;
	}

	/**
	 * @return 返回 classNo。
	 */
	public long getClassNo()
	{
		return classNo;
	}

	/**
	 * @param classNo
	 *            要设置的 classNo。
	 */
	public void setClassNo(long classNo)
	{
		this.classNo = classNo;
	}

	/**
	 * @return 返回 name。
	 */
	public String getName()
	{
		return name;
	}

	/**
	 * @param name
	 *            要设置的 name。
	 */
	public void setName(String name)
	{
		this.name = name;
	}

	/**
	 * @return 返回 sexy。
	 */
	public boolean isSexy() // 对于返回值为boolean类型的get方法也可以用is代替
	{
		return sexy;
	}

	/**
	 * @param sexy
	 *            要设置的 sexy。
	 */
	public void setSexy(boolean sexy)
	{
		this.sexy = sexy;
	}
}
<%@ page language="java" pageEncoding="gb2312" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<body>  
<%-- 引用自己编写的javaBean生成的bean组件 --%>
<jsp:useBean id="student" scope="application" class="com.test.servlet.Student"/> 
<%=student.getName()%><br>
<% student.setName("cong"); %> 

<%-- 用getProperty动作来返回bean组件的属性值 --%> 
<jsp:getProperty name="student" property="classNo" /> <br>
<jsp:getProperty name="student" property="name" /> <br>
<jsp:getProperty name="student" property="age" /> <br>
<jsp:getProperty name="student" property="sexy" /> <br>
<%-- 取属性值 --%>
<%=student.getClassNo() %> <br>
<%=student.getName() %> <br>
<%=student.getAge() %> <br>
<%=student.isSexy() %> <br>

<%--引用Java类库中生成的bean组件 --%>
<jsp:useBean id="date" scope="page" class="java.util.Date" />
<%= date.toLocaleString()%><br>



</body>
</html>

访问javabean.jsp页面,可以看到随着刷新jsp页面,其上的时间也不断刷新,但是如果将date的scope改为application,只要服务器不停止,这个时间永远不会变,而将其改为session,只要当前的会话没有结束,时间就不会变,也就是刷新页面时间没有变化,但是重新打开一个页面就有变化了。而request是随着请求来的,随着刷新(客户端的请求操作),时间在变化。

 

posted @ 2015-07-05 16:27  Code_Rush  阅读(158)  评论(0编辑  收藏  举报