Servlet其他服务
本篇文章最后介绍一些Servlet上文件上传,处理日期,网页重定向,自动刷新等一些操作
文件上传
Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。
工程中需要引入jar文件:commons-fileupload-1.3.2、commons-io-2.5.jar。
- 创建一个文件上传表单
- 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。
- 表单 enctype 属性应该设置为 multipart/form-data.
- 表单 action 属性应该设置为在后端服务器上处理文件上传的 Servlet 文件。下面的实例使用了 UploadServlet Servlet 来上传文件。
- 上传单个文件,您应该使用单个带有属性 type=”file” 的 <input …/> 标签。为了允许多个文件上传,请包含多个 name 属性值不同的 input 标签。输入标签具有不同的名称属性的值。浏览器会为每个 input
标签关联一个浏览按钮。
1 | <form method="post" action="/TomcatTest/UploadServlet" enctype="multipart/form-data"> |
- 编写后台 Servlet
1 | import java.io.File; |
- 编译和运行 Servlet
- 编译上面的 Servlet UploadServlet,并在 web.xml 文件中创建所需的条目,
Servlet 处理日期
Servlet可以直接使用Java 提供的 java.util 包中的 Date 类。
column0 | column1 |
---|---|
序号 | 方法 & 描述 |
1 | boolean after(Date date)。如果调用的 Date 对象中包含的日期在 date 指定的日期之后,则返回 true,否则返回 false。 |
2 | boolean before(Date date)。如果调用的 Date 对象中包含的日期在 date 指定的日期之前,则返回 true,否则返回 false。 |
3 | Object clone( )。重复调用 Date 对象。 |
4 | int compareTo(Date date)。把调用对象的值与 date 的值进行比较。如果两个值是相等的,则返回 0。如果调用对象在 date 之前,则返回一个负值。如果调用对象在 date 之后,则返回一个正值。 |
5 | int compareTo(Object obj)。如果 obj 是 Date 类,则操作等同于 compareTo(Date)。否则,它会抛出一个 ClassCastException。 |
6 | boolean equals(Object date)。如果调用的 Date 对象中包含的时间和日期与 date 指定的相同,则返回 true,否则返回 false。 |
7 | long getTime( )。返回 1970 年 1 月 1 日以来经过的毫秒数。 |
8 | int hashCode( )。为调用对象返回哈希代码。 |
9 | void setTime(long time)。设置 time 指定的时间和日期,这表示从 1970 年 1 月 1 日午夜以来经过的时间(以毫秒为单位)。 |
10 | String toString( )。转换调用的 Date 对象为一个字符串,并返回结果。 |
Servlet 网页重定向
当文档移动到新的位置,我们需要向客户端发送这个新位置时,我们需要用到网页重定向。网页重定向主要是为了实现负载均衡。
实现方法如下:
- sendRedirect() 方法
1 | public void HttpServletResponse.sendRedirect(String location) |
该方法把响应连同状态码和新的网页位置发送回浏览器。
- setStatus() 和 setHeader() 方法
1 | String site = "http://www.nanaiii.com" ; |
Servlet 点击计数器
网页点击计数器
很多时候,您可能有兴趣知道网站的某个特定页面上的总点击量。使用 Servlet 来计算这些点击量是非常简单的,因为一个 Servlet 的生命周期是由它运行所在的容器控制的。
以下是实现一个简单的基于 Servlet 生命周期的网页点击计数器需要采取的步骤:
- 在 init() 方法中初始化一个全局变量。
- 每次调用 doGet() 或 doPost() 方法时,都增加全局变量。
- 如果需要,您可以使用一个数据库表来存储全局变量的值在 destroy() 中。在下次初始化 Servlet 时,该值可在 init() 方法内被读取。这一步是可选的。
- 如果您只想对一个 session 会话计数一次页面点击,那么请使用 isNew() 方法来检查该 session 会话是否已点击过相同页面。这一步是可选的。
- 您可以通过显示全局计数器的值,来在网站上展示页面的总点击量。这一步是可选的。
网站点击计数器
很多时候,您可能有兴趣知道整个网站的总点击量。在 Servlet 中,这也是非常简单的,我们可以使用过滤器做到这一点。
以下是实现一个简单的基于过滤器生命周期的网站点击计数器需要采取的步骤:
- 在过滤器的 init() 方法中初始化一个全局变量。
- 每次调用 doFilter 方法时,都增加全局变量。
- 如果需要,您可以在过滤器的 destroy() 中使用一个数据库表来存储全局变量的值。在下次初始化过滤器时,该值可在 init() 方法内被读取, 这一步是可选的。
代码实现:
1 | public void doFilter(ServletRequest request, |
web.xml中的配置:
1 | <filter> |
自动刷新页面
setIntHeader()方法
1 | public void setIntHeader(String header, int headerValue) |
此方法把头信息 “Refresh” 连同一个表示时间间隔的整数值(以秒为单位)发送回浏览器,从而实现自动刷新页面。