练习续:
答案: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是随着请求来的,随着刷新(客户端的请求操作),时间在变化。