Learn jsp+session+cookie
JSP本质上是一个Servlet,JSP主要负责与用户交互,将最终界面呈现给用户。
当服务器接收到一个后缀是jsp的请求时,将该请求将给jsp引擎去处理,每一个jsp页面第一次访问的时候,jsp引擎会将它翻译成一个Servlet文件,再由web容器调用Servlet完成响应。
一、JSP在HTML中嵌入JAVA程序
1、JSP脚本,执行java逻辑代码
1 | <% java代码 %> |
2、JSP声明:定义java方法
1 | <%! |
3、JSP表达式:把java对象直接输出到HTML页面中
1 | <%=Java变量%> |
4、示例1
1 | <%! |
5、示例2
com.huan.entity.User
1 | package com.huan.entity; |
index.jsp
1 | <%@ page import="com.sun.xml.internal.messaging.saaj.packaging.mime.util.LineInputStream" %> |
二、JSP内置对象(9个)
1、request:表示一次请求,HttpServletRuquest
2、response:表示一次响应,HttpservletResponse
3、pageContext:页面上下文,获取页面信息,PageContext
4、session:表示一次会话,保存用户信息,HttpSession
5、application:表示当前的Web应用,全局对象,保存所有用户共享信息,ServletContext
6、config:当前jsp对应的Servlet的ServletConfig对象,获取当前Servlet信息
7、out:向浏览器输出数据,JspWriter
8、page:当前jsp对应的Servlet对象,Servlet
9、exception:表示JSP页面产生的异常,Exception
request常用方法:
1、String getParameter(String key)获取客户端传来的参数。
1 | String name = servletRequest.getParameter("name"); |
2、void setAttribute(String key,Object value)通过键值对形式来保存数据。
3、Object getAttribute(String key)通过key取出value。(服务器内部获取,通过getRequestDispatcher传输)
1 | //将请求存入到request中 |
4、RequestDispatcher getRequestDispatcher(String path) 返回一个RequestDispatcher对象,该对象forward方法用于请求转发。
5、String[] getParameterValues(String key)获取客户端传来的多个同名参数。
6、void setCharacterEncoding(“UTF-8”)指定请求的编码。
response常用方法:
1、response.sendRedirect(String path) 重定向方法
转发getRequestDispatcher和重定向sendRedirect区别:
转发是将同一个请求转发给下一个页面;重定向是创建一个新的请求传给下一个页面,之前的请求结束生命周期。
转发:同一个请求在服务器之间传递,地址栏不变,也叫服务器跳转。
重定向:由客户端发送一次新的请求来访问跳转后的目标资源,地址栏改变,也叫客户端跳转。
如果两个页面之间需要通过request来传值,则必须使用转发,不能使用重定向。
举例:用户登录,如果用户名和密码正确,则跳转到首页(转发),并且展示用户名,否则重新回到登录页面(重定向)。
login.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
check.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
welcom.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
三、session
用户会话:服务器无法识别每一次HTTP请求来自哪个终端,它只会接收到一个请求信号,所以存在服务器将用户的响应发送给其他人,必须有一种技术来实现让服务器识别请求具体来自哪一个终端,这就是会话技术。
会话:就是客户端和服务器之间发生的一系列连续的请求和响应的过程,打开浏览器进行操作到关闭浏览器的过程。
会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。
实现会话有两种方式:
- session(服务器端)
- cookie(客户端)
属于同一次会话请求都有一个相同的标识符,sessionID
session常用方法:
1、String getId() 获取当前sessionID
2、void setMaxInactiveInterval(int interval) 设置session失效时间,单位为秒
3、int getMaxInactiveInterval() 获取当前session的失效时间
4、void invalidate() 设置session立即失效,一般退出登录场景使用
5、void setAttribute(String,Object) 通过键值对的形式来存储数据
6、Object getAttribute(String key) 通过键获取对应的数据
7、void removeAttribyite(String key) 通过键值移除对应的数据
简单登录验证逻辑实现
web.xml
1 | <servlet> |
LoginServlet.java
1 | package com.huan.servlet; |
LogoutServlet.java
1 | package com.huan.servlet; |
login.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
welcome.jsp
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
四、cookie
Cookie是服务端在HTTP响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了某个Cookie,在之后请求和响应过程中,会将此cookie来回传递,这样就可以通过Cookie这个载体完成客户端和服务端的数据交互。
- 创建Cookie
1 | Cookie cookie = new Cookie("name","张三"); |
- 读取Cokie
1 | Cookie[] cookies = request.getCookies(); |
Cookie常用方法
1、void setMaxAge(int age) 设置Cookie的有效时间,单位为秒
2、int getMaxAge() 获取Cookie有效时间
3、String getName() 获取Cookie的name
4、String getValue() 获取Cookie的vlaue
session和Cookie的区别:
session:
1、保存在服务器
2、保存的数据是Object
3、会随着会话的结束而销毁
4、保存重要的信息(密码)
cookie:
1、保存在浏览器
2、保存的数据是文本
3、可以长期保存在浏览器,与会话无关,默认关闭浏览器销毁
4、保存不重要的信息(因为可以从本地浏览器安装路径获取,造成信息泄露,视频观看记录,上次看到位置通过Cookie存储,下次打开直接定位播放)
五、JSP内置对象的作用域
page、request、session、appllication
1、page:只在当前页面有效。–>pageContext
2、request:在一次请求内有效(通过转发可以生效,重定向不可以,不关闭浏览器重新发起请求也不可以)。–>request
3、session:在一次会话内有效(浏览器不关闭都生效,转发,重定向)。–>session
4、application:对整个web应用生效。–>application
六、网站访问量统计实例
1 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> |
注:如果服务器关闭,则application作用域失效,下次重启服务器会从1开始计数,要解决只需将count存入数据库即可,从数据库获取