java四大会话技术

未经作者允许,不得转载

第一cookie技术

常用方法:

  • new Cookie(),构造一个cookie
  • getName() ,获取cookie的名字
  • getValue () ,取到具体cookie的值
  • setMaxAge(), 设置cookie过期时间 单位为秒
  • getpath() ,取cookie路径

    -需要注意的地方:

    setMaxAge();当值为0时,即为删除本地cookie文件

    还要注意cookie文件path路径必须一致

    代码事例:
package myCookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns = "/mycookie")
public class myCookieDemo extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// super.doGet(req, resp);
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// super.doPost(req, resp);
// 通用设置页面编码
resp.setContentType("text/html;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
// 控制文字输出流
PrintWriter writer = resp.getWriter();
Cookie[] cookies = req.getCookies();
if (cookies != null) {
writer.write("您上次访问的时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookie.getName().equals("lasttime")) {
String value = cookie.getValue();
Date date = new Date(Long.parseLong(value));
writer.println("cookie的路径"+cookie.getPath());
writer.println(date.toString());
}
} } else {
writer.print("欢迎第一次访问本页面!");
}
//向系统增加cookie
Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");
//让session由内存写入到硬盘中 单位时间为 s秒 一天 60*60*24
cookie.setMaxAge(20);
resp.addCookie(cookie);
} }

java四大会话技术

  • 设置中文编码问题
  • -

    //cookie中采用中文编码问题 Urlencoder处理
new Cookie("username", URLEncoder.encode("亮剑精神", "UTF-8"));
///解码
URLEncoder.encode("cookie[i].getValue()", "UTF-8");

地址重写

应用方向:在浏览器不允许使用cookie时,那么就可以采用这个办法进行地址的重写

重要方法:resp.encodeURL 之前必须初始化会话 getSession()

注:浏览器默认会使用含有cookie的办法使用 代码测试很多次数没有成功,必须关闭浏览器cookie设置

package Urlencode;

import java.io.IOException;
import java.io.PrintWriter; 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(urlPatterns="/myencode")
public class myEncode extends HttpServlet{ @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// super.doGet(req, resp);
doPost(req, resp);
} @SuppressWarnings("deprecation")
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//super.doPost(req, resp);
resp.setContentType("text/html;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter writer = resp.getWriter();
//必须手动初始化回话
req.getSession();
String str = resp.encodeURL("/SessionTchCookies/index.jsp");
String str2 = resp.encodeURL("/SessionTchCookies/error.jsp");
String url = resp.encodeRedirectURL("/SessionTchCookies/index.jsp"); writer.print("<a href='" + url + "'>购买</a><br/>");
writer.print("<a href='" + str2 + "'>结账</a>");
writer.close(); } }

java四大会话技术


关于重写技术在很多框架都有实现

  • struts2 <html:rewrite action='logout'/> html:rewrite
  • 类似的还有 <html:link/> <html:from />

  • jstl中 :<c:url /> 来进行地址重写


表单隐藏技术的实现

5.表单隐藏域
<form action="" method="">
相关的表单控件... <input type="hidden" name="参数名1" value="参数值1"/>
...
<input type="hidden" name="jsessionid" value="xxxxx"/>
<input type="hidden" name="参数名n" value="参数值n"/>
</form>

会话的实现

充电类:httpservletsession . getSession() 取得会话对象

setAttribute(“属性名”,”属性值”) 根据属性名设值

getAttribute(“属性名”) 根据属性名 获取对应的值

removeAttribute(“属性名”) 根据属性名删除

getId():获取Session唯一的ID

invalidate():使HttpSession对象失效

setMaxInactiveInterval(时间):设置Session过期时间,单位是秒

getCreationTime():获取HttpSession对象创建时间

getLastAccessedTime():获取HttpSession最近一次请求时间

<%@ page language="Java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>??</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
首页
<%
out.print("会话是isnew"+session.isNew());
out.print(session.getCreationTime());
/* 设置会话的过期时间 在控制的时候建设
方法1:可以在多个页面进行传值控制 set** get***
方法2:可以在设置一个相对时间比较长的值 然后在不同的页面进行时间属性的更新
*/
session.setMaxInactiveInterval(60);
//手动控制使session过期
session.invalidate(); %>
</body>
</html>
上一篇:随手记今天跟的几个iOS项目代码的问题


下一篇:C# 创建Windows服务。服务功能:定时操作数据库 (转)