写在前面
继续学习Java Servlet,这一部分学习URL重写,虽然这些技术用的不多,而且代码也比较简单,但是我还是决定一节一节的记录。仔细看看示例代码还是有很多内容。
URL重写
URL重写是一种会话跟踪技术, 它将一个或多个token添加到URL的查询字符串中, 每个token通常为key=value形式, 如下:
url?key-1=value-1&key-2=value-2 ... &key-n=value-n
注意, URL和tokens间用问号(? ) 分割, token间用与号(&) 。
URL重写适合于tokens无须在太多URL间传递的情况下, 然而它有如下限制:
- URL在某些浏览器上最大长度为2000字符;
- 若要传递值到下一个资源, 需要将值插入到链接中, 换句话说, 静态页面很难传值;
- URL重写需要在服务端上完成, 所有的链接都必须带值, 因此当一个页面存在很多链接时, 处理过程会是一个不小的挑战;
- 某些字符, 例如空格、 与和问号等必须用base64编码;
- 所有的信息都是可见的, 某些情况下不合适。
因为存在如上限制, URL重写仅适合于信息仅在少量页面间传递, 且信息本身不敏感。
示例代码
下面将构造一个Top10Servlet类会显示最受游客青睐的10个伦敦和巴黎的景点。 信息分成两页展示, 第一页展示指定城市的5个景点, 第二页展示另外5个。 该Servlet使用URL重写来记录所选择的城市和页数。 该类扩展自HttpServlet, 并通过/top10访问。
package app02a.urlrewriting;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "Top10Servlet", urlPatterns = { "/top10" })
public class Top10Servlet extends HttpServlet {
private static final long serialVersionUID = 987654321L;