JSP总结文章目录JSP总结一.jsp工作原理和生命周期二.jsp内置对象三.incude指令和include行为四.jsp作用域五.cookie和session一.jsp工作原理和生命周期工作原理执行过程以hello.jsp为例把 hello.jsp转译为hello_jsp.javahello_jsp.java 位于d:\tomcat\work\Catalina\localhost_\org\apache\jsphello_jsp.java是一个servlet把hello_jsp.java编译为hello_jsp.class执行hello_jsp生成html通过http协议把html 响应返回给浏览器生命周期二.jsp内置对象JSP有9个内置对象request封装客户端的请求其中包含来自GET或POST请求的参数response封装服务器对客户端的响应pageContext通过该对象可以获取其他对象session封装用户会话的对象application封装服务器运行环境的对象out输出服务器响应的输出流对象configWeb应用的配置对象pageJSP页面本身相当于Java程序中的thisexception封装页面抛出异常的对象。参考博客JSP九大内置对象七大动作三大指令三.incude指令和include行为include指令JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分会被同时编译执行。 语法格式如下% include file文件相对 url 地址 %include动作jsp:include动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下jsp:include page相对 URL 地址 flushtrue /还是不懂举个例子通过前面知道JSP最后会被转译成Servlet,假如在一个hello.jsp中引入另外一个foot.jsp页面如果是指令include%include filefooter.jsp %footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中最后只会生成一个hello_jsp.java文件footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中最后只会生成一个hello_jsp.java文件如果是动作includejsp:include pagefooter.jsp /footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中还会有一个footer_jsp.java独立存在。hello_jsp.java 会在服务端访问footer_jsp.java,然后把返回的结果嵌入到响应中。footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中还会有一个footer_jsp.java独立存在。 hello_jsp.java 会在服务端访问footer_jsp.java,然后把返回的结果嵌入到响应中。四.jsp作用域JSP有4个作用域分别是pageContext当前页面通过pageContext.setAttribute(key,value)的数据只能在当前页面访问在其他页面就不能访问了。requestContext一次请求常用写法是request.setAttribute(name,fjh);request.getAttribute(name)sessionContext当前会话sessionContext 指的是会话从一个用户所以页面间传递数据也是可以通过session传递的。与requestContext类似的也可以用如下方式来做pageContext.setAttribute(name,gareen,pageContext.SESSION_SCOPE);pageContext.getAttribute(name,pageContext.SESSION_SCOPE)applicationContext全局所有用户共享applicationContext 指的是全局代表与整个Web应用程序相关的对象和属性它实质上是跨越整个Web应用程序包括多个页面、请求和会话的一个全局作用域在JSP中使用application对象 application对象是也可以通过 request.getServletContext()来获取。application映射的就是web应用本身。ServletContext接口的实例所以 application request.getServletContext() 会返回true与requestContext类似的也可以用如下方式来做pageContext.setAttribute(name,fjh,pageContext.APPLICATION_SCOPE);pageContext.getAttribute(name,pageContext.APPLICATION_SCOPE)五.cookie和sessioncookie的运用场景有的网站登陆的时候会有记住密码选项一周内或者一个月内保持登陆状态。如果你选了那么一周之内都不需要再输入账号密码。这个功能就是靠cookie来实现的什么是cookieCookie是一种浏览器和服务器交互数据的方式。Cookie是由服务器端创建但是不会保存在服务器。创建好之后发送给浏览器。浏览器保存在用户本地。下一次访问网站的时候就会把该Cookie发送给服务器。创建cookie:Cookie c new Cookie(“name”, “fjh”);创建一个cookie,名字是name 值是fjhc.setMaxAge(24 * 60 * 60);表示这个cookie可以保留一天如果是0表示浏览器一关闭就销毁c.setPath(/);Path表示访问服务器的所有应用都会提交这个cookie到服务端如果其值是 /a, 那么就表示仅仅访问 /a 路径的时候才会提交 cookieresponse.addCookie©;通过response把这个cookie保存在浏览器端获取cookie:Cookie[] cookies request.getCookies();什么是session?Session对应的中文翻译是会话。会话指的是从用户打开浏览器访问一个网站开始无论在这个网站中访问了多少页面点击了多少链接都属于同一个会话。 直到该用户关闭浏览器为止都属于同一个会话考虑这个场景fjh到健身房去练胸肌首先领了钥匙然后进了更衣间把衣服裤子手机钱包都放在盒子里面。plw也到健身房去练翘臀。首先领了钥匙然后 进了更衣间把衣服裤子手机《Java 21天从入门到精通》也放在了一个盒子里但是这个盒子是和fjh的是不同的。健身房就相当于服务器盒子就是会话Session。切换到我们常见的购物网站的场景plw登陆天猫之后在购物车里看到的物品是蜡烛和皮鞭fjh登陆天猫之后在购物车里看到的物品是手铐和《Java 21天从入门到精通》是不是很清楚了cookie和session又有什么关系获取区别呢ookie 和 Session都是用来跟踪浏览器用户身份的会话方式但是两者的应用场景不太一样。Cookie 一般用来保存用户信息比如①我们在 Cookie 中保存已经登录过得用户信息下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑重新登录一般要将 Token 重写)③登录一次网站后访问网站其他页面不需要重新登录。Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车当你要添加商品到购物车的时候系统不知道是哪个用户操作的因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。Cookie 数据保存在客户端(浏览器端)Session 数据保存在服务器端。Cookie 存储在客户端中而Session存储在服务器上相对来说 Session 安全性更高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。回到健身房的储物柜这一段fjh和plw都有自己的盒子那么他们怎么知道哪个盒子是自己的呢通过钥匙就能找到自己的盒子了。盒子对应服务器上的Session。钥匙对应浏览器上的Cookie摘引how2j