JSP实现数据传递和保存
回顾
搭建Web开发环境
- 服务器软件:Tomcat
- log目录 日志
- webapps目录 存放web程序 一个个的文件夹
- work目录 JSP文件翻译成的Java文件
- 实现静态网站的部署
- 实现动态网站的部署
初识JSP
- HTML代码(页面显示效果) + Java代码 = JSP页面
- JSP中的Java脚本
- 声明:
<%! %> 可以编写变量声明 方法声明
- 脚本:
<%%> 可以编写变量声明 调用方法等
- 表达式:
<%= %> 可以用于向页面输出内容 能调用有返回值的方法和直接输出一些变量 结尾不能编写;号
- 声明:
- JSP的原理
- 第一次访问此页面时/改动后再次访问
- Tomcat的Jasper组件帮助你将JSP(模板)翻译成对应的Java文件
- 声明 -> Java类的成员位置内容
- 脚本 -> Java类的_jspService()方法内 局部内容
- 表达式 -> Java类的_jspService()方法内一个输出语句
out.print()
out:PrintWriter 可以向浏览器页面进行输出内容 - HTML代码也都通过PrintWriter的write()帮你将页面展示出来
- 对Java文件进行编译
- 正常显示到浏览器上
JSP内置对象
1. 掌握request和response的使用
1.1 request和response的常用API
request:Java EE用于接收和处理请求信息的
- 从请求中根据键取值:String getParamepter(String name);
- 从请求中根据键获取多个值:String[] getParameterValues(String name);
- 页面跳转(请求转发):RequestDispatcher getRequestDispatcher(String path相对地址);
- void forward(request,response);
- 在请求中携带数据:void setAttrbute(String name,Object value); 作用域request可以存储信息,但是此信息只能保证在同一个请求中有效。所以一般在request作用域中存储信息 都会建议使用请求转发来进行页面跳转。
- 在请求中取出携带的数据:Object getAttribute(String name);
- 获取项目的根路径:String getContextPath();
- 例如:localhost:8080/day51-jsp-2/xxxx.jsp 的项目根路径是:day51-jsp-2
response:Java EE用于响应客户端的一个对象
- 页面跳转(重定向):void sendRedirect(String path绝对地址<带有项目根路径>);
1.2 掌握解决请求中文乱码问题
GET请求:
-
先解码再编码 每个都需要这么处理
-
编辑server.xml中的配置 将URL编码更改为UTF-8
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
-
升级到8.0.0版本以后的Tomcat
POST请求:
- 先解码再编码
- request.setCharacterEncoding(“UTF-8”)
1.3 掌握转发和重定向的区别
相同点:都可以实现页面跳转
不同点:
- 请求转发:它是服务器内部的资源跳转,只能跳转到服务器内部的一些页面(资源)
- 请求地址不改变:例如:登录界面 -> 处理登录的页面 -> 转发到其他页面(登录页面) 地址还是处理登录的页面
- 请求转发是一次请求的多次跳转
- 重定向:它是可以跳转到任意的资源地址。 例如你可以用它跳转到百度网站。
- 地址会改变为对应的跳转地址。
- 重定向是开启新的请求,与之前请求无关
联想借钱案例。
2. 掌握session对象的使用
session也是JSP的内置对象之一,其实它是HttpSession的实例。
生命周期: 一次会话是由第一次访问服务器时,Tomcat分配的。只要没有完全关闭浏览器,都是同一个会话。
-
不同浏览器,会话独立。
-
默认从无操作起会话有效期为:30分钟
-
修改全局的web.xml
<!-- ==================== Default Session Configuration ================= --> <!-- You can set the default session timeout (in minutes) for all newly --> <!-- created sessions by modifying the value below. --> <session-config> <session-timeout>30</session-timeout> </session-config>
-
在自己的web.xml中单独修改此信息,优先级会比它的高
-
它表示一次会话,多次请求和响应的过程就是会话。
- void setAttribute(String name,Object obj); 在一次会话中有效存储数据(会话共享数据) session作用域
- Object getAttribute(String name);
- 每一次会话都会有一个会话id,获取会话id:String getId();
- 作废,销毁session:void invalidate();
3. 掌握cookie和session的区别
3.1 Cookie的概述
HTTP协议:是用于请求和响应的一种协议,但是它是无状态的协议。
cookie是浏览器用于在本地存储一些网站状态的。
- 网站打开之后,登录页面就存储着登录用户名
- 本地的搜索记录
- 表单数据
常用API:
- 创建Cookie:Cookie(String name,String value);
- 重新设置值:cookie.setValue(String value);
- 获取键名:String getName();
- 获取值:String getValue();
- 设置有效期:setMaxAge(int seconds); 如果不设置它 cookie是一种会话级的内容,意味着和session一样关闭就消失了。
- 删除Cookie:可以通过setMaxAge(0) 删除 只需要到时候将name相同的Cookie设置后再响应回去就会覆盖
- 设置cookie有效路径:setPath(String path);
- 例如:我们在localhost:8080/smbms/cookie/index.jsp 存储了一个cookie 默认是在/cookie路径下的内容可以取到cookie
向浏览器存储Cookie:
- response的API:addCookie(Cookie cookie);
从浏览器取出Cookie:
- request的API:Cookie[] getCookies();
3.2 Cookie和Session的区别
位置不同:
- Cookie是处于浏览器端
- Session是处于服务器端
安全性不同:
- Cookie由于在浏览器端 所以极其容易被窃取,不安全
- Session是处于服务端 所以获取等不容易 相对比较安全
生命周期不同:
- Session是从客户端第一次请求开始,由服务器分配,当浏览器完全关闭或者无操作超时则销毁
- Cookie是由服务器端响应回来之后才开始生效,默认是会话级的Cookie,但是也可以设置为持久级。
存储值不同:
- Session可以存储Object类型
- Cookie只能存储String类型
Session实际上就是通过Cookie而产生的一种技术,HTTP是无状态协议,无法保存网站和客户端之间的联系,所以我们客户端第一次请求服务器时,服务器就会根据客户端产生一个唯一的session id,并且将其通过cookie的形式缓存到客户端。当下次请求时,客户端会自动将cookie通过请求头传递给服务器,服务器识别到此信息之后找到对应的session内容然后进行其他操作。
4. 掌握application对象的使用
四大作用域:用于在JSP中共享数据
-
page作用域
- 仅在当前页面有效 this
-
request作用域
- 一次请求内,同一个request
-
session作用域
- 一次会话内,同一个session
-
application作用域
- 全局,服务器开启产生 服务器关闭销毁
注:笔记思路来自查老师!!