JSP
这几天把JSP基本部分看了,方便记忆,还是回顾一下。文件部分有一点复杂,所以后面直接单独解析一下。
日期处理
其实日期处理部分还是JAVA中的Date()对象提供的。只是之前学习JAVA是没认真看,哈哈哈。
获取时间
eg:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<html>
<head>
<title>显示当前时间与日期</title>
</head>
<body>
<h1>显示当前时间与日期</h1>
<%
Date date = new Date();
out.print( "<h2 align=\"center\">" +date.toString()+"</h2>");
%>
</body>
</html>
提示:任然是实例化Date对象,然后对该对象进行操作,其中该对象有以下方法:
序号 方法 & 描述
boolean after(Date date)
如果比给定的日期晚,则返回true,否则返回falseboolean before(Date date)
如果比给定的日期早,则返回true,否则返回falseObject clone( )
获取当前对象的一个副本int compareTo(Date date)
如果与给定日期相等,则返回0,如果比给定日期早,则返回一个负数,如果比给定日期晚,则返回一个正数int compareTo(Object obj)
与 compareTo(Date) 方法相同,如果 obj 不是Date类或其子类的对象,抛出ClassCastException异常boolean equals(Object date)
如果与给定日期相同,则返回true,否则返回falselong getTime( )
返回从1970年1月1日凌晨至此对象所表示时间的毫秒数int hashCode( )
返回此对象的哈希码void setTime(long time)
使用给定参数设置时间和日期,参数time表示从1970年1月1日凌晨至time所经过的毫秒数String toString( )
将此对象转换为字符串并返回这个字符串
日期的比较
- 使用getTime()方法得到毫秒数,然后比较毫秒数就行了。
- 使用before(),after(),equals()方法。比如,new Date(99,2,12).before(new Date(99,2,18))返回true。
- 使用compareTo()方法,这个方法在Comparable接口中定义,在Date中实现。
使用SimpleDateFormat格式化日期
eg:
<%@ 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>
SimpleDateFormat格式码
字符 描述 示例
G 时代标识符 AD
y 4位数年份 2001
M 月 July or 07
d 日 10
h 12小时制, A.M./P.M. (1~12) 12
H 24小时制 22
m 分钟 30
s 秒 55
S 毫秒 234
E 星期 Tuesday
D 一年中的某天 360
F 一个月中某星期的某天 2 (second Wed. in July)
w 一年中的某星期 40
W 一个月中的某星期 1
a A.M./P.M. 标记 PM
k 一天中的某个小时 (1~24) 24
K 一天中的某个小时,A.M./P.M. (0~11) 10
z 时区 Eastern Standard Time
‘ 文本分隔 Delimiter
“ 单引号 `
页面重定向
页面重定向是指在client访问a.jsp时,根据据需要,a.jsp页面将请求重定向至另一个页面。
注意这一个过程中,a.jsp的所有内容都不会返回至client,而是直接将请求引导至新页面,也就是说client会进行二次访问,新页面的加载还是又client来完成。
eg:
<%@ 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.runoob.com");
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
%>
</body>
</html>
还有一个类似的请求转发,而请求转发是在接手到client的请求后,在server端进行请求,然后再这个请求的基础上将新内容返回。也就是说,该种方法只经历了1次请求,并且转发只能是转发到本次请求的服务器,而重定向则可以定向到其他服务器。(进过我的测试暂时是这样)
我在看这一部分时,想在重定向或者焕发之前给client一些提示,但是由于该页面的内容内容根本不会写入到response中,所以是不能实现的,在网上查找了一圈的资料,基本都是说使用前端来实现跳转,才能给客户端反馈。
比如:
out.print("<script>
alert("即将跳转至百度!");
window.href="http:www.baidu.com";
</script>")
所以,如果使用重定向或者是转发,是不能给客户端提示的,如果要提示,就要用前端实现跳转。
JSP点击量统计
在菜鸟上,对于统计量方法的实现,时使用application对象来存储一对键值,在访问时动态变化,实现访问量统计。所以我们看一下applicant这个对象,它有以下特点:
- 在服务器启动时自动创建,在服务器关闭时自动销毁
- 一个网站仅有一个application,也就是说所有的客户共享一个application。
所以如果服务器遇到宕机,那么这个量就被销毁了,所以最保险的方法是将其储存到数据库中,并定期刷新。保证不会频繁访问数据库,又可以最大化的保存数据。
eg:
<%@ 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>
JSP自动刷新
我其实觉得这个功能可以在前端实现,不过也许有些时候必须要使用后端实现呢,所以还是看一下,其实就一句:
response.setIntHeader("Refresh", 5);
eg:
<%@ 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>
通过这个栗子可以看出效果,当然,对于日期的刷新,不肯能用这个东西,肯定是局部的ajax来实现。