2023/7/31 java复习笔记(JSP内置对象+Cookie技术+过滤器)

文章详细介绍了JSP中的内置对象,包括JspWriter、HttpServletRequest、HttpServletResponse、HttpSession和ServletContext的生命周期。同时,阐述了Cookie在客户端数据存储的应用,展示了创建和读取Cookie的示例。此外,还讲解了Filter的概念,提供了创建过滤器的代码示例,以及ServletContext在共享数据方面的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JSP常用内置对象生命周期

在jsp中直接可以用<%//Java代码%>直接使用的某些类的实例化对象。他们主要负责在一定域内进行数据沟通,并对应着servlet的service方法的局部变量。

1、out:JspWriter

JspWriter和HttpWriter共同继承于Writer类,属于字符输出流。主要用于直接在页面内输出数据。

2、request:HttpServletRequest

用于服务器向客户端传递数据,并作为请求数据的参数。

生命周期

服务器接收到请求时由服务器创建;服务器返回数据后由服务器销毁。仅存在于一次数据请求和响应中。

3、response:HttpServletResponse

生命周期

服务器接收到请求时由服务器创建;服务器返回数据后由服务器销毁。仅存在于一次数据请求和响应中。

4、session:HttpSession

生命周期

同一次浏览器与服务器的会话(从浏览器请求某个站点到浏览器完全关闭)范围内存在。当前浏览器的窗口内可访问,窗口关闭后销毁。

5、application:

生命周期

服务器开启时创建,服务器关闭时销毁。

二、Cookie将数据放在客户端的技术

未登陆账号的用户需要做一些操作时可以使用cookie将数据保存在客户端本地,待登陆后再同步到服务器。

1、创建方式及响应展示

@WebServlet("/setCookie")
public class SetCookieServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //打印响应日志
        System.out.println("SetCookieServlet.service");
        //服务器构造cookie对象
        Cookie cookie = new Cookie("ppp","呸呸呸");
        //将构造好的cookie对象回复到客户端
        resp.addCookie(cookie);
    }
}

向服务器发送请求
cookie保存在本地

2、服务器同步Cookie

@WebServlet("/getCookie")
public class GetCookieServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求编码格式
        req.setCharacterEncoding("utf-8");
        //打印日志
        System.out.println("GetCookieServlet.service");
        //接收Cookie
        Cookie[] cookies = req.getCookies();
        //遍历打印
        PrintWriter out = resp.getWriter();
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName()+":"+cookie.getValue());
            out.println(cookie.getName()+":"+cookie.getValue());
        }
    }
}

服务器接收井打印Cookie

3、cookie生命周期

(1)默认情况下关闭浏览器Cookie就删除。
(2)也可以通过成员方法自定义生命周期
cookie.setMaxAge(10*60);//保存十分钟
参数小于零属于默认情况
参数等于零是立即删除自己和所有同名cookie

三、Filter web项目的过滤器

创建示例

/*
* 1、定义过滤器名字:filterName = "encoding"
* 2、指定拦截路径:urlPatterns = "/*"
* 当前拦截路径是所有路径
* */
@WebFilter(filterName = "encoding" , urlPatterns = "/*")
public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("EncodingFilter.init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("EncodingFilter.doFilter");

        /*
        * 判断当次请求是否满足当前页面要求的必备条件:
        * 比如账号登陆、是否完成缴费……
        * */

        //满足条件的放行语句
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("EncodingFilter.destory");
    }
}

四、ServletContext共享类

与服务器的启动同在,是所有用户都可以访问的数据域对象。可以用来做公共聊天室。

//set
@WebServlet("/setServletContext")
public class SetServletContext extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        servletContext.setAttribute("name","木无表情");
        HttpSession session = req.getSession();
        PrintWriter out = resp.getWriter();
        User user = (User) session.getAttribute("user");
        out.println(user.getName());
    }
}
//get
@WebServlet("/getServletContext")
public class GetServletContext extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        HttpSession session = req.getSession();
        PrintWriter out = resp.getWriter();
        User user = (User) session.getAttribute("user");
        out.println("ServletContext:"+servletContext.getAttribute("name"));
        out.println("当前用户名:"+user.getName());
    }
}

ServletContext演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flww*星火燎原

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值