Session

轉發

request.getRequestDispatcher("/servlet/ListCartServlet").forward(request, response);

response.sendRedirect(url);


================== SESSION ==================

自動加jsessionid

response.encodeURL(url)

response.encodeRedirectURL(url)


======================================


response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();


HttpSession session = request.getSession();

List<Book> list = (List) session.getAttribute("list");

if(list==null || list.size()==0){

out.write("對不起,您還沒有購買任何商品!!");

return;

}


//顯示用戶買過的商品

out.write("您買過如下商品:<br>");

for(Book book : list){

out.write(book.getName() + "<br/>");

}


======================================


向session存入list

List list = (List) session.getAttribute("list");  //得到用戶用於保存所有書的容器

if(list==null){

list = new ArrayList();

session.setAttribute("list", list);

}

list.add(book);


================== 利用 Session 控制表單重複提交 ==================

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


boolean b = isToken(request);  //判斷用戶是否是重複提交

if(b==true){

System.out.println("請不要重複提交");

return;

}

request.getSession().removeAttribute("token");

System.out.println("處理用戶提交請求!!");

}


private boolean isToken(HttpServletRequest request) {

String client_token = request.getParameter("token");

if(client_token==null){

return true;

}

String server_token = (String) request.getSession().getAttribute("token");

if(server_token==null){

return true;

}

if(!client_token.equals(server_token)){

return true;

}

return false;

}


/負責產生表單

public class FormServlet extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

String token = TokenProccessor.getInstance().makeToken();

request.getSession().setAttribute("token", token);  //在服務器端保存隨機數

out.println("<form action='/day07/servlet/DoFormServlet' method='post'>");

out.write("<input type='hidden' name='token' value='"+token+"'>");

out.println("用戶名:<input type='text' name='username'>");

out.println("<input type='submit' value='提交'>");

out.println("</form>");

}


public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


doGet(request, response);

}

}


class TokenProccessor{

/*

*單態設計模式(保證類的對象在內存中只有一個)

*1、把類的構造函數私有

*2、自己創建一個類的對象

*3、對外提供一個公共的方法,返回類的對象

*/

private TokenProccessor(){}

private static final TokenProccessor instance = new TokenProccessor();

public static TokenProccessor getInstance(){

return instance;

}

public String makeToken(){  //checkException

//  7346734837483  834u938493493849384  43434384

String token = (System.currentTimeMillis() + new Random().nextInt(999999999)) + "";

//數據指紋   128位長   16個字節  md5

try {

MessageDigest md = MessageDigest.getInstance("md5");

byte md5[] =  md.digest(token.getBytes());

//base64編碼--任意二進制編碼明文字符   adfsdfsdfsf

BASE64Encoder encoder = new BASE64Encoder();

return encoder.encode(md5);

} catch (NoSuchAlgorithmException e) {

throw new RuntimeException(e);

}

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章