java 模拟 httpsession_Java中Httpsession是如何实现的?

HTTP协议(http://www.w3.org/Protocols/)是“一次性单向”协议。

服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个HTTP Response给客户端,本次HTTP Request-Response Cycle结束。

我们看到,HTTP协议本身并不能支持服务端保存客户端的状态信息。于是,Web Server中引入了session的概念,用来保存客户端的状态信息。

这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处,HTTP

Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾

客,作为取包凭证(这个号码牌就是Session ID)。顾客(HTTP Request)下一次来的时候,就要把号码牌(Session

ID)交给存包处(Web Server)的管理员。管理员根据号码牌(Session ID)找到相应的柜子(Session),根据顾客(HTTP

Request)的请求,Web Server可以取出、更换、添加柜子(Session)中的物品,Web Server也可以让顾客(HTTP

Request)的号码牌和号码牌对应的柜子(Session)失效。顾客(HTTP Request)的忘性很大,管理员在顾客回去的时候(HTTP

Response)都要重新提醒顾客记住自己的号码牌(Session ID)。这样,顾客(HTTP

Request)下次来的时候,就又带着号码牌回来了。

我们

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己的状态改为 `THINKING`,并打印一些信息,包括哲学家的编号和放下的叉子的编号。接下来,它调用 `test` 函数,以测试是否有其他哲学家可以进餐在 Java ,可以通过实现拦截器(Interceptor)来判断用户是否过期。具体实现步骤如下: 1. 创建一个拦截器类并实现 HandlerInterceptor 接口。 2. 在 preHandle 方法获取当前请求的 HttpSession。最后,它释放信号量 `mutex`,表示它已经放下了叉子。 ```c 对象,并从获取用户信息。 3. 判断用户信息是否存在且是否过期,如果过期则跳转到登录 void put_away_forks(int i) { sem_wait(&mutex); state[i] = THINKING; printf("Philosopher页面,否则放行请求。 以下是一个简单的拦截器示例代码: ``` public class UserInterceptor implements Handler %d puts fork %d and %d down\n", i+1, LEFT+1, i+1); printf("PhilosopherInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); if (user == null || user.isExpired()) { response.sendRedirect %d is thinking\n", i+1); test(LEFT); test(RIGHT); sem_post(&mutex); } ("/login"); return false; } return true; } } ``` 在上面的代码,User 类表示用户 ``` 11. `philosopher` 函数用于模拟每个哲学家的行为。在这个函数,哲信息,isExpired() 方法用于判断用户是否过期。在 preHandle 方法,首先获取 HttpSession 对象,然后学家会不停地重复拿起叉子、进餐和放下叉子的过程。 ```c 从获取用户信息。如果用户信息不存在或已过期,则重定向到登录页面,并返回 false,拦截器会 void *philosopher(void *arg) { while (1) { int *i = arg; grab_forks(*i); 终止请求的继续执行。如果用户信息存在且未过期,则放行请求,返回 true。最后,需要将拦截器注册到 Spring MVC ,以便它能够拦截请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值