JSP
- 概念:java server pages : java服务器端页面
- 可以理解为:一个特殊的页面,其中既有html标签,又有java代码
- 作用:用于简化书写
- 原理:一个java类如果想被外界访问到,他必须是一个servlet,jsp本质也是一个servlet
- jsp就是一个已经写好很多html标签的servlet,帮助简化了很多书写。
- JSP的脚本:JSP定义java代码的方式,就是<% %>内部的才是代码,外面的都是html元素
- <% 代码 %>:定义的java代码,在service方法中。可以定义很多东西,即service中可以定义什么,这个脚本中就可以写什么。
- <%! 代码 %>:该类标签定义的java代码,在jsp转换后的java类的成员位置。(用的非常少,servlet尽量不定义成员变量)
- <%= 代码 %>:定义的java代码会直接输出到页面上,等号后面直接是输出的内容或者变量
- JSP的内置对象
- 定义:在jsp页面中不需要获取和创建,可以直接使用的对象,例如request这种
- jsp一共有9个内置对象
- request
- response
- out:字符输出流对象,可以将数据输出到页面上。和response.getWriter( )类似
- 二者区别:out定义在什么位置就在什么位置输出,response.getWriter()都会先输出
- 原因:tomcat服务真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。response.getWriter()数据输出永远在out.write()之前。
- 尽量不用respons.getWriter() 用out.write( );
- JSP实例:改造刚才到cookie实例
Session
-
概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
-
入门:
-
获取HttpSession对象:
HttpSession session = request.getSession();
- Object getAttribute(String name)
- void setAttribute(String name , Object value)
- void removeAttribute(String name)
-
-
原理:Session的实现依赖于cookie
- 创建session:此时是没有cookie的,在内存中创建session时会得到一个唯一的id
- 响应:此时会在响应头的set-cookie:JSEESIONID 中存放刚才唯一的id
- 再次请求:此时request里面带着刚次sessionID的cookie,可以匹配到内存中的session
-
session细节:
-
当客户端关闭后,服务器不关闭,两次获取的session是否是同一个?答:不是
- 默认情况下不是。
- 解决:期望客户端关闭后,session也能相同
// 期望客户端关闭后,session也能相同 Cookie cookie = new Cookie("JSESSIONID",session.getId()); cookie.setMaxAge(60*60*24); response.addCookie(cookie);
-
客户端不关闭,服务器关闭后,两次获取的session是否是同一个? 答:不是
- 虽然对象不是同一个,但是要确保数据不丢失
- session的钝化:
- 在服务器正常关闭之前,将session对象序列化到硬盘文件上
- session的活化:
- 服务器启动后,将session文件转化为内存中的session对象即可
- 以上两件事tomcat可以自动完成了,但是IDEA不行。
-
session的失效时间(什么时候被销毁)
- 服务器关闭
- session对象调用invalidata( ),进行自杀
- session默认失效时间是30分钟(可以选择性配置 -> tomcat web.xml里面配置 )
<Session-config> <session-timeout>30</session-timeout> </Session-config>
-
session特点
- session用于存储一次会话的多次请求间的数据
- 可以存储任意类型,任意大小的数据(cookie只能是字符串)
- 与cookie的区别:
- session在服务器端,cookie在客户端
- session没有数据大小限制,cookie有
- session数据安全,cookie相对不够安全
-
session案例:验证码
- 需求:
- 访问带有验证码的登录页面login.jsp
- 用户输入用户名密码以及验证码。
- 如果用户名有错,跳转登录页面,提示:用户名密码错误
- 如果验证码有错,跳转登录页面,提示:验证码错误
- 全部正确,则跳转到主页success.jsp,显示:用户欢迎您
- 分析:
- 完成页面编写,用户名、密码、验证码、登录按钮
- 完成验证码编写,同时生成验证码之后存入session,以便进行共享
- 比较验证码:
- 正确:
- 判断用户名密码是否正确:
- 正确:
- 记录session,登录状态,存储用户信息
- 重定向到success.jsp
- 错误:
- request存储错误信息
- 转发到登录界面
- 正确:
- 判断用户名密码是否正确:
- 错误:
- 存储提示信息到request
- 转发到登录页面
- 正确:
- 需求:
-