-
jsp概念:Java Server Page Java 服务页面。
特点:即能写HTML CSS JS 他还能写 Java代码。
作用:简化页面的书写。
jsp的本质是servlet。
-
在jsp上使用特定的语法编写java的代码
早期脚本(不推荐大量使用) 1.<%----%> 注释 2.<%! %> java代码的成员位置 3.<% %> 在servlet的service的方法中(在后台展示) 4.<%="abc"%> 生成的代码在 prinlt("abc")(在前台展示)
存放的java和.class文件在开启服务器后的提示:
-
刷新头(三秒跳转)
案例2-当我们登录失败,提示"用户名密码不匹配",3秒以后跳转到登录页面 技术分析: 定时刷新 常见的响应头-refresh 响应头格式: refresh:秒数;url=跳转的路径 设置响应头: response.setHeader(String key,String value);设置字符串形式的响应头 response.addHeader(String key,String value);追加响应头, 若之前设置设置过这个头,则追加;若没有设置过,则设置 设置定时刷新: response.setHeader("refresh","3;url=/day0901/login.htm"); 步骤分析: 登录失败之后,修改业务逻辑 打印之后添加一个头信息即可
-
会话技术:解决客户端和服务端的数据共享问题,因为http协议是一种无状态协议(不会记录上次访问的记录),所以通过会话数据,实现多次数据的共享。
-
会话:***是服务器与客户端浏览器之间建立起来的一次通信,在这一个通信中实现一次或者多次请求或者响应,实现服务器和客服端的数据之间的共享。***
-
客户端会话技术(cookie):将数据保存在浏览器(服务端),可以减轻服务器的压力,数据不安全
-
原理:浏览器第一次请求服务器,服务器第一次响应会给一个set-cookie头+数据,把数据交给浏览器保存,浏览器第二次请求服务器,会带上数据通过cookie请求头带给服务器,服务器端可以取数据出来用。
-
代码展示:
第一个servlet给浏览器客户端发一个cookie的数据public class cookieServlet1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建cookie Cookie cookie = new Cookie("key", "value"); //发送cookie response.addCookie(cookie); }
第二个servlet获取浏览器客户端中的cookie中的数据
@WebServlet(name = "CookieServlet2",value = "/demo2") public class CookieServlet2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); //判断cookie是否为空 if (cookies != null) { //遍历cookies数组 for (Cookie cookie : cookies) { //获取cookie的键 String name = cookie.getName(); //判断cookie的键 if (name.equalsIgnoreCase("key")){ //获取cookie中的数据 String value = cookie.getValue(); System.out.println(value); } } } }
-
cookie的注意事项:
-
持久性问题:默认情况下,cookie中的数据是保存在浏览器的缓存中,浏览器关闭时,内存释放,cookie中的数据就没有了,处理方法:设置cookie保存数据的事件
在客户端设置存放cookie的时间 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建cookie Cookie cookie = new Cookie("key", "value"); //设置cookie存活的时间,以秒为单位 cookie.setMaxAge(60*60);//这是存放一小时 //-1是默认值,直接保存在客户端,0是清除cookie,不允许存放cookie cookie.setMaxAge(-1/0) //在请求头中添加cookie response.addCookie(cookie); }
清除cookie
代码展示:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置与客户端的数据要一致 Cookie cookie = new Cookie("key", "value"); //设置cookie存放的时间为0 cookie.setMaxAge(0); //发送回去 response.addCookie(cookie); }
-
不能跨浏览器进行操作
-
cookie以前不支持中文,现在cookie可以直接存储中文,不需要进行编解码的操作
get请求中有提交的方式是通过(URLdecoder解码,URLencoder编码)public class Demo { public static void main(String[] args) throws UnsupportedEncodingException { String name="张三"; //编码,参1为需要编码的字符串,参2为编码规则 String bmname = URLEncoder.encode(name, "utf-8"); System.out.println(bmname); //解码,参1为需要解码的字符串,参2为编码规则 String jmname = URLDecoder.decode(bmname, "utf-8"); System.out.println(jmname); } }
-
-
-
服务端会话技术(Session):将数据存放在服务端(数据有保障,但会增加服务器的压力)
-
将数据存储在服务器端
-
原理:session依赖于cookie存在
-
Java实现Session:
//1.获取session
HttpSession session = request.getSession();
//2.存储数据
session.setAttribute(“msg”, “hehe”);
//3.获取数据
Object msg = session.getAttribute(“msg”); -
session细节:
-
浏览器关闭了,session不一样了。
-
Cookie没了。jsessionid没了。
-
服务器关闭了,session一样吗?不一样。内存释放了。
优化:虽然对象不一样了,但是session中存储的数据还是一样的
- 钝化:服务器正常关闭后,session对象被写入硬盘的文件中
- 活化:服务器开启后,将文件还原为内存的session对象
-
-
session的生命周期
- 创建:
request.getSession():
会根据jsessionid值查找是否存在sesison对象,如果没找到,则创建新的session - 销毁:
- 服务器关闭
- session超时
- invalidate() :session自杀,处理安全退出。
- 创建:
-
-
-
<session-config>
<session-timeout>30</session-timeout>
</session-config>
3.如果客户端禁用了 cookie,session该如何自处?
客户端禁用了cookie,session将不一样。
URL重写:http://localhost:8080/day09/s1;jsessionid=731DED0DC4F0AA06CDBB815733D4043E
PrintWriter pw = response.getWriter();
HttpSession session = request.getSession();
String id = session.getId();
String href = "/day09/s1";
href = response.encodeRedirectURL(href);
System.out.println(href);
pw.write("<a href='"+href+"'>s1</a>");
4.获取session:
getSession():会根据jsessionid值查找是否存在sesison对象,如果没找到,则创建新的session
getSession(boolean flag):
true:默认值,会根id值查找是否存在sesison对象,如果没找到,则创建新的session
false:会根据jsessionid值查找是否存在sesison对象,如果没找到,则返回null