- Cookie.
当一个客户端浏览器,第一次访问服务器端的web应用时,此时客户端没有带任何cookie给服务器,此时服务器会自动发送一个名字叫”jsessionid”的cookie给客户端,进而保存在客户端的硬盘上! 当浏览器第二次访问同一个web应用时,会自动带着这个cookie去访问服务器的!
Jsessionid这个cookie并没有保存在客户端硬盘上,而是保存在内存中,当浏览器关闭,则这个Jsessionid也就释放了空间。
除了jsessionid这个cookie, 服务器还可以发送其他cookie.
如果不设置cookie的存活时间,那么cookie就默认在内存里,浏览器关闭,cookie就消失
- 在IE浏览器中查看缓冲的cookie
Ie下C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Cookies - Cookie的运作方式,我们知道了,有啥用?
Cookie可以存放客户端的帐号,密码,从而用户下次登录时,不用再次填写帐号密码了!就是保存账号密码。
<body>
<%
Cookie cookie[]=request.getCookies();
String username=null;
String password=null;
if(cookie!=null){
for(Cookie c:cookie){
if("username".equals(c.getName())){
username=c.getValue();
}else if("password".equals(c.getName())){
password=c.getValue();
}
}
}
%>
<form action="yan.jsp">
username:<input name="username" value="<%=username==null?"":username%>" /><br>
password:<input name="password" value="<%=password==null?"":password%>"/><br>
<input <%=username==null?"":"checked" %> type="checkbox" name="save" value="save">记住账号密码<br>
<button>登陆</button>
</form>
</body>
账号密码提交到验证段=端
<body>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
String save = request.getParameter("save");
if(save != null) {
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
c1.setMaxAge(60*60*24*30); //单位是秒
c2.setMaxAge(60*60*24*30);
response.addCookie(c1);
response.addCookie(c2);
} else {
Cookie c1 = new Cookie("username", username);
Cookie c2 = new Cookie("password", password);
c1.setMaxAge(0);
c2.setMaxAge(0);
response.addCookie(c1);
response.addCookie(c2);
}
%>
欢迎<%=username %>登录
</body>
- Jsp四大范围
- 1.pageContext页面范围
setAttribute 设置属性
getAttribute 在页面范围获取属性。
findAttribute() * 重点。从小到大,依次在4个范围中寻找
<%
// pageContext.setAttribute("a", "书包");
// request.setAttribute("a", "钱包");
// session.setAttribute("a", "豆包");
application.setAttribute("a", "豆沙包");
%>
<%-- 从小到大,依次在4个范围中寻找! --%>
<%=pageContext.findAttribute("a") %><br />
pageContext可以获取其他8个内置对象!
- request对象:
setAttribute
getAttribute 是在请求范围中添加属性。
如何延长请求范围到下一个jsp页面? 通过转发! - Session对象
setAttribute
getAttribute是在会话范围中添加属性。
<body>
<%
// 会话的起始时间,单位是毫秒,自1970 1 1 0 0 0开始
long creationTime = session.getCreationTime();
// 上次访问会话时间,单位是毫秒,自1970 1 1 0 0 0开始
long last = session.getLastAccessedTime();
// 当前系统时间
long now = System.currentTimeMillis();
// 会话闲置时间
long lapse = now - last;
// 会话存活时间
long live = now - creationTime;
%>
会话id: <%=session.getId() %><br />
会话是不是新会话: <%=session.isNew() %><br />
会话开始于: <%= new Date(creationTime).toLocaleString() %><br />
上次访问会话:<%= new Date(last).toLocaleString() %><br />
当前系统时间:<%= new Date(now).toLocaleString() %><br />
会话闲置时间:<%= lapse / 1000.0 %>秒<br />
会话存活时间: <%= live / 1000.0 /60 %>分钟<br />
销毁会话
<%
session.invalidate();
%>
</body>
我们一般说会话结束了是关闭浏览器让会话结束,但是服务器端依然保留着会话cookie,这样别人可以通过拼接地址栏访问你的页面,所以这样不安全,销毁会话就是销毁服务器端的cookie。也就是我们常说的安全退出
会话追踪的4种方式
转发
Cookie
Session
拼接url地址
- application.
setAttribute
getAttribute是在服务器范围中添加属性。Application中的数据是被所有用户共享的! - 在web.xml中配置了 web应用的参数
在web.xml中配置了参数后,要重启服务,然后通过下面方式获取对应的数据
<%=application.getInitParameter("123") %>
<%=application.getInitParameter("456") %>
<%=application.getInitParameter("789") %>
- Application也能获取web应用在服务器端电脑上的真实路径
<%String str=request.getRealPath("/");
String str1=application.getRealPath("/");
%>
<%=str %><br>
<%=str1 %>
Page:
其实就是this,代表当前servlet对象
config:
可以用它,获取servlet的配置信息。
- Servlet快速起步
其实jsp就是servlet,写的jsp最终被翻译为java源文件,又被编译为class字节码文件。这个字节码就是servlet.
Jsp的出现,是为了简化编程的难度,最早,是没有jsp的,只有servlet,开发人员发现,用servlet给客户端响应一个页面,太麻烦,太复杂,太不适合了!所以后来就把jsp和servlet分开来,jsp做数据展示,servlet做数据传递
- 制作一个servlet:
其实servlet就是一个java类,只不过这个类继承了GenericServlet。
写完这个类之后,还要在web.xml中配置该servlet,配置之后需要重启服务。
<servlet>
<servlet-name>ServletDemo</servlet-name>//这个名字随便起
<servlet-class>com.z.zoo.ServletDemo</servlet-class>//这个类名一定要带包
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>//和上面一样
<url-pattern>/ServletDemo</url-pattern>//按照这个路径访问
</servlet-mapping>
访问时,要用url-pattern访问。
http://localhost:8080/Server/ServletDemo
当客户端第一次请求servlet时,servlet诞生,一旦诞生,就立刻调用init完成初始化。
一直驻留在内存中,以供响应其他的请求,每次请求该servlet时,都会调用service方法。
直到卸载web应用时,就会调用servlet的destroy方法。
- 现在,别在servlet中调用System.out了,而是给请求他的客户端响应html代码!
问题来了,既然servlet响应页面这么麻烦,那么干脆只使用jsp得了,大家都别用servlet了 !
Servlet的地位不可取代,经过长期的发展,人们渐渐发现,servlet适合处理数据,而jsp适合显示数据,由此,分工明确:
1、jsp专门负责收集用户数据(表单),负责显示数据(div+css美化页面)
2、Servlet专门负责处理数据,并把处理好的数据给jsp,让jsp去显示。(通过转发的方式。)
- 案例:servlet收集数据,jsp处理数据,在页面上显示
1,先做一个javabean,列出数据
2,写servlet
3,在xml里面配参数
4,写jsp:
5,效果: