JSP基础部分

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对象,然后对该对象进行操作,其中该对象有以下方法:

序号 方法 & 描述

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

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

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

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

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

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

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

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

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

  10. 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这个对象,它有以下特点:

  1. 在服务器启动时自动创建,在服务器关闭时自动销毁
  2. 一个网站仅有一个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来实现。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2019 - 2024 My Wonderland All Rights Reserved.

UV : | PV :