zoukankan      html  css  js  c++  java
  • java web 学习 --第五天(Java三级考试)

    第四天的学习内容:http://www.cnblogs.com/tobecrazy/p/3454860.html

    Response对象

    response对象主要是向客户端浏览器发送二进制数据,如输出Cookie、设置HTTP文件头信息等方面内容

    response主要功能和方法

    • getWrite()   获得PrintWrite类的对象实例,实现向浏览器输出信息
    • addCookie() 在客户端计算机磁盘上创建出Cookie对象实例,在Cookie对象实例可以保存客户端信息特征,然后采用request对象的getCookies()方法获取客户机所有Cookie对象
    • addHeader() 添加HTTP头文件信息,将信息传送到客户浏览器中
    • containsHeader() 判断指定名字的文件头是否存在,返回布尔型true / false
    • setHeader() 设置指定名字HTTP头文件的值,若该值存在则覆盖
    • sendRedirect() 重定向到由参数targetURL所指示的目标JSP页面或Servlet程序,不能向客户端输出信息
    • setContentType() 在相应中可以设置内容的文档数据类型和格式
    • setBufferSize() 设置Web容器的缓冲区大小,配合getBufferSize()方法返回该缓冲器信息

    利用response对象实现向客户机种写入Cookie信息

        Cookie或称Cookies,是指Web应用系统为了辨别访问者身份而存储在客户机中的一个文本文件,其中包含特定数据,比如登陆邮箱:

    可以把用户名和密码放在客户机Cookie中,下次访问不需要再输入用户名密码

    读取Cookie文件信息,使用Cookie类中的getName()和getValue()返回客户端的某一个特定Cookie对象名所对应的值。而利用response对象addCookie(cookie data )方法可以写入Cookie对象中所包装的数据。

    实例:在系统首页中添加读写Cookie信息

    在index jsp页面中添加如下代码

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@page import="java.util.Date" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP add Cookie information </title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      
      <body>
        <%! String lastAccessTime=null;      //the last time view this web site
            String nowAccessTime=null;       
            Cookie mycookie=null;
            Cookie[] cookies=null;
            Date now=null;
         %>
         <%
              cookies=request.getCookies();               // use request class getCookie method to get cookies if there is no cookie info then add new 
              now=new Date();
              if(cookies==null)
              {
                  lastAccessTime=(now.getYear()+1900+"Year"+now.getMonth()+"Month"+now.getDay()+"Day"+now.getHours()+"Hour"+now.getMinutes()+"Minute"+now.getSeconds()+"Second");
                  mycookie=new Cookie("lastAccessTime",lastAccessTime);
                  mycookie.setMaxAge(30*24*60*60); // 30 days 24hours 60mins 60 seconds
                  response.addCookie(mycookie);
              }
              else
              for(int index=0;index<cookies.length;index++)
              {
                  if(cookies[index].getName().equals("lastAccessTime"))
                  {
                      lastAccessTime=cookies[index].getValue();
                      nowAccessTime=(now.getYear()+1900+"Year "+now.getMonth()+" Month "+now.getDay()+" Day "+now.getHours()+" Hour "+now.getMinutes()+" Minute "+now.getSeconds()+" Second");
                      mycookie=new Cookie("lastAccessTime",nowAccessTime);
                      mycookie.setMaxAge(30*24*60*60); // 30 days 24hours 60mins 60 seconds
                      response.addCookie(mycookie);
                      break;                  
                  }
              }
              out.print("the last time your visit this system is "+lastAccessTime);
              
          %>
      </body>
    </html>

    首先用request的getCookie获取一下cookie,如果没有cookie信息,使用response的addCookie增加cookie信息

    区分重定向与跳转方式的区别

    • 请求转发过程中客户端浏览器只向server端产生一次请求,而重定向是两次;
    • 请求转发时在浏览器的URL地址栏中的信息不会发生改变,仍然是原来的URL而重定向将会转向目标URL

    使用HTTP请求转发:

    使用转发由于只有一次请求,所以在一个页面的request.setAttribute 能够在跳转后的页面使用request.getAttribute获取其属性值

    使用4个jsp页面和一个类文件

    新建 login.jsp 设置登陆框,用户名密码。。。。。

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>   
    <%@ page isErrorPage="true" errorPage="error.jsp"  %>
    
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>This is my first JSP page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      
      <body>
     
      
       <form method="post" action="response.jsp" > 
       username: 
       <input type="text" name="user" > 
       <br>
       password:
       <input type="password" name="password">
       <br>
       userType: 
       <select name="userType">
       <option value="user" >user</option>
       <option value="master"> master</option>
       </select>
       
       <input type="submit" name="submit" />
       </form>
    
      
        
      </body>
    </html>

    新建response.jsp页面当用户名是:young并且密码是1234跳转到index.jsp否则跳转到error.jsp,引入userInfo类,使用其verifyID方法校验用户名密码

    userinfo类代码:

    package mypackage;
    
    
    public class userInfo {
    
        /**
         * @param args
         * two parameters add get/set methods
        */
        
        String userName=null;
        String passWord=null;
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getPassWord() {
            return passWord;
        }
        public void setPassWord(String passWord) {
            this.passWord = passWord;
        }
        
        public boolean  verifyID( )  
        {
            if(userName.equals("young") && passWord.equals("1234"))
            {
                 System.out.print("login successful
    ");
                 return true;
            }
            else
            {
                System.out.print("login failure
    ");
                return false;
            }
            
        }
        
    }

    代码如下:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <jsp:useBean id="user" class="mypackage.userInfo" scope="session" ></jsp:useBean>
    
    <% 
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'response.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
      </head>
      
      <body>
        <%!   
            String targetPage=null;
            RequestDispatcher rd=null; 
         %>
         <%
              user.setUserName(request.getParameter("user"));
              user.setPassWord(request.getParameter("password"));
              
              if(user.verifyID())
              {
                  request.setAttribute("userNameString",user.getUserName());
                  targetPage="index.jsp";
                  System.out.print(user.getUserName());
              }
              else
              {
                  request.setAttribute("errorMSG","sorry,Login FAILED.
    ");
                  targetPage="error.jsp";
              }
              rd=request.getRequestDispatcher(targetPage);
              rd.forward(request,response);
         %>
      </body>
    </html>

    新建error.jsp 这个页面会获取response.jsp传递过来的errorMSG

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'error.jsp' starting page</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
      </head>
      
      <body>
        errorMSG<br>
        <%=request.getAttribute("errorMSG") %>
      </body>
    </html>

    新建index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@page import="java.util.Date" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP add Cookie information </title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
      </head>
      
      <body>
      welcome <%=request.getAttribute("userNameString") %>
        <%! String lastAccessTime=null;      //the last time view this web site
            String nowAccessTime=null;       
            Cookie mycookie=null;
            Cookie[] cookies=null;
            Date now=null;
         %>
         <%
              cookies=request.getCookies();               // use request class getCookie method to get cookies if there is no cookie info then add new 
              now=new Date();
              if(cookies==null)
              {
                  lastAccessTime=(now.getYear()+1900+"Year"+now.getMonth()+"Month"+now.getDay()+"Day"+now.getHours()+"Hour"+now.getMinutes()+"Minute"+now.getSeconds()+"Second");
                  mycookie=new Cookie("lastAccessTime",lastAccessTime);
                  mycookie.setMaxAge(30*24*60*60); // 30 days 24hours 60mins 60 seconds
                  response.addCookie(mycookie);
              }
              else
              for(int index=0;index<cookies.length;index++)
              {
                  if(cookies[index].getName().equals("lastAccessTime"))
                  {
                      lastAccessTime=cookies[index].getValue();
                      nowAccessTime=(now.getYear()+1900+"Year "+now.getMonth()+" Month "+now.getDay()+" Day "+now.getHours()+" Hour "+now.getMinutes()+" Minute "+now.getSeconds()+" Second");
                      mycookie=new Cookie("lastAccessTime",nowAccessTime);
                      mycookie.setMaxAge(30*24*60*60); // 30 days 24hours 60mins 60 seconds
                      response.addCookie(mycookie);
                      break;                  
                  }
              }
              out.print("the last time your visit this system is "+lastAccessTime);
              
          %>
      </body>
    </html>

    登陆成功会显示: 可以看出,跳转后的页面URL仍然是跳转前的URL并未发生任何变化,由于只进行一次请求,所以request.setAttribute 和request.getAttribute能够正常工作

    登陆失败:

    而是用response.sendRedirect()会出现2次请求不能再是用request的对象包装和传递参数,可以使用session.setAttribute("NAME","VALUE")使用EL表达式语句${sesstionScope.userNameString}

    从session会话对象中获取传递的参数,同时重定向后的URL为重定向页面的URL。

  • 相关阅读:
    .net序列化和反序列化(一)——自动序列化
    在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句
    使用JQuery与iframe交互
    FCKeditor自定义工具栏和定义多个工具栏
    FCKeditor自定义非空验证
    PHP5.3.6的IIS配置
    Linux下缓存服务器的应用
    PHP采集程序中常用的函数
    关于PHP5.3.x和Zend Optimizer(Zend Guard Loader),以及shopex4.8.5安装的问题
    SQLserver数据库还原出现错误112(磁盘空间不足)的解决办法
  • 原文地址:https://www.cnblogs.com/tobecrazy/p/3458592.html
Copyright © 2011-2022 走看看