每个客户端都在请求服务器,此时会产生同时操作同一份资源的问题,线程不安全.解决方案是采用Struts2(不是唯一的),具体的操作,百度一下.
使用cookie:
在service方法中使用cookie,从请求对象上面获得cookie,如果有则遍历添加到响应对象上面,如果没有则将一个key-value添加到响应对象上面.此时就会反馈给服务器cookie了,对应的请求头是Set-Cookie,可使用谷歌浏览器查看请求头响应信息等.Cookie是客户端技术,如果cookie中使用中文,需要使用编解码 A) String en = URLEncoder.encode(msg, "utf-8");B)解码en = URLDecoder.decode(en, "utf-8"); 设置cookie的时间 cookie.setMaxAge(int seconds),cookie会保存在浏览器中,在隐私设置中(自行查阅).
获取cookie,设置cookieCookie的共享:
Cookie的path是在同一主机中指定共享Cookie,如果主机不同那么就一定不能共享Cookie,无论path是什么。如果希望不同的二级域名中可以共享Cookie,那么就要设置Cookie的domain和path了。例如:music.baidu.com、map.baidu.com、tieba.baidu.com,它们的域名不同,但百度希望它们之间可以共享Cookie,那么就要设置domain了。解决方案:
1). 设置Cookie的path为“/”,例如:cookie.setPath("/");在整个baidu.com中都能传递.
2). 设置Cookie的domain,例如:cookie.setDomain(".baidu.com"),其中domain中没有指定域名前缀!
浏览器在没有请求过一个服务器时,是没有cookie的,请求之后,服务器向里面添加cookie一般为用户名字等内容,此时的浏览器的响应头的"cookie"键为Set-Cookie,浏览器再向此服务器请求,就带上这个cookie,此时的请求头的"cookie"键为Cookie.cookie保存在客户端,由服务器创建.cookie可以保存长时间.
使用session:
Session 对象存储特定用户会话所需的属性及配置信息,session是一个特殊的cookie,当浏览器开始请求时,服务器没有这个session,创建一个,将session通过Set-cookie键返回给浏览器,浏览器再次请求服务器使用请求头cookie : jsessionid="session地址"给服务器,服务器根据这个寻找session.当浏览器关闭时/时间超过多少秒的时候,session失效,下次请求,则又创建一个新的session.
使用如下API即可:HttpSession session = req.getSession();System.out.println(session.getId());
session.setAttribute("username", username);session.getAttribute("username");具体操作请看API,都很简单明了.
URL重写.
Session是一种特殊的Cookie,而浏览器可以禁用Cookie,当浏览器禁用时.
此时,需要在每一个资源之后,手动的携带session的ID.
/session/list;jsessionid=872870F9466CE7B3A11FD3B768FDD684
String url = response.encodeURL("/session/list");自动的在资源之后拼接;jsessionid=872870F9466CE7B3A11FD3B768FDD684
注意:开发中都不会取消接受Cookie的.
Web组件之间的跳转方式:1)请求转发(forward).2)URL重定向(redirect).3)请求包含(include).
1: 请求转发(forward).
request.getRequestDispatcher(String path).forward(request,response);
1:在浏览器中输入一个网址,此网址请求走的流程是Java后台的一个类,但是此类转发给了另外一个类,由另外一个类进行处理,大家当做多态处理就好了(这种多态在开发中现象应该很普遍).
2:请求转发只发送一个请求.
3:共享同一个请求中的数据.
4:最终响应给浏览器的由Servlet2来决定.
5:请求转发不能跨域访问,只能跳转到当前应用中的资源.
6:请求转发可以访问WEB-INF目录中的资源.
浏览器请求进入Java后台类1,转发给类2,可以给这个请求后面跟参数,GET请求 由类2对这个请求做处理,浏览器中请求的地址不是s2,写的是s12: URL重定向(redirect).
3:请求包含(include).
request.getRequestDispatcher(String path).forward(request,response);
网友评论