方法一:网址重写
通过在url地址后面添加若干的token作为查询字符串来实现。token的值一般为 键=值
url?key1=value1&key2=value2&...&keyn=valuen
url与token之间需要用?分开,两个token之间则是需要用一个&符号隔开。
此方法适用于token不需要在多个页面中使用时使用。
缺点是
a.在某些浏览器当中url长度有限制
b.url中的信息是可见的,安全性差
c.某些字符需要进行编码
package com.SessionManage.Test;
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;
private List londonAttractions;
private List parisAttractions;
@Override
public void init() throws ServletException {
londonAttractions = new ArrayList(10);
londonAttractions.add("Buckingham Palace");
londonAttractions.add("London Eye");
londonAttractions.add("British Museum");
londonAttractions.add("National Gallery");
londonAttractions.add("Big Ben");
londonAttractions.add("Tower of London");
londonAttractions.add("Natural History Museum");
londonAttractions.add("Canary Wharf");
londonAttractions.add("2012 Olympic Park");
londonAttractions.add("St Paul's Cathedral");
parisAttractions = new ArrayList(10);
parisAttractions.add("Eiffel Tower");
parisAttractions.add("Notre Dame");
parisAttractions.add("The Louvre");
parisAttractions.add("Champs Elysees");
parisAttractions.add("Arc de Triomphe");
parisAttractions.add("Sainte Chapelle Church");
parisAttractions.add("Les Invalides");
parisAttractions.add("Musee d'Orsay");
parisAttractions.add("Montmarte");
parisAttractions.add("Sacre Couer Basilica");
}
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
String city = request.getParameter("city");
if(city!=null&&(city.equals("london")||city.equals("paris"))){
showAttractions(request,response,city);
}else{
showMainPage(request,response);
}
}
private void showMainPage(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("
"+ "
Top 10 Tourist Attractions"+ "
"+"please select a city:"
+"London"
+"Paris"
+"");
}
private void showAttractions(HttpServletRequest request,
HttpServletResponse response, String city) throws ServletException,IOException {
// TODO Auto-generated method stub
int page = 1;
String pageParameter = request.getParameter("page");
if(pageParameter!=null){
try{
page = Integer.parseInt(pageParameter);
}catch(NumberFormatException e){
e.printStackTrace();
}
if(page>2){
page = 1;
}
}
List attractions = null;
if(city.equals("london")){
attractions = londonAttractions;
}else if(city.equals("paris")){
attractions = parisAttractions;
}
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.println("
"+"
Top 10 Tourist Attractions"+"
");writer.println("Select City");
writer.println("
Page"+page+"
");
int start = page*5-5;
for(int i = start; i < start+5; i++){
writer.println(attractions.get(i)+"
");
}
writer.print("
"
+ "Page 1");
writer.print(" Page 2");
writer.println("");
}
}
方法二:隐藏域
主要适用于页面当中含有表单的情况,当用户提交表单时,隐藏域中的值也传送到服务器。只有当页面包含表单,或者可以在页面添加表单时,才适合使用隐藏域。
此技术胜过网址重写的地方在于可以将更多的字符传递到服务器,且不需要进行字符编码。但仅当所需传递的信息不需要跨越多个页面时,才适合使用这种技术。
package com.SessionManage.Test2;
public class Customer {
private int id;
private String name;
private String city;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
package com.SessionManage.Test2;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;