Session:
Cookie本身是有大小和数量限制的(保存到客户端),Session保存在服务器端(SessionID通过cookie传到服务器端,读取的时候通过cookie去取,然后通过SessionID打开空间,本身是基于cookie实现的).
获得Session
request.getSession();
Session也是域对象
何时创建:服务器端第一次调用getSession()时创建
何时销毁:关浏览器Session没有销毁(关浏览器cookie销毁了,再次打开浏览器的时候SessionId的cookie被销毁
所以服务端会创建一个新的SessionID)
1.Session过期了,默认过期时间30分钟(tomcat中可以设置 conf\web.xml <session-config><seesion-timeout>标签)
2.非正常关闭服务器terminate,如果正常关闭(stop the server)会序列化存储到硬盘
3.销毁调用Session.invalidate();
作用范围:多次请求(一次会话)
用Session保存用户登陆数据,在登陆成功后给Session赋值
request.getSession().setAttribute("existUser", existUser);
要需要登陆才能访问的页面上 获取名为existUser的全局变量,并做出响应的判断
用Seesion做验证码
1.生成验证码
2.将生成验证码的随机的四个字符保存到Session里面.
3.输入验证码提交后与Session里面的验证码做比较.
4.将Session中保存的验证码清空.
5.抗锯齿
JSP:
数据库中存放了很多商品信息,将商品信息显示到jsp
1.什么是jsp(java service page java服务器页面)
JSP=HTML+Java代码
JSP的脚本
<%! %> 成员内容:可以定义变量,类,方法 ,存在线程安全
<% %> 翻译成service方法内部,类,变量,java代码
<%= %> Service方法中的out.print()
JSP会被编译成Servlet,然后生成Class文件
JSP的注释(了解):
可以写 HTML的注释<!-- -->,
java代码<%//,/*+enter,/**+enter %>的注释(必须在<%%>内),
JSP的注释<%-----%>只存在于jsp的源代码中,在翻译成Servlet后,JSP的注释就会清除除掉
JSP的指令:
指令的语法:
1.<%@ 指令名称 属性名称="属性值" ....%>
2.page,include,taglib
3.JSP的 page指令:<%@ page%> 设置jsp
page指令:
1.language:JSP脚本中使用的语言.现在至呢个写java
(重要) 2.<%@page contentType="text/html;charset=UTF-8"%> 设置浏览器打开JSP的时候默认字符集的编码
(重要) <%@page pageEncoding="UTF-8"%> 用来设置文件保存到本地硬盘,已经生成Servlet后保存到硬盘的编码(默认是GBK的)
(重要) <%@page import="com.blue.domain.User"%> import 导入java的包,可以出现多次,在jsp中用ALT+/导包
extends:设置jsp被翻译成Servlet类后继承的类,默认值是org.apache.jasper.runtime.HttpJspBase
如果要修改,那么这个类必须是HttpServlet的子类或者HttpServlet.
auotoFlash:设置JSP的缓存自动刷出,默认为true
buffer:设置JSP的缓存大小,默认8kb ,这两个参数一般不做修改.
session:设置在jsp中是否可以直接使用session对象,默认是可以直接使用的
isELIgnored:设置在JSP中是否忽略 EL表达式,默认false,不忽略
EL: ${ 表达式 }
errorPage: 如果出错以后要取跳转的页面,isErrorPage,false,不显示异常信息,true显示错误信息
isErrorPage:一起使用设置友好页面,
(重要)通常会设置一个全局的友好页面,在web.xml中设置
errorPage优先度高于全局
<error-Page>标签
<error-code>404</error-code>
<location>404.jsp<location>
</error-Page>
<error-Page>标签
<error-code>500</error-code>
<location>500.jsp<location>
</error-Page>
include指令:用来指示JSP去包含其他页面.
把相同的内容提取到一个页面,在用的时候包含该页面.可以节省代码.
叫静态包含
<% include file="相对路径" %>
taglib指令:
指示JSP引入标签库
<%@ taglib url="标签库的路径" prefix="标签的别名"%>
(重要)JSP的内置对象:
JSP九大内置对象(相当于变量名): 真实类型 常用方法
request HttpServletRequest getParameter(),setAttribute();
response HttpServletResponse setHeader(),sendRedirect();getOutputStream();getWriter()
session HttpSession setAttribute();getAttribute();
application ServletContext setAttribute();getAttribute();
page Object toString();equals();wait();
pageContext PageContext setAttribute();getAttribute();
config ServletConfig getServletName();getServletContext();
out JspWriter write(),print()
exception Throwable getMessage(),getCause(); 需要设置isErrorPage 为true
page内置对象 Object,就是JSP编译成Servlet后的类的引用
page中没有setAttribute ,可以通过pageContext在page域中存数据
out内置对象 out和response.getwriter()不是同一个对象
out真实对象是JspWriter
response.getwriter()真实对象是printWriter
JspWriter缓冲区的内容会先!追加!(添加到后面)到response(PrintWriter)缓冲区中,
由PrintWriter汇总后再拿到页面显示
因此response.getwriter()中的内容会优先显示
但是response.getwriter().println中的内容在运行的时候会直接被拿到jsp的最顶端(最上面)
jsp中的标签也是进入JspWriter缓冲区
<%= %>相当于out
(重点)pageContext内置对象
主要由2个功能
1.通过该对象获得其他八个内置对象.编写通用性代码或者框架的时候
pageContext.getRequest();
pageContext.getResponse();
....
2.可以向jsp的四个域中存取数据.
四个域: 四个域的有效范围 使用哪个对象存取数据 真实对象
PageScope 当前页面 pageContext pageContext
RequestScope 一次请求范围 Request HttpServletRequest
SessionScope 一次会话范围 Session HttpSession
ApplicationScope 应用范围(整个工程就是ServletContext) Application ServletContext
pageContext中的setAttribute(String s,Object o,int c)方法有一个重载 其中int是域,是一个常量值,用pageContext.PAGE_SCOPE
getAttribute也有一个类似的重载
c 为pageContext.PAGE_SCOPE时该方法等价于
pageContext.setAttribute(String s,Object o)
pageContext中还有一个findAttribute()方法,用来查找值,从4个域中获取
顺序时从PageScope-RequestScope-SessionScope-ApplicationScope
JSP的动作标签:
用于简化代码编写:
<jsp:forword page="url"/>用于页面的转发
<jsp:include/>用于页面的动态包含,动态包含与静态包含的区别:<%@include%> <jsp:include>
<%@include%>相当于代码的copy,拿完之后会一块翻译(只会翻译成一个Servlet)
<%@include file="xxx.xx"%>
<jsp:include>会生成多个Class并执行,把每个页面执行的结果 拼在一起(只拼接了显示出来的页面,如果各个页面中包含单独的<%%>将不会被执行)
<jsp:include page="xx.xx">
<jsp:param/> 用于带路径的标签下传递参数,通常与 <jsp:forword page="url"/>一起使用
<jsp:useBean/>在jsp中使用javaBean
<jsp:useBean id="对象名" class="类的全路径" scope="page">
如果page中没有就new一个对象放到page,如果有就直接用
</jsp:useBean>
<jsp:setProperty/>在jsp中设置javaBean
<jsp:setProperty property="成员变量名" name="对象名"/>
<jsp:setProperty property="*" name="对象名"/>给所有成员变量赋值
<jsp.getProperty/>在jsp中获取javaBean
|
|