最新JavaWeb 学习笔记总结(三)(2),已获千赞

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!




本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

例如:

创建一个CookieDemo1,用来发送cookie给客户端。

package com.cookie;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(“/cookieDemo1”)

public class CookieDemo1 extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//1.创建Cookie对象

Cookie cookie = new Cookie(“msg”,“hello”);

//2.发送Cookie

resp.addCookie(cookie);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp);

}

}

在创建一个CookieDemo2,用来测试接受客户端发送过来的cookie。

package com.cookie;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(“/cookieDemo2”)

public class CookieDemo2 extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//3.获取Cookie

Cookie[] cookies = req.getCookies();

//根据数据,遍历Cookies

if(cookies != null) {

for(Cookie c:cookies) {

String name = c.getName();

String value = c.getValue();

System.out.println(name+“:”+value);

}

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp);

}

}

我们访问/cookieDemo1,再访问/cookieDemo2,就发现内容已经被打印,返回了cookie名和值,因为处在同一会话中,客户端已经存储了cookie值。

请添加图片描述

3. Cookie 原理分析

============================================================================


在这里插入图片描述

服务器端向客户端发送cookie,通过响应头的set-cookie:key=value来发送。

客户端向服务端发送cookie,通过请求头的cookie:key=value来发送。

在这里插入图片描述

4. cookie的细节处理

============================================================================

4.1 一次发送多个cookie



发送多个cookie,那就多调动addCookie方法来呗。

package com.cookie;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(“/cookieDemo1”)

public class CookieDemo1 extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

Cookie cookie1 = new Cookie(“msg”,“hello”);

Cookie cookie2 = new Cookie(“name”,“zhangsan”);

//可以发送多个cookie

resp.addCookie(cookie1);

resp.addCookie(cookie2);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp);

}

}

4.2 Cookie 存活时间



默认情况下,当浏览器关闭后,Cookie数据被销毁。

当然,我们可以持久化存储cookie: 通过setMaxAge(int seconds) 方法。

setMaxAge(int seconds):

  • 正数:将Cookie数据写到硬盘的文件中。持久化存储。cookie存活时间。

  • 负数:负数就代表默认值。

  • 零:服务器端想要删除客户端的cookie信息,就定义为零,就删除cookie信息。

package com.cookie;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet(“/cookieDemo1”)

public class CookieDemo1 extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

Cookie cookie1 = new Cookie(“msg”,“hello”);

//将Cookie数据写到硬盘的文件中,30秒之内会删除cookie

//cookie1.setMaxAge(30);

//默认

//cookie1.setMaxAge(-1);

//删除cookie信息

cookie1.setMaxAge(0);

resp.addCookie(cookie1);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp);

}

}

4.3 cookie 能不能存储中文?



tomcat 8之前,cookie是不能支持存储中文数据的。

  • 那么tomcat 8之前,我们一般采用url编码或base64编码来存储中文进行发送。

tomcat 8之后,cookie支持中文数据。

4.4 cookie 的范围



一个tomcat服务器,部署了多个web项目,那么这些web项目中的cookie能不能共享?

默认情况下,cookie是不能共享的。

setPath(String path): 设置cookie的范围取值。默认情况下,设置当前的虚拟目录。

如果要共享,则可以将path设置为" / "(范围大一点),就是http://localhost:8080/ ,以后的路径,都可以共享这个cookie。


不同的tomcat服务器cookie共享问题?

setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享。

setDomain(“.baidu.com”) , 那么tieba.baidu.com和new.baidu.com中cookie可以共享。

5. Cookie的特点和作用

=============================================================================


cookie的特点:

  • cookie存储数据在客户端浏览器。

  • 浏览器对于单个cookie的大小有限制(4kb)以及对同一个域名下的总cookie数量也有限制(一般20个)。


cookie的作用:

  • cookie一般用于存储少量的不太敏感的数据。

  • 在不登录的情况下,完成服务器对客户端的身份识别。

在这里插入图片描述

6. Session 会话

===========================================================================


Session就是一个接口(HttpSession)。

Session就是会话。它是用来维护一个客户端和服务器之间关联的一种技术。

每个客户端都有自己的一个Session会话。

Session会话中,我们经常用来保存用户登录之后的信息,是在服务器端的。

7.如何创建Session?

===========================================================================


在Servlet中,我们有request这样的api参数。

因此,我们直接可以使用request.getSession()方法来创建。

主要注意第一次调用是:创建Session会话,以后调用便是获取第一次创建的Session会话了。

如果我们想要判断当前的Session是不是刚刚创建出来的,官方给出了一个isNew()的方法,来判断是不是刚刚创建出来的Session。


每个Session会话都有一个id值,这个id是唯一的!

通过getId()方法来得到Session的会话id值。

package com.test.day02;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

@WebServlet(value=“/session1”)

public class HttpSessionTest extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

//创建session会话,一个会话只会创建一次,往后调用都只调用该会话一次。

HttpSession session = req.getSession();

//session.isNew()方法:判断是不是刚刚创建的session会话

boolean new1 = session.isNew();

System.out.println(new1);

String id = session.getId();

System.out.println(id);

System.out.println();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp);

}

}

在这里插入图片描述

8. Session 域对象存储数据

================================================================================


既然存域对象数据,肯定调用setAttribute()方法啥的。

package com.test.day02;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

@WebServlet(value=“/session1”)

public class HttpSessionTest extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

//创建session会话,一个会话只会创建一次,往后调用都只调用该会话一次。

HttpSession session = req.getSession();

session.setAttribute(“key1”, “value1”);

Object attribute = session.getAttribute(“key1”);

System.out.println();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp);

}

}

9. Session 生命周期控制

===============================================================================


设置Session的超时时长,超过指定的时长,Session就会被销毁。这里是以秒为单位的

session.setMaxInactiveInterval(1000);


获取Session的超时时长,如果设置超时时长它是有默认时长的(默认时长为1800秒,也就是30分钟,这个是可以修改的可以去tomcat服务器web.xml去配置默认时长)。

int maxInactiveInterval = session.getMaxInactiveInterval();

tomcat默认session超时时长的web.xml配置:

在这里插入图片描述

在服务端,如果session在规定的超时时间内,还没有接受到该session的请求,一旦超时它就会被删除。

如果在超时时间内接受到请求了,那么超时时长就会重新计时,原理就这么简单。

再就是如果超时时长设置为负数,那么它就永远不超时。


还有一个invalidate()方法,该方法作用就是让当前session会话马上超时无效。

package com.test.day02;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

@WebServlet(value=“/session1”)

public class HttpSessionTest extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

//创建session会话,一个会话只会创建一次,往后调用都只调用该会话一次。

HttpSession session = req.getSession();

//session.isNew()方法:判断是不是刚刚创建的session会话

boolean new1 = session.isNew();

System.out.println(new1);

String id = session.getId();

System.out.println(id);

session.setAttribute(“key1”, “value1”);

Object attribute = session.getAttribute(“key1”);

//设置Session的超时时长,超过指定的时长,Session就会被销毁。这里是以秒为单位的

//session.setMaxInactiveInterval(1000);

//获取Session的超时时长,如果设置超时时长它是有默认时长的(默认时长为1800秒,也就是30分钟,这个是可以修改的可以去tomcat服务器web.xml去配置默认时长)。

int maxInactiveInterval = session.getMaxInactiveInterval();

//让session会话,立刻超时!

session.invalidate();

resp.getWriter().write(“session已经被设置为超时了”);

System.out.println();

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doGet(req, resp);

}

}

10. Session 和 浏览器 之间有什么关联

=======================================================================================


在这里插入图片描述

其实,服务器端第一次创建session对象时,它会创建一个cookie对象,对象的键为:JSESSIONID,值为:新创建出来的Session的id值。

换句话说,session技术,底层其实是基于cookie技术来实现的。

11. Filter 过滤器

============================================================================


Filter过滤器是JavaWeb的三大组件之一。

Filter过滤器它是JavaEE的规范,也就是接口。

Filter过滤器的作用就是: 拦截请求,过滤响应。

常见操作:

  • 自动登录

  • 统一设置编码格式

  • 访问权限控制

  • 敏感字符过滤等。

12. Filter 的使用

============================================================================


步骤:

  • 1.定义一个类,实现接口Filter(javax.servlet.Filter下的)。

  • 2.重写方法。

  • 3.配置拦截路径。

一次请求中,要经过两次过滤拦截,进来时,过滤一次;发送响应数据过滤一次。

简单注解使用:

package com.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;

//注解用法 , " /* "访问所有资源都要执行该过滤器。

@WebFilter(“/*”)

public class FilterDemo01 implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

}

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

System.out.println(“Filter被执行了”);

// 放行操作

chain.doFilter(request, response);

//这一步骤的意思就是,如果不执行这句活,客户端访问我们的前端页面是访问不到任何内容的,因为被拦截了

}

@Override

public void destroy() {

}

}

13. Filter 的web配置

===============================================================================


过滤器的web.xml配置和Servlet配置差不多的:

<?xml version="1.0" encoding="UTF-8"?>

FilterTest02

com.filter.FilterTest02

FilterTest02

/*

14. Filter 生命周期

=============================================================================


过滤器执行流程:

  • 执行过滤器

  • 执行放行后的资源。

  • 回来执行过滤器放行代码下边的代码。

理解一个请求中,经过两次过滤拦截:

在这里插入图片描述


过滤器的生命周期:

  • init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次,用于加载资源。

  • doFilter:每一次请求被拦截时,doFilter方法就会被执行,被执行多次。

  • destroy:在服务器关闭后,Filter对选哪个被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次,用于释放资源。

package com.filter;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.annotation.WebFilter;

@WebFilter(“/*”)

public class FilterTest03 implements Filter{

//在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次,用于加载资源。

@Override

public void init(FilterConfig filterConfig) throws ServletException {

System.out.println(“init…”);

}

//每一次请求被拦截时,doFilter就会被执行,被执行多次。

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

System.out.println(“doFilter…”);

}

//在服务器关闭后,Filter对选哪个被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次,用于释放资源。

@Override

public void destroy() {

System.out.println(“destroy…”);

}

}

15. Filter 拦截路径的配置

================================================================================


拦截路径配置:

  • 具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行。

  • 拦截目录:/test/* 方位/test下的所有资源时,过滤器都会被执行。

  • 后缀名拦截:*.jsp 访问所有资源时,过滤器都会被执行。

  • 拦截所有资源:/* 访问所有资源时,过滤器都会被执行。

16. Filter 拦截方式的配置

================================================================================

16.1 Filter 注解拦截配置



注解配置:

设置dispatcherTypes属性。

  • request:默认值。浏览器直接请求资源。

  • forward:抓发访问资源。

  • include:包含访问资源。

  • error:错误跳转。

  • async:异步访问资源。(sync:同步,async:异步)


dispatcherTypes = DispatcherType.REQUEST;

浏览器直接请求资源index.jsp时,该过滤器会被执行,像那些请求抓发的操作就不会执行。

在这里插入图片描述


dispatcherTypes = DispatcherType.FORWARD;

只有请求抓发访问index.jsp时,该过滤器才会被执行。

在这里插入图片描述

请求访问和转发都想被filter拦截处理,那就用数组方式来解决。

在这里插入图片描述

16.2 web.xml 配置 和 ServletRequest



web.xml 配置:

在这里插入图片描述

doFilter方法中的ServletRequest,一般使用的时候一定强转为HttpServletRequest,因为多数方法都在HttpServletRequest中。

在这里插入图片描述

17. 过滤器链(配置多个过滤器)

===============================================================================


过滤器还是照常拦截过滤的,主要是顺序需要注意!

首先,先按照顺序执行web.xml配置的过滤器;之后按照字典顺序(0~9, az),就是按照09或a~z的顺序来对注解排顺序。

在这里插入图片描述

请求时按照上面顺序来,服务器响应数据经过过滤器时,恰好反着来。

在这里插入图片描述

18. JSON

======================================================================

18.1 json 定义



JSON(JavaScirpt Object Notation)是一种轻量级的数据交换格式。

轻量级指的是跟xml作比较,很轻量。

数据交换指的是客户端和服务器之间业务数据的传递格式。


**json定义:

json是由键值对组成,并且由花括号(大括号)包围,键和值之间使用冒号进行分割,多组键值对之间进行逗号进行分割。**

json就是一个对象。

Title

18.2 json的两个常用方法



JSON存在两种形式:

  • 一种是对象的形式存在,叫做json对象。

  • 一种是字符串的形式存在,叫做json字符串。

因此,对应两种方法进行转换:

  • JSON.stringify():把json对象转换成为json字符串。

  • JSON.parse():把json字符串转换为json对象。

一般我们要操作json中的数据的时候,需要json对象的格式。

一般我们要在客户端和服务器之间进行数据交换的时候,使用json字符串。

18.3 服务器端如何使用JSON?


18.3.1 JavaBean 和 json 的互传


javaBean 和 Json 的转换:

  • 1.导入gson的jar包(去maven下载)。

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

json是由键值对组成,并且由花括号(大括号)包围,键和值之间使用冒号进行分割,多组键值对之间进行逗号进行分割。**

json就是一个对象。

Title

18.2 json的两个常用方法



JSON存在两种形式:

  • 一种是对象的形式存在,叫做json对象。

  • 一种是字符串的形式存在,叫做json字符串。

因此,对应两种方法进行转换:

  • JSON.stringify():把json对象转换成为json字符串。

  • JSON.parse():把json字符串转换为json对象。

一般我们要操作json中的数据的时候,需要json对象的格式。

一般我们要在客户端和服务器之间进行数据交换的时候,使用json字符串。

18.3 服务器端如何使用JSON?


18.3.1 JavaBean 和 json 的互传


javaBean 和 Json 的转换:

  • 1.导入gson的jar包(去maven下载)。

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值