Java EE期末总结(第二章)

目录

一、JSP页面里的page指令

二、JSP脚本元素

 1、全局声明<%!……%>

2、表达式<%=……%>

3、脚本程序段<%……%>

三、文件包含指令include

四、引入标签库指令taglib

五、JSP动作标签

1、包含文件动作标签

2、请求转发动作标签

3、JavaBean动作标签

4、Java插件动作标签

六、向客户端输出信息对象out

七、响应对象response

八、请求对象request

九、会话对象session

十、全局对象application 

十一、上下文对象pageContext

十二、Cookie信息的建立与使用

十三、表达式语言EL

十四、JSP标准标签库JSTL


一、JSP页面里的page指令

JSP页面中page指令是必须的:

        language属性:定义服务器的脚本语言类型。

        import属性:JSP程序需要导入的类和接口。

        pageEncoding属性:页面的字符编码。

例如:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

二、JSP脚本元素

 1、全局声明<%!……%>

        <%! 声明变量或方法%>

2、表达式<%=……%>

        <%=变量或返回值的方法名%>

3、脚本程序段<%……%>

        <%java语言%>

三、文件包含指令include

 <%@ include file="文件名.jsp"%> 

注意:

1、页面包含指令可以出现在标签内的任何位置

2、避免JSP文件与当前页面定义相同的变量

四、引入标签库指令taglib

 taglib的使用格式如下:

<%@ taglib prefix="标签前缀" uri="标签库描述符"%>

 

五、JSP动作标签

1、包含文件动作标签

        用于在当前JSP页面中嵌入另一个页面,基本格式如下(flush="true"表示清除保存在缓冲区的数据):

 示例:

header.jsp

此文件用于定义网站的头部内容。





    
    网站头部


    

这是网站的头部


footer.jsp

该文件用于定义网站的底部内容。





    
    网站底部


    

版权所有 © 2024

index.jsp

此文件为主页,使用  标签包含 header.jsp 和 footer.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    主页


    
    
    

欢迎访问我的网站

这是网站的主要内容。

2、请求转发动作标签

        用于转发请求,基本格式如下:

        向转发的JSP页面传递参数时,格式如下:


    
    ……

 示例:

source.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    源页面


    

这是源页面,即将转发请求...

这部分内容不会显示。

target.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    目标页面


    

这是目标页面,接收到转发的请求。

用户名: <%= request.getParameter("username") %>

年龄: <%= request.getParameter("age") %>

3、JavaBean动作标签

示例:

创建一个名为 User.java 的 JavaBean 类,放在 com.example.beans 包下。

package com.example.beans;

public class User {
    private String username;
    private int age;

    // 无参构造函数
    public User() {}

    // Getter 和 Setter 方法
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

创建一个名为 userInfo.jsp 的 JSP 页面,使用 JavaBean 动作标签操作 User 对象。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    JavaBean 示例


    
    
    
    
    

    

用户信息

用户名:

年龄:

4、Java插件动作标签

示例:

以下是 ParamApplet.java 文件的代码:

import java.applet.Applet;
import java.awt.Graphics;

// 继承 Applet 类创建一个能接收参数的 Applet
public class ParamApplet extends Applet {
    private String message;

    // 重写 init 方法,在 Applet 初始化时获取传递的参数
    public void init() {
        // 获取名为 "message" 的参数值,如果参数不存在则使用默认值 "No message provided"
        message = getParameter("message");
        if (message == null) {
            message = "No message provided";
        }
    }

    // 重写 paint 方法,用于在 Applet 窗口中绘制文本
    public void paint(Graphics g) {
        g.drawString("Received message: " + message, 20, 20);
    }
}

将上述代码保存为 ParamApplet.java,然后使用 javac 命令进行编译:

javac ParamApplet.java

下面是 paramApplet.jsp 文件的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    使用 <jsp:plugin> 传递参数给 Java Applet


    

这是一个使用 标签传递参数给 Java Applet 的示例

无法加载 Java Applet,请确保你的浏览器支持 Java 插件。

六、向客户端输出信息对象out

        JSP内置对象out,不仅可以输出对象内容,还可以管理页面中的缓冲区,它的常用方法如下:

out.println(exp) // 其中exp可以是普通文本、含有变量的表达式,甚至是作为特殊字符串的JS脚本

 示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    out.println 示例


    <%
        // 1. 输出普通文本
        out.println("

普通文本输出

"); out.println("这是一段普通的文本。
"); // 2. 输出含有变量的表达式 String name = "John"; int age = 25; out.println("

含有变量的表达式输出

"); out.println("姓名: " + name + "
"); out.println("年龄: " + age + "
"); // 3. 输出作为特殊字符串的 JS 脚本 out.println(""); %>

七、响应对象response

        response代表服务器对客户端请求进行响应的对象。

示例 1:设置响应状态码和响应头

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    设置响应状态码和响应头


    <%
        // 设置响应状态码为 200,表示请求成功
        response.setStatus(200);
        // 设置响应头,指定内容类型为 HTML,字符编码为 UTF-8
        response.setContentType("text/html; charset=UTF-8");
        // 设置自定义响应头
        response.setHeader("Custom-Header", "This is a custom header");

        // 输出响应内容
        out.println("

响应状态码和响应头已设置

"); %>

代码解释

response.setStatus(200):将响应的状态码设置为 200,代表请求成功处理。

response.setContentType("text/html; charset=UTF-8"):设置响应的内容类型为 HTML,字符编码为 UTF - 8,避免中文等字符显示乱码。

response.setHeader("Custom - Header", "This is a custom header"):添加一个自定义的响应头,客户端可以通过查看响应信息获取该自定义值。

示例 2:重定向到另一个页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    重定向示例


    <%
        // 立即重定向到百度页面
        response.sendRedirect("https://www.baidu.com");
    %>


示例 3:设置响应体并输出文本信息

<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>



    
    设置响应体示例


    <%
        // 设置响应的内容类型为纯文本,字符编码为 UTF-8
        response.setContentType("text/plain; charset=UTF-8");
        // 通过输出流输出响应内容
        response.getWriter().println("这是一个简单的文本响应示例。");
    %>

八、请求对象request

        request主要封装了表单提交的数据、超链接时传递的参数、客户端的IP地址和Cookie等信息。

示例 1:获取表单提交的数据

创建两个 JSP 文件,一个用于提供表单让用户输入信息,另一个用于接收并处理表单数据。

创建表单页面 form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    表单提交示例


    

请输入你的信息





创建处理表单数据的页面 processForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    处理表单数据


    <%
        // 使用 request 对象获取表单提交的姓名和邮箱
        String name = request.getParameter("name");
        String email = request.getParameter("email");

        out.println("

你提交的信息如下:

"); out.println("

姓名: " + name + "

"); out.println("

邮箱: " + email + "

"); %>

代码解释

   request.getParameter("name") 和 request.getParameter("email"):通过 request 对象的 getParameter 方法获取表单中 name 和 email 字段的值。

示例2:获取 URL 参数

创建一个 JSP 文件,用于接收 URL 中传递的参数并显示。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    
    获取 URL 参数


    <%
        // 使用 request 对象获取 URL 中的参数
        String param = request.getParameter("param");

        if (param != null) {
            out.println("

你传递的参数值是: " + param + "

"); } else { out.println("

未传递参数。

"); } %>

九、会话对象session

        session是存储与服务端的、用于记录和保持某些状态的一种会话跟踪机制。从而实现一个会话期间多个页面间的数据共享。

示例:

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    登录


    

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="javax.servlet.http.HttpSession" %>



    欢迎


    <%
        // 获取当前请求的 session 对象
        HttpSession session = request.getSession();
        String username = request.getParameter("username");
        if (username != null && !username.isEmpty()) {
            session.setAttribute("username", username);
        }
        // 从 session 中获取用户名
        username = (String) session.getAttribute("username");
        if (username != null) {
            out.println("欢迎, " + username);
            out.println("注销");
        } else {
            response.sendRedirect("login.jsp");
        }
    %>

    

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="javax.servlet.http.HttpSession" %>
<%
    // 获取当前请求的 session 对象,如果不存在则返回 null
    HttpSession session = request.getSession(false);
    if (session != null) {
        // 使 session 失效,销毁其中存储的所有信息
        session.invalidate();
    }
    response.sendRedirect("login.jsp");
%>    

十、全局对象application 

        定义application 对象代表整个 Web 应用程序,在服务器启动时创建,服务器关闭时销毁。

        作用范围:整个 Web 应用程序,所有用户和所有请求都能共享这个对象。

常用方法:

  setAttribute(String name, Object value):向 application 对象中存储数据,name 是键,value 是值。

  getAttribute(String name):根据键 name 从 application 对象中获取存储的数据。

  removeAttribute(String name):根据键 name 从 application 对象中移除存储的数据。

  getInitParameter(String name):获取在 web.xml 中配置的初始化参数。

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    Application 对象示例


    <%
        // 存储数据到 application 对象
        application.setAttribute("message", "这是一个全局消息");

        // 从 application 对象中获取数据
        String message = (String) application.getAttribute("message");

        // 输出数据
        out.println("从 application 对象中获取的消息: " + message);
    %>

十一、上下文对象pageContext

        虽然 pageContext 和 application 都是用于在 Web 应用中存储和共享数据的对象,但不能简单地将 pageContext 理解为作用域小一点的 application。二者在作用域、功能、生命周期等方面存在明显差异。

十二、Cookie信息的建立与使用

        Cookie 是在客户端(通常是浏览器)存储数据的一种机制,由服务器发送到用户浏览器并保存在本地,下次向同一服务器再发起请求时,浏览器会自动携带这些 Cookie 信息。

示例:

deleteCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    // 创建一个名为 visitCount 的 Cookie
    javax.servlet.http.Cookie deleteCookie = new javax.servlet.http.Cookie("visitCount", "");
    // 将 Cookie 的有效期设置为 0 以删除它
    deleteCookie.setMaxAge(0);
    response.addCookie(deleteCookie);
    // 重定向到显示 Cookie 信息的页面
    response.sendRedirect("showCookie.jsp");
%>  

showCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    显示 Cookie


    <%
        int count = 0;
        // 从请求中获取所有的 Cookie
        javax.servlet.http.Cookie[] cookies = request.getCookies();
        // 检查请求中是否包含 Cookie
        if (cookies != null) {
            // 遍历所有的 Cookie
            for (javax.servlet.http.Cookie c : cookies) {
                // 查找名为 "count" 的 Cookie
                if ("count".equals(c.getName())) {
                    // 将找到的 Cookie 的值转换为整数并赋值给 count
                    count = Integer.parseInt(c.getValue());
                    break;
                }
            }
        }

        count++;

        // 创建一个新的 Cookie,名称为 "count",值为更新后的访问次数
        javax.servlet.http.Cookie newCookie = new javax.servlet.http.Cookie("count", String.valueOf(count));
        // 设置该 Cookie 的有效期为 3600 秒(即 1 小时)
        newCookie.setMaxAge(3600);
        // 将新创建的 Cookie 添加到响应中,以便发送给客户端浏览器
        response.addCookie(newCookie);
    %>
    
    

你访问此页面的次数为: <%= count %>

删除 Cookie

十三、表达式语言EL

        使用EL表达式时,会从指定域对象读取关键字对应的内容,并写入响应体,其用法格式如下:

${域对象.关键字}

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>



    EL 表达式示例


    <%
        // 在 page 作用域中设置属性
        pageContext.setAttribute("pageMessage", "这是 page 作用域的消息");
        // 在 request 作用域中设置属性
        request.setAttribute("requestMessage", "这是 request 作用域的消息");
        // 在 session 作用域中设置属性
        session.setAttribute("sessionMessage", "这是 session 作用域的消息");
        // 在 application 作用域中设置属性
        application.setAttribute("applicationMessage", "这是 application 作用域的消息");
    %>

    
    page 作用域的消息: ${pageScope.pageMessage}
request 作用域的消息: ${requestScope.requestMessage}
session 作用域的消息: ${sessionScope.sessionMessage}
application 作用域的消息: ${applicationScope.applicationMessage}
省略域对象时查找的消息: ${pageMessage}

十四、JSP标准标签库JSTL

:用于在页面上输出数据,同时可以对特殊字符进行转义,防止 XSS 攻击。例如:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

​​​​​​​:用于在不同作用域中设置变量。比如在 session 作用域中设置变量:


:实现条件判断。根据条件的真假来决定是否执行标签体内容:


    

欢迎管理员!

:用于遍历集合或数组。可以迭代输出列表中的元素:


    

${product.name}

你可能感兴趣的:(期末复习,java-ee,java,servlet)