zoukankan      html  css  js  c++  java
  • 第五部分_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是随着请求来的,随着刷新(客户端的请求操作),时间在变化。

  • 相关阅读:
    字符串题目
    Java 练习题摘录
    数据库原理及应用-引言
    数学类题目
    牛顿法
    动态规划-最大子段和
    判断数幂
    杭电1096
    算法导论01 几种排序以及其时间复杂度01
    杭电2059龟兔赛跑
  • 原文地址:https://www.cnblogs.com/Code-Rush/p/4622499.html
Copyright © 2011-2022 走看看