【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JSP 中的内置对象:request、response、session 的使用示例

时间:2025-03-07 10:03:58

<前文回顾>

点击此处查看 合集 https://blog.****.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、JSP 内置对象:开发者的“工具箱”

JSP 内置对象[1],说白了就是 JSP 提供给开发者的“工具箱”,里头装着各种实用的工具,比如 requestresponsesession 这些。这些内置对象不用声明,拿来就能用,简直是“懒人福音”。

1. request:请求的“搬运工”

request 对象是 JSP 里最常用的内置对象之一,它负责“搬运” HTTP 请求的数据。无论是表单数据、URL 参数,还是请求头信息,request 都能“一网打尽”。

Jsp Code

<%

    String name = request.getParameter("name");

    out.println("你好," + name);

%>

request 对象的主要方法有:

  • getParameter(String name):获取请求参数的值。
  • getAttribute(String name):获取请求属性的值。
  • setAttribute(String name, Object value):设置请求属性的值。

2. response:响应的“快递员”

response 对象负责“快递” HTTP 响应的数据。无论是设置响应头、重定向,还是输出内容,response 都能“搞定”。

Jsp Code

<%

    response.setContentType("text/html;charset=UTF-8");

    response.getWriter().write("你好,世界!");

%>

response 对象的主要方法有:

  • setContentType(String type):设置响应的内容类型。
  • getWriter():获取用于输出响应内容的 PrintWriter 对象。
  • sendRedirect(String location):重定向到指定的 URL。

3. session:会话的“记事本”

session 对象是 JSP 里用来存储会话数据的“记事本”。它能在多个请求之间保存用户的数据,比如登录状态、购物车信息啥的。

Jsp Code

<%

    String username = (String) session.getAttribute("username");

    if (username == null) {

        session.setAttribute("username", "张三");

    }

    out.println("欢迎回来," + username);

%>

session 对象的主要方法有:

  • getAttribute(String name):获取会话属性的值。
  • setAttribute(String name, Object value):设置会话属性的值。
  • invalidate():使当前会话失效。

二、request、response、session 的“实战演练”

1. request 的“搬运工”日常

request 对象最常见的用法就是获取表单数据和 URL 参数。比如,用户提交了一个登录表单,request 就能把表单里的用户名和密码“搬”出来。

Jsp Code

<%

    String username = request.getParameter("username");

    String password = request.getParameter("password");

    if ("admin".equals(username) && "123456".equals(password)) {

        out.println("登录成功!");

    } else {

        out.println("用户名或密码错误!");

    }

%>

2. response 的“快递员”日常

response 对象最常见的用法就是设置响应头和重定向。比如,用户登录成功后,response 就能把用户“快递”到主页。

Jsp Code

<%

    String username = request.getParameter("username");

    String password = request.getParameter("password");

    if ("admin".equals(username) && "123456".equals(password)) {

        response.sendRedirect("home.jsp");

    } else {

        response.setContentType("text/html;charset=UTF-8");

        response.getWriter().write("用户名或密码错误!");

    }

%>

3. session 的“记事本”日常

session 对象最常见的用法就是保存用户的登录状态。比如,用户登录成功后,session 就能把用户的登录信息“记”下来,方便后续使用。

Jsp Code

<%

    String username = request.getParameter("username");

    String password = request.getParameter("password");

    if ("admin".equals(username) && "123456".equals(password)) {

        session.setAttribute("username", username);

        response.sendRedirect("home.jsp");

    } else {

        response.setContentType("text/html;charset=UTF-8");

        response.getWriter().write("用户名或密码错误!");

    }

%>

三、JSP 内置对象的“历史”:从 JSP 1.0 到 JSP 2.3

JSP 内置对象从 JSP 1.0 开始就有了,虽然现在 JSP 已经有点“过气”了,但它的内置对象依然是开发者的“好帮手”。

1. JSP 1.0:初代“工具箱”

JSP 1.0 在 1999 年发布,内置对象是它的“初代工具箱”。虽然功能简单,但已经能满足大部分开发需求了。

2. JSP 2.0:引入 EL 表达式

JSP 2.0 在 2003 年发布,引入了 EL 表达式[2],让开发者能更方便地访问内置对象。EL 表达式的引入,让 JSP 的“玩法”更加丰富。

3. JSP 2.3:最后的“辉煌”

JSP 2.3 在 2013 年发布,是 JSP 的“最后版本”。虽然内置对象的功能已经很强大了,但 JSP 的“辉煌”已经过去了,因为大家都开始用 Spring Boot、Vue.js 这些新技术了。

四、JSP 内置对象的“骚操作”

1. request 的“骚操作”

request 对象不仅能“搬运”数据,还能“搬运”文件。比如,用户上传了一个文件,request 就能把文件“搬”到服务器上。

Jsp Code

<%

    Part filePart = request.getPart("file");

    String fileName = filePart.getSubmittedFileName();

    filePart.write("/uploads/" + fileName);

    out.println("文件上传成功!");

%>

2. response 的“骚操作”

response 对象不仅能“快递”数据,还能“快递”文件。比如,用户下载了一个文件,response 就能把文件“快递”给用户。

Jsp Code

<%

    response.setContentType("application/octet-stream");

    response.setHeader("Content-Disposition", "attachment; filename=\"file.txt\"");

    InputStream in = new FileInputStream("/path/to/file.txt");

    OutputStream out = response.getOutputStream();

    byte[] buffer = new byte[4096];

    int length;

    while ((length = in.read(buffer)) > 0) {

        out.write(buffer, 0, length);

    }

    in.close();

    out.flush();

%>

3. session 的“骚操作”

session 对象不仅能“记事”,还能“记时”。比如,用户登录后,session 就能把用户的登录时间“记”下来,方便后续统计。

Jsp Code

<%

    long loginTime = System.currentTimeMillis();

    session.setAttribute("loginTime", loginTime);

    out.println("登录时间已记录!");

%>

———————————————————————————————————————————

专有名词解释

  1. JSP 内置对象:JSP 提供的预定义对象,开发者可以直接使用,如 requestresponsesession 等。
  2. EL 表达式:Expression Language,一种用于在 JSP 页面中访问数据的表达式语言。