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。

原文地址:https://www.cnblogs.com/tobecrazy/p/3458592.html