1、什么是JSP?
JSP(Java Server Pages):是以Java语言为基础的动态网页开发技术,
特点:
Servlet特点:在Java源码中嵌入html源码
JSP特点:在html源码中嵌入java代码
2、JSP的四大作用域: page、request、session和application
这四大作用域,其实就是其九大内置对象中的四个,为什么说他们也是JSP的四大作用域呢?因为这四个对象都能存储数据,比如request.setAttribute()注意和request.setParameter()区分开来,一个是存储在域中的、一个是请求参数,session.setAttribute()、application其实就是SerlvetContext,自然也有setAttribute()方法。而page作用域的操作就需要依靠pageContext对象来进行了。
(1)page作用域:代表变量只能在当前页面上生效
(2)request:代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B
【1】生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。
【2】HttpServletRequest 请求:
- 获取请求行中的信息:
getMethod() 获取请求方式
getRequestURL() 获取客户端发送请求时的完整的URL
getRequestURI() 获取请求行中的资源名部分
getContextPath() 获取当前应用的虚拟目录
getQueryString() 获取请求行中的参数部分 - 获取请求头中的信息:
String getHeader(String name) 根据头名称 得到头信息值
Enumeration getHeaderName() 得到所有头信息
Enumeration getHeaders(String name)根据头名称 得到信息 - 获取请求正文的信息:
String getParameter(String name)根据表单中name属性名 获取表单项value的值
String[] getParameterValues(String name) 根据表单中的复选框名字 提取值
Map<String,String[]> getParameterMap() 得到表单提交的所有值的方法
Enumeration getParameterNames() 得到表单提交的所有name 的方法
ServletInputStream getInputStream() 以字节流的方式得到所有的表单数据
【3】作用域:request可以在一个请求中共享数据
(3)session:代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。
【1】session的生命周期包括三个阶段:创建、活动、销毁
创建:
当客户端第一次访问某个jsp或者servlet的时候,服务器会为当前会话创建一个SessionId,每次客户端向服务器发送请求时,都会将此sessionId携带过去,服务端会对此sessionId进行校验。
活动:
某次会话当中通过超链接打开的新页面属于同义词会话。
只要当前页面没有全部关闭,重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。
本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet将会创建新的会话。
注意事项:注意原有会话还存在,只是这个旧的SessionID任然存在服务端,只不过再也没有客户端会携带它然后交予服务端校验。
销毁:
Session的销毁:关闭浏览器,更换浏览器,服务器宕机/重启,session默认时间,session手动销毁
session.invalidate();// 销毁当前session
session.removeAttribute(string key);移除session中指定键值
Tomcat默认session超时时间为30分钟。
【2】session重用方法
setAttribute()存储数据
getAttribute() 获取数据
removeAttribute() 移除数据
invalidate() 销毁session
request.getSession()初始化session
(4)application:代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。比如baidu、wenku等共享帐号。
Application 的作用范围在服务器一开始执行服务,到服务器关闭为止。Application 的范围最广,停留的时间也最久,所以使用时要特别注意不然可能会造成服务器负载越来越重的情况。只要将数据存入application对象,数据的范围范围 (Scope) 就为Application。
具有application范围的对象被绑定到javax.servlet.ServletContext中。在Web应用程序运行期间,所有的页面都可以访问在这个范围内的对象。
application对象的主要方法:
1、 getAttribute(String name) return Object
2、 getAttributeNames() return Enumeration
3、 getInitParameter(String name)
4、 getServletInfo()
5、 setAttribute(String name , Object object)
四大作用域的总结
四大作用域:pageContext,request,session,application
对应的类:PageContext,HttpServletRequest,HttpSession,ServletContext
如果一个数据只在当前jsp页面使用,可以使用pageContext域存储
如果一个数据,除了在当前Servlet中使用,还要在请求转发时带到其他Servlet处理或jsp中显示,这个时候用request域
如果一个数据,除了现在我自己要用,过一会我自己还要用,存在session域
如果一个数据,除了现在我自己要用过一会其他人也要用,存在ServletContext域中