Como usar o HTTPSession para implementar os registros de acesso QQ em Java, este artigo revela as respostas para você. O conteúdo específico é o seguinte
1. Escreva classe de dados espaciais QQ (qqs.java)
classe pública qqs {private static linkedhashmap <inteiro, string> qqs = new LinkedHashMap <Integer, string> (); estático {qqs.put (10001, "Zhang San"); qqs.put (10002, "li si"); qqs.put (10003, "Wang Wu"); qqs.put (10004, "Zhao Liu"); qqs.put (10005, "Tian Qi"); qqs.put (10006, "Jiao BA"); qqs.put (10007, "hou jiu"); qqs.put (10008, "liu shi"); qqs.put (10009, "xiao er"); } public static LinkedHashMap <Inteiro, String> getqqs () {return qqs; }}2. Escreva uma página de dados QQ reais e histórico de navegação (listServlet.java)
public void Doget (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {// obtenha o objeto de sessão httpSession session = request.getSession (); // Defina a resposta de dados chineses.Setcharacterencoding ("UTF-8"); Response.setContentType ("Texto/html; charset = utf-8"); // Obtenha o fluxo de saída PrintWriter out = Response.getWriter (); // obtém dados QQs LinkedHashMap <Integer, String> qqs = qqs.getqqs (); Set <pap.entry <Inteiro, string >> set = qqs.entrySet (); Iterator <map.entry <inteiro, string >> it = set.iterator (); // Estrutura da página de saída out.println ("<html> <head> <title> qq list </title> <ylem> a {margin-right: 20px;} </style> </head> <body>"); out.println ("<hr/> <br/>"); out.println ("<h3> qq list </h3>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); out.println ("<hr/> <br/>"); // Faça o hiperlink do espaço QQ enquanto (it.hasnext ()) {map.entry <Integer, string> entradas = it.next (); Inteiro num = Entry.getKey (); Nome da string = entrada.getValue (); out.println ("<a href =/"/Day08/store? num = "+num+"/">"+name+"</a>"); } // Saída navegou informações de registro out.println ("<hr/> <br/>"); out.println ("<H3> QQ Histórico de navegação </h3>"); out.println ("<hr/> <br/>"); // Obtenha o registro de acesso ao registro histórico de string de dados = (string) session.getAttribute ("histórico"); if (history == null) {out.println ("<font color =/" vermelho/"> desculpe, não há registro de acesso no momento ... </font>"); } else {// loop através dos dados de registro acessados pelo usuário string [] nums = history.split (","); para (string num: nums) {string name = qqs.getqqs (). get (integer.parseint (num)); out.println (nome+","); }} // feche a estrutura da página out.println ("</body> </html>"); }3. Escreva uma página que armazena o espaço QQ de navegação (StoreqqServlet.java)
public void Doget (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {// obtenha o objeto de sessão httpSession session = request.getSession (false); // Obtenha o parâmetro de solicitação string num = request.getParameter ("num"); // Obtenha os dados na sessão String History = (String) session.getAttribute ("History"); // determinar os dados se (histórico == null) {// primeiro visite session.setattribute ("histórico", num); // History = 10001} else {// Visite múltiplo session.setAttribute ("History", History+","+num); // Defina o número de NUMs e a ordem da String de Display [] qqs = history.split (","); // converte uma matriz em uma coleção que seja conveniente para a lista de operação <String> list = Arrays.asList (qqs); // Converta Lista para LinkedList para facilitar a operação de dados LinkedList <String> Linked_List = new LinkedList <String> (); linked_list.addall (list); // determinar o número de qqs que aparecem se (qqs.length <3) {if (linked_list.contains (num)) {// history = 10002.1003 // se vinculado_list.remove (num); linked_list.addfirst (num); } else {// history = 1004.10002.1003 // se vinculada_list.addfirst (num); }} else {//> = 3 if (linked_list.contains (num)) {// history = 10002,10003,10004 10004 // se vinculado_list.remove (num); linked_list.addfirst (num); } else {// history = 10005, 10002.10003 // não inclui linked_list.removelast (); linked_list.addfirst (num); }} // Os registros de acesso com bons tempos e pedidos são vinculados_list stringbuffer sb = new StringBuffer (); for (string new_num: linked_list) {sb.append (new_num+","); } String new_history = sb.toString (); session.setAttribute ("History", new_history); } // redireciona para QQ List Page Response.sendRedirect ("/Day08/List"); }O código acima armazena o histórico de navegação do usuário no objeto da sessão, mas o objeto está na memória do servidor e possui um prazo válido. Se chegar a hora, a sessão será destruída.
O tempo padrão é de meia hora (30 minutos).
4. Configure o horário válido da sessão
No web.xml de cada site, você pode configurar o horário válido do objeto de sessão criado pelo site. Observe que a unidade está minutos ao configurar.
Thread.slessp (unidades de milissegundos), cookie.setMaxage (segundas unidades), sessão (unidades minuciosas)
<Session-Config> <session-timeout> 2 </session-timeout> unidade é minutos </session-config>
5 Desative os cookies
Os cookies podem usar o cliente para armazenar dados da sessão.
O HTTPSession pode usar cookies para armazenar informações de sessão.
De fato, nas configurações do navegador, você pode rejeitar as informações de cookies enviadas de volta pelo site.
Neste momento, o acesso aos casos acima fará com que uma exceção de ponteiro nulo ocorra. Se você precisar consertar o site, deve usar a tecnologia UrLrewriting.
Urlrewriteting
Analise as causas dos problemas acima:
O servidor criou um objeto de sessão, mas como o navegador proíbe a recepção dos cookies, o servidor não pode enviar o valor de identificação da sessão criada para o navegador na forma do cabeçalho de resposta do conjunto de cookie para armazenamento, para que o ID da sessão não seja diminuído durante a segunda visita, para que a sessão não possa ser encontrada.
Métodos comuns
String codteredirectUturl (string url) Adicione informações de sessão ao Redirect Path String Encodeurl (URL da String) Adicione Informações da SessionID ao endereço URL normal
Princípios de implementação:
"Recode todos os endereços de URL na página usando o método acima"
1 Modifique o programa acima
1 listServlet.java
String Path = "/Day08/Store? Num ="+num; caminho = resposta.encodeurl (caminho); out.println ("<a href = '"+path+"'>"+nome+"</a>");2. StoreqqServlet.java
String Path = "/Day08/List"; PATH = Response.EncodedirectURL (Path); Response.SendRedirect (Path);
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.