一、JSP概念:JSP(Java Servlet Page)
- 运行在服务器中
- 将java代码嵌套在html中 JSP视图
- 将HTML代码嵌套在java代码中 java/class视图
二、JSP运行原理
- 将JSP编写好后,并将项目(web应用)部署到tomcat容器中,然后启动tomcat,
jsp文件就出现在webapps/项目名中(未编译) - 当用户第一次访问这个jsp页面,这时这个jsp页面才会翻译成java文件,
在编译成class文件,接着运行class文件在tomcat服务器 - 这个JSP页面会一直存在于服务器内存中,后面的多次用户请求,都是访问这个JSP对象(没有重新翻译/编译/运行)
- 用户访问时,如果这个JSP的内容发生了改变,JSP会重新进行翻译,编译和运行
- 服务器关闭后,JSP翻译的java和class文件会保存(一次编译到处运行)
三、JSP与Servlet关系
- servlet与JSP是同一种类型,只是servlet主要负责后台处理,jsp主要负责界面展示
四、JSP的语法
- 指令 <%@ %>
page页面设置
import导包
include引入其他页面 - 小脚本 <% %>
小脚本包含的java代码,出现在service方法中 - 声明 <%! %>
声明的java的代码,出现在类中,可以定义属性和方法 - 表达式 <%= %>
调用out.ptint()方法,一般用于显示动态数据 - 注释 <%-- --%>
客户端界面无法查看(F12开发者模式也无法查看) - < !-- -->
客户端界面无法查看(F12开发者模式可以看到)
五.JSP的四大作用域
- page 当前页面
- request 一次请求中
- session 一次会话中
- session与cookie的区别与联系
- application 一个Web应用(全局)
六.JSP的九大内置对象
out | 输出到客户端的流 | PrintWriter |
request | 来自于客户端的请求对象 | HttpServletRequest |
response | 响应给客户端的对象 | HttpServletResponse |
session | 会话(服务器端) | HttpSession |
application | 全局/整个应用/上下文 | ServletContext |
config | 当前页面的配置对象 | ServletConfig |
page | 当前页面 | |
exception | 异常 | |
pageContext | 页面的上下文 |
七.请求对象 request
- request:接受/处理来自客户端的请求
- 核心方法:
getParameter(“name”) | String | 单个值 |
getParameterValues(“name”) | String[] | 多个name(多选) |
获取session/获取客户端的信息/设置参数的编码
获取方式:doDel/doUpdate
- get 默认get方式
- 浏览器的地址栏可以看到URL和参数
- 长度有限,只支持字符串信息 1KB作用
- post
- 浏览器的地址栏可见URL,不可见参数
开发者模式下,notwork的form data可见 - 长度无限制,支持任何类型
- get/post使用场景:
- get
- 商品/文档/博客的搜索
- 路径的跳转
- post
- 安全性高的跳转(后台/管理者页面)
- 文件上传只能使用post方法
- 页面跳转与数据传递
- 页面跳转:
- request的转发技术
request.getRequestDispacher(“跳转的页面路径”).forward(); - response的重定向
response.sendRedirect(“跳转的页面路径”); - response的头文件
- 数据传递(两个jsp页面的数据交互)
- 转发技术
(1)setAttribute(String,Object);/getAttribute(String)
(2)getParameter(String);
上一次请求的参数或自定义URL参数
URL?参数1=值1&参数2=值2 - 重定向技术
session对象‘
(1)setAttribute(String,Object)/getAttribute(String)
(2)request.getParameter(String);
URL?参数1=值1,&参数2=值2
- 重定向与转发的对比:
- 转发不会改变URL的路径(路径不变)
重定向会改变URL的路径(路径改变) - 转发是在同一个请求对象中处理数据(一次请求)
重定向是在第二个请求对象中处理数据(两次请求) - 转发在本项目中进行处理(本项目中)
重定向可以在本项目和其他项目中进行处理(任何项目)
八、会话session与cookie
- session的概念:浏览器与服务器的一次会话
- 注意:
(1)一个版本的浏览器是一个客户端(使用sessionId去识别)
(2)一次会话必须是连续的请求(时效性) - 常用方法
(1)setAttribute(String,Object); 存放用户信息
(2)getAttribute(String); 获取session中的用户信息
(3)getId():String 返回当前会话的id(唯一标识符)
(4)setMaxInactiveInterval(int 秒); 最大有效时间(等待时间)
(5)removeAttribute(String) 删除seesion中的用户信息
(6)invalidate() session清除(session信息全部清除,id消失) - 生命周期
(1)当浏览器向服务器发起第一次请求时,服务器会创建sessionId,
并且在服务器创建一个指定的内存分配给该用户,
将sessionId通过response响应对象带回客户端浏览器储存
(2)当浏览器向服务器发起之后的请求时,
会通过request携带sessionId(JSESSIONID=id号)
服务器通过这个sessionId,去调用对应的存储信息给用户
(3)会话超时/主动清除/服务器重启关闭/
客户端浏览器关闭(客户端JSESSIONID丢失),
服务器会重新分配sessionId给客户端浏览器 - cookie
cookie:存储于客户端浏览器的持久化文件(一串字符信息)
key1=value1;key2=value2;…
使用cookie:
(1)存储方式 response.addCookie(cookie);
(2)遍历cookie request.getCookies:Cookie[] - session与cookie的对比
session cookie
①存储位置 服务器 客户端
②存储形式 缓存 文件
③存储容量 理论没限制 很小几KB
④禁用 无法限制 通过浏览器设置禁用
⑤使用场景 用户信息(安全要求高) 用户的个人偏好设置(账号和密码进行加密处理MD5/Base64/UUID)
九.application全局上下文
application:代表整个web应用,作用于整个web应用,
一个web应用只存在一个application
使用application:
- set/getAttribute(String,Object) 属性值
- set/getInitParameter(String) 初始化参数
十、四大作用域的区别
page | request | session | application | |
---|---|---|---|---|
创建的时机 | 被第一次访问时 | 每次被请求时 | 每次会话 | web应用被Tomcat加载时 |
销毁的时机 | 被移除/服务器关闭 | 请求被响应后 | 会话的结束 | web应用被移除时或关闭时 |
作用范围 | 当前页面 | 一次请求中 | 一次会话中 | 一个web应用中 |
使用场景 | 当前页面被访问数 | 需要转发的数据 | 跨页面访问数据 | 跨会话访问用户信息 |
十一.EL表达式
作用:简化java表达式,取代<%= %>,避免语法嵌套混淆,阅读麻烦的问题
语法:
${作用域.属性名.属性} 或 ${作用域.属性名[属性]}
原理:
1.只能从四大作用域去取值 (getAttribute())
2.当没有指明作用域的时候(从作用域的pageContext -> request --> session --> application)
依次去找,找到马上返回,没有返回null;
简化的地方:
1.实体类不需要导包(自动import需要使用的类)
2.渠道的对象自动转换类型(强制类型转换)
3.通过 . 或 [] 自动回去对应的属性(getXX())
内置对象:
- pageScope 页面作用域
- requestScope 请求作用域
- essionScope 会话作用域
- aooicationScope 全局作用域
- param URL参数