JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件
2017-09-03 13:19
746 查看
一、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()方法就行了,就像下面这样:
将上面的代码保存在 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文件稍作修改,得到如下修改后的代码:
二、JSP 页面重定向:
当需要将文档移动到一个新的位置时,就需要使用JSP重定向了。最简单的重定向方式就是使用response对象的sendRedirect()方法。这个方法的签名如下:
这个方法将状态码和新的页面位置作为响应发回给浏览器。您也可以使用setStatus()和setHeader()方法来得到同样的效果:
实例演示JSP如何进行页面重定向:
将以上代码保存在PageRedirecting.jsp文件中,然后访问http://localhost:8080/PageRedirect.jsp,它将会把您带至百度。
三、JSP 点击量统计:
有时候我们需要知道某个页面被访问的次数,这时我们就需要在页面上添加页面统计器,页面访问的统计一般在用户第一次载入时累加该页面的访问数上。
要实现一个计数器,您可以利用应用程序隐式对象和相关方法getAttribute()和setAttribute()来实现。
这个对象表示JSP页面的整个生命周期中。当JSP页面初始化时创建此对象,当JSP页面调用jspDestroy()时删除该对象。
以下是在应用中创建变量的语法:
您可以使用上述方法来设置一个计数器变量及更新该变量的值。读取该变量的方法如下:
在页面每次被访问时,你可以读取计数器的当前值,并递增1,然后重新设置,在下一个用户访问时就将新的值显示在页面上。
1、实例演示:
如何使用JSP来计算特定页面访问的总人数。如果你要计算你网站使用页面的总点击量,那么你就必须将该代码放在所有的JSP页面上。
现在我们将上面的代码放置于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()方法:这个方法通知浏览器在给定的时间后刷新,时间以秒为单位。这个方法的签名如下:
页面自动刷新程序示例:使用了setIntHeader()方法来设置刷新头,模拟一个数字时钟:
把以上代码保存在main.jsp文件中,访问它。它会每隔5秒钟刷新一次页面并获取系统当前时间。
五、JSP 发送邮件:
虽然使用JSP实现邮件发送功能很简单,但是需要有JavaMail API,并且需要安装JavaBean Activation Framework。
您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)。
你也可以使用本站提供的下载链接:
JavaMail mail.jar 1.4.5
JAF(版本 1.1.1) activation.jar
下载并解压这些文件,在根目录下,您将会看到一系列jar包。将mail.jar包和activation.jar包加入CLASSPATH变量中。
1、发送一封简单的邮件
这个例子展示了如何从您的机器发送一封简单的邮件。它假定localhost已经连接至网络并且有能力发送一封邮件。与此同时,请再一次确认mail.jar包和activation.jar包已经添加进CLASSPATH变量中。
如果想要把邮件发送给多人,下面列出的方法可以用来指明多个邮箱地址:
参数的描述如下:
type:这个值将会被设置成TO,CC,或BCC。CC代表副本,BCC代表黑色副本,例子程序中使用的是TO。
addresses:这是一个邮箱地址的数组,当指定邮箱地址时需要使用InternetAddress()方法。
2、发送一封HTML邮件
这个例子发送一封简单的HTML邮件。它假定您的localhost已经连接至网络并且有能力发送邮件。与此同时,请再一次确认mail.jar包和activation.jar包已经添加进CLASSPATH变量中。这个例子和前一个例子非常相似,不过在这个例子中我们使用了setContent()方法,将"text/html"做为第二个参数传给它,用来表明消息中包含了HTML内容。
3、在邮件中包含附件
这个例子告诉我们如何发送一封包含附件的邮件。
4、用户认证部分
如果邮件服务器需要用户名和密码来进行用户认证的话,可以像下面这样来设置:
5、使用表单发送邮件
使用HTML表单接收一封邮件,并通过request对象获取所有邮件信息:
获取以上信息后,您就可以使用前面提到的例子来发送邮件了。
使用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 + "\n"); %> </body> </html>
把以上代码保存在main.jsp文件中,访问它。它会每隔5秒钟刷新一次页面并获取系统当前时间。
五、JSP 发送邮件:
虽然使用JSP实现邮件发送功能很简单,但是需要有JavaMail API,并且需要安装JavaBean Activation Framework。
您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)。
你也可以使用本站提供的下载链接:
JavaMail mail.jar 1.4.5
JAF(版本 1.1.1) activation.jar
下载并解压这些文件,在根目录下,您将会看到一系列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 + "\n"); %> </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 + "\n"); %> </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 + "\n"); %> </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");
获取以上信息后,您就可以使用前面提到的例子来发送邮件了。
相关文章推荐
- struts2第十七讲学习笔记,Action处理复选框与JSP页面使用ognl处理map
- Jsp学习9-点击量统计 自动刷新
- 学习笔记三:jsp页面自动关闭
- jsp中自动重新发送请求刷新当前页面
- JavaWeb_Day10_学习笔记1_response(3、4、5、6、7、8、9)发送状态码、响应、重定向、定时刷新、禁用浏览器缓存、响应字节数据、快捷重定向方法、完成防盗链
- 【Python学习笔记】-自动发送邮件脚本
- asp .net学习笔记之使用jmail发送邮件
- JavaMail学习笔记-1(简单纯文本的邮件发送)
- 使用Ext.UpdateManager实现页面任意部分自动刷新处理
- ASP.NET页面错误处理及邮件发送简易方案
- JSP学习笔记(三)-----使用JSP处理用户注册和登陆
- php学习笔记(四)之发送邮件02 详细操作
- JSP中页面自动定时刷新
- Ajax基础教程学习(3)_创建自动刷新页面
- php学习笔记(四)之发送邮件02 详细操作
- JavaMail学习笔记-2(HTML格式的邮件发送)
- 使用Ext.UpdateManager实现页面任意部分自动刷新处理
- asp.net实现页面的一般处理程序(CGI)学习笔记
- php学习笔记(三)之发送邮件01 关于class_smtp.php
- [学习笔记]jsp中超级链接 中文编码处理