• JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件


    一、JSP 日期处理:

      使用JSP最重要的优势之一,就是可以使用所有Java  API。本节讲述Java中的Date类,它在java.util包下,封装了当前日期和时间。

      Date类有两个构造函数。第一个构造函数使用当前日期和时间来初始化对象:Date( )

      第二个构造函数接受一个参数,这个参数表示从1970年1月1日凌晨至所要表示时间的毫秒数:Date(long millisec)

      获取Date对象后,可使用下列方法:

    boolean after(Date date):如果比给定的日期晚,则返回true,否则返回false

    boolean before(Date date):如果比给定的日期早,则返回true,否则返回false

    Object clone( ):获取当前对象的一个副本

    boolean equals(Object date):如果与给定日期相同,则返回true,否则返回false

    long getTime( ):返回从1970年1月1日凌晨至此对象所表示时间的毫秒数

    int hashCode( ):返回此对象的哈希码

    void setTime(long time):使用给定参数设置时间和日期,参数time表示从1970年1月1日凌晨至time所经过的毫秒数

    String toString( ):将此对象转换为字符串并返回这个字符串

    int compareTo(Date date):如果与给定日期相等,则返回0,如果比给定日期早,则返回一个负数,如果比给定日期晚,则返回一个正数

    int compareTo(Object obj):与 compareTo(Date) 方法相同,如果 obj 不是Date类或其子类的对象,抛出ClassCastException异常

    1、获取当前日期和时间

      使用JSP编程可以很容易的获取当前日期和时间,只要使用Date对象的toString()方法就行了,就像下面这样:

    <body>
    <h1>显示当前时间与日期</h1>
    <%
       Date date = new Date();
       out.print( "<h2 align="center">" +date.toString()+"</h2>");
    %>
    </body>

      将上面的代码保存在 main.jsp 文件中,然后访问 http://localhost:8080/testjsp/main.jsp,刷新,就可以发现每次刷新所得到的秒数都不相同。

    2、日期比较

      您可以在JSP脚本中使用任何Java方法。如果您想要比较两个日期,可以参照下面的方法来做:

    • 使用getTime()方法得到毫秒数,然后比较毫秒数就行了。
    • 使用before(),after(),equals()方法。比如,new Date(99,2,12).before(new Date(99,2,18))返回true。
    • 使用compareTo()方法,这个方法在Comparable接口中定义,在Date中实现。

    3、使用SimpleDateFormat格式化日期

      SimpleDateFormat使用一种地区敏感的方式来格式化和解析日期,它允许您使用自定义的模式来格式化日期和时间。

      对之前日期jsp文件稍作修改,得到如下修改后的代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.io.*,java.util.*" %>
    <%@ page import="javax.servlet.*,java.text.*" %>
    <html>
    <head>
    <title>显示当前时间与日期</title>
    </head>
    <body>
    <h1>显示当前时间与日期</h1>
    <%
       Date dNow = new Date( );
       SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
       out.print( "<h2 align="center">" + ft.format(dNow) + "</h2>");
    %>
    </body>
    </html>

     二、JSP 页面重定向:

      当需要将文档移动到一个新的位置时,就需要使用JSP重定向了。最简单的重定向方式就是使用response对象的sendRedirect()方法。这个方法的签名如下:

    public void response.sendRedirect(String location) throws IOException 

      这个方法将状态码和新的页面位置作为响应发回给浏览器。您也可以使用setStatus()和setHeader()方法来得到同样的效果:

    ....
    String site = "http://www.baidu.com" ;
    response.setStatus(response.SC_MOVED_TEMPORARILY);
    response.setHeader("Location", site); 
    ....

      实例演示JSP如何进行页面重定向:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.io.*,java.util.*" %>
    <html>
    <html>
    <head>
    <title>页面重定向</title>
    </head>
    <body>
    <h1>页面重定向</h1>
    <%
       // 重定向到新地址
       String site = new String("http://www.baidu.com");
       response.setStatus(response.SC_MOVED_TEMPORARILY);
       response.setHeader("Location", site); 
    %>
    </body>
    </html>

      将以上代码保存在PageRedirecting.jsp文件中,然后访问http://localhost:8080/PageRedirect.jsp,它将会把您带至百度。

    三、JSP 点击量统计:

      有时候我们需要知道某个页面被访问的次数,这时我们就需要在页面上添加页面统计器,页面访问的统计一般在用户第一次载入时累加该页面的访问数上。

      要实现一个计数器,您可以利用应用程序隐式对象和相关方法getAttribute()和setAttribute()来实现。

      这个对象表示JSP页面的整个生命周期中。当JSP页面初始化时创建此对象,当JSP页面调用jspDestroy()时删除该对象。

      以下是在应用中创建变量的语法:

    application.setAttribute(String Key, Object Value);

      您可以使用上述方法来设置一个计数器变量及更新该变量的值。读取该变量的方法如下:

    application.getAttribute(String Key);

      在页面每次被访问时,你可以读取计数器的当前值,并递增1,然后重新设置,在下一个用户访问时就将新的值显示在页面上。

    1、实例演示:

      如何使用JSP来计算特定页面访问的总人数。如果你要计算你网站使用页面的总点击量,那么你就必须将该代码放在所有的JSP页面上。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.io.*,java.util.*" %>
    <html>
    <html>
    <head>
    <title>访问量统计</title>
    </head>
    <body>
    <%
        Integer hitsCount = (Integer)application.getAttribute("hitCounter");
        if( hitsCount == null || hitsCount == 0 ){
           /* 第一次访问 */
           out.println("欢迎访问!");
           hitsCount = 1;
        }else{
           /* 返回访问值 */
           out.println("欢迎再次访问!");
           hitsCount += 1;
        }
        application.setAttribute("hitCounter", hitsCount);
    %>
    <p>页面访问量为: <%= hitsCount%></p>
    </body>
    </html>

      现在我们将上面的代码放置于main.jsp文件上,并访问http://localhost:8080/testjsp/main.jsp文件。你会看到页面会生成个计数器,在我们每次刷新页面时,计数器都会发生变化(每次刷新增加1)。你也可以通过不同的浏览器访问,计数器会在每次访问后增加1。

    2、复位计数器

      使用以上方法,在 web 服务器重启后,计数器会被复位为 0,即前面保留的数据都会消失,你可以使用以下几种方式解决该问题:

    • 在数据库中定义一个用于统计网页访问量的数据表 count,字段为 hitcount,hitcount 默认值为0,将统计数据写入到数据表中。
    • 在每次访问时我们读取表中 hitcount 字段。
    • 每次访问时让 hitcount 自增 1。
    • 在页面上显示新的 hitcount 值作为页面的访问量。
    • 如果你需要统计每个页面的访问量,你可以使用以上逻辑将代码添加到所有页面上。

    四、JSP 自动刷新:

      想象一下,如果要直播比赛的比分,或股票市场的实时状态,或当前的外汇配给,该怎么实现呢?显然,要实现这种实时功能,您就不得不规律性地刷新页面。

      JSP提供了一种机制来使这种工作变得简单,它能够定时地自动刷新页面。

      刷新一个页面最简单的方式就是使用response对象的setIntHeader()方法:这个方法通知浏览器在给定的时间后刷新,时间以秒为单位。这个方法的签名如下:

    public void setIntHeader(String header, int headerValue)

      页面自动刷新程序示例:使用了setIntHeader()方法来设置刷新头,模拟一个数字时钟:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.io.*,java.util.*" %>
    <html>
    <head>
    <title>自动刷新实例</title>
    </head>
    <body>
    <h2>自动刷新实例</h2>
    <%
       // 设置每隔5秒刷新一次
       response.setIntHeader("Refresh", 5);
       // 获取当前时间
       Calendar calendar = new GregorianCalendar();
       String am_pm;
       int hour = calendar.get(Calendar.HOUR);
       int minute = calendar.get(Calendar.MINUTE);
       int second = calendar.get(Calendar.SECOND);
       if(calendar.get(Calendar.AM_PM) == 0)
          am_pm = "AM";
       else
          am_pm = "PM";
       String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
       out.println("当前时间为: " + CT + "
    ");
    %>
    </body>
    </html>

      把以上代码保存在main.jsp文件中,访问它。它会每隔5秒钟刷新一次页面并获取系统当前时间。

    五、JSP 发送邮件:

      虽然使用JSP实现邮件发送功能很简单,但是需要有JavaMail API,并且需要安装JavaBean Activation Framework。

    • 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
    • 您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)

      你也可以使用本站提供的下载链接:

      下载并解压这些文件,在根目录下,您将会看到一系列jar包。将mail.jar包和activation.jar包加入CLASSPATH变量中。

    1、发送一封简单的邮件

      这个例子展示了如何从您的机器发送一封简单的邮件。它假定localhost已经连接至网络并且有能力发送一封邮件。与此同时,请再一次确认mail.jar包和activation.jar包已经添加进CLASSPATH变量中。

    <%@ page import="java.io.*,java.util.*,javax.mail.*"%>
    <%@ page import="javax.mail.internet.*,javax.activation.*"%>
    <%@ page import="javax.servlet.http.*,javax.servlet.*" %>
    <%
       String result;
       // 收件人的电子邮件
       String to = "abcd@gmail.com";
    
       // 发件人的电子邮件
       String from = "mcmohd@gmail.com";
    
       // 假设你是从本地主机发送电子邮件
       String host = "localhost";
    
       // 获取系统属性对象
       Properties properties = System.getProperties();
    
       // 设置邮件服务器
       properties.setProperty("mail.smtp.host", host);
    
       // 获取默认的Session对象。
       Session mailSession = Session.getDefaultInstance(properties);
    
       try{
          // 创建一个默认的MimeMessage对象。
          MimeMessage message = new MimeMessage(mailSession);
          // 设置 From: 头部的header字段
          message.setFrom(new InternetAddress(from));
          // 设置 To: 头部的header字段
          message.addRecipient(Message.RecipientType.TO,
                                   new InternetAddress(to));
          // 设置 Subject: header字段
          message.setSubject("This is the Subject Line!");
          // 现在设置的实际消息
          message.setText("This is actual message");
          // 发送消息
          Transport.send(message);
          result = "Sent message successfully....";
       }catch (MessagingException mex) {
          mex.printStackTrace();
          result = "Error: unable to send message....";
       }
    %>
    <html>
    <head>
    <title>Send Email using JSP</title>
    </head>
    <body>
    <center>
    <h1>Send Email using JSP</h1>
    </center>
    <p align="center">
    <% 
       out.println("Result: " + result + "
    ");
    %>
    </p>
    </body>
    </html>

      如果想要把邮件发送给多人,下面列出的方法可以用来指明多个邮箱地址:

    void addRecipients(Message.RecipientType type, 
                       Address[] addresses)
    throws MessagingException

      参数的描述如下:

    • type:这个值将会被设置成TO,CC,或BCC。CC代表副本,BCC代表黑色副本,例子程序中使用的是TO。
    • addresses:这是一个邮箱地址的数组,当指定邮箱地址时需要使用InternetAddress()方法。

    2、发送一封HTML邮件

      这个例子发送一封简单的HTML邮件。它假定您的localhost已经连接至网络并且有能力发送邮件。与此同时,请再一次确认mail.jar包和activation.jar包已经添加进CLASSPATH变量中。这个例子和前一个例子非常相似,不过在这个例子中我们使用了setContent()方法,将"text/html"做为第二个参数传给它,用来表明消息中包含了HTML内容。

    <%@ page import="java.io.*,java.util.*,javax.mail.*"%>
    <%@ page import="javax.mail.internet.*,javax.activation.*"%>
    <%@ page import="javax.servlet.http.*,javax.servlet.*" %>
    <%
       String result;
       // 收件人的电子邮件
       String to = "abcd@gmail.com";
    
       // 发件人的电子邮件
       String from = "mcmohd@gmail.com";
    
       // 假设你是从本地主机发送电子邮件
       String host = "localhost";
    
       // 获取系统属性对象
       Properties properties = System.getProperties();
    
       // 设置邮件服务器
       properties.setProperty("mail.smtp.host", host);
    
       // 获取默认的Session对象。
       Session mailSession = Session.getDefaultInstance(properties);
    
       try{
          // 创建一个默认的MimeMessage对象。
          MimeMessage message = new MimeMessage(mailSession);
          // 设置 From: 头部的header字段
          message.setFrom(new InternetAddress(from));
          // 设置 To: 头部的header字段
          message.addRecipient(Message.RecipientType.TO,
                                   new InternetAddress(to));
          // 设置 Subject: header字段
          message.setSubject("This is the Subject Line!");
         
          // 设置 HTML消息
          message.setContent("<h1>This is actual message</h1>",
                                "text/html" );
          // 发送消息
          Transport.send(message);
          result = "Sent message successfully....";
       }catch (MessagingException mex) {
          mex.printStackTrace();
          result = "Error: unable to send message....";
       }
    %>
    <html>
    <head>
    <title>Send HTML Email using JSP</title>
    </head>
    <body>
    <center>
    <h1>Send Email using JSP</h1>
    </center>
    <p align="center">
    <% 
       out.println("Result: " + result + "
    ");
    %>
    </p>
    </body>
    </html>

    3、在邮件中包含附件

      这个例子告诉我们如何发送一封包含附件的邮件。

    <%@ page import="java.io.*,java.util.*,javax.mail.*"%>
    <%@ page import="javax.mail.internet.*,javax.activation.*"%>
    <%@ page import="javax.servlet.http.*,javax.servlet.*" %>
    <%
       String result;
       // 收件人的电子邮件
       String to = "abcd@gmail.com";
    
       // 发件人的电子邮件
       String from = "mcmohd@gmail.com";
    
       // 假设你是从本地主机发送电子邮件
       String host = "localhost";
    
       // 获取系统属性对象
       Properties properties = System.getProperties();
    
       // 设置邮件服务器
       properties.setProperty("mail.smtp.host", host);
    
       // 获取默认的Session对象。
       Session mailSession = Session.getDefaultInstance(properties);
    
       try{
          // 创建一个默认的MimeMessage对象。
          MimeMessage message = new MimeMessage(mailSession);
    
          // 设置 From: 头部的header字段
          message.setFrom(new InternetAddress(from));
    
          // 设置 To: 头部的header字段
          message.addRecipient(Message.RecipientType.TO,
                                   new InternetAddress(to));
    
          // 设置 Subject: header字段
          message.setSubject("This is the Subject Line!");
    
          // 创建消息部分
          BodyPart messageBodyPart = new MimeBodyPart();
    
          // 填充消息
          messageBodyPart.setText("This is message body");
          
          // 创建多媒体消息
          Multipart multipart = new MimeMultipart();
    
          // 设置文本消息部分
          multipart.addBodyPart(messageBodyPart);
    
          // 附件部分
          messageBodyPart = new MimeBodyPart();
          String filename = "file.txt";
          DataSource source = new FileDataSource(filename);
          messageBodyPart.setDataHandler(new DataHandler(source));
          messageBodyPart.setFileName(filename);
          multipart.addBodyPart(messageBodyPart);
    
          // 发送完整消息
          message.setContent(multipart );
    
          // 发送消息
          Transport.send(message);
          String title = "Send Email";
          result = "Sent message successfully....";
       }catch (MessagingException mex) {
          mex.printStackTrace();
          result = "Error: unable to send message....";
       }
    %>
    <html>
    <head>
    <title>Send Attachement Email using JSP</title>
    </head>
    <body>
    <center>
    <h1>Send Attachement Email using JSP</h1>
    </center>
    <p align="center">
    <% 
       out.println("Result: " + result + "
    ");
    %>
    </p>
    </body>
    </html>

    4、用户认证部分

      如果邮件服务器需要用户名和密码来进行用户认证的话,可以像下面这样来设置:

    props.setProperty("mail.user", "myuser");
    props.setProperty("mail.password", "mypwd");

    5、使用表单发送邮件

      使用HTML表单接收一封邮件,并通过request对象获取所有邮件信息:

    String to = request.getParameter("to");
    String from = request.getParameter("from");
    String subject = request.getParameter("subject");
    String messageText = request.getParameter("body");

      获取以上信息后,您就可以使用前面提到的例子来发送邮件了。

  • 相关阅读:
    hadoop安装前的准备
    记录一次Qt5程序无法运行的解决过程
    C#里的Thread.Join与Control.Invoke死锁情况
    qbxt7月笔记
    zhxのDP讲
    有n*m的方格图
    最长上升子序列相关问题笔记
    qbxt游记(清北澡堂划水记
    DAZの七下道法(持续更新
    模板
  • 原文地址:https://www.cnblogs.com/goloving/p/7469399.html
Copyright © 2020-2023  润新知