Java Web 2023 题型和复习提纲(四)

507 阅读9分钟

16、JavaBean的定义与特性?

JavaBean 是一种遵循特定约定的 Java 类,它可以被重用并且可以轻松地通过工具和框架进行操作。JavaBean 主要用于封装数据,常见于多层架构中,特别是在表示层和业务层之间传输数据。

JavaBean 的定义:

一个类要成为 JavaBean,需要符合以下规范:

  1. 类是公共的(Public) :JavaBean 必须是公共的,以便其他类可以访问。
  2. 有一个无参构造器:JavaBean 应该有一个无参的构造方法,以便可以通过反射机制进行实例化。
  3. 属性私有:JavaBean 的属性通常是私有的(private),防止直接访问属性值,保证数据的封装性。
  4. 属性访问方法:JavaBean 提供公共的 getter 和 setter 方法来访问它的属性,遵守命名规范,如 getProperty()setProperty(Type value)
  5. 实现可序列化接口:JavaBean 通常实现 java.io.Serializable 接口,以便可以进行流的输入输出操作,如网络传输、存储到文件等。

JavaBean 的特性:

  1. 封装性:通过使用私有变量和公共的 getter 和 setter 方法,JavaBean 封装了它的属性,这允许属性在修改前可以进行检查,并且可以隐藏实现的细节。
  2. 可重用性:作为一个可重用的组件,在不同的环境中,相同的 JavaBean 可以用于不同的应用程序。
  3. 可替换性:JavaBean 对其他JavaBean来说是可替换的,可以在不影响其他Bean的情况下替换一个Bean。
  4. 集成性:JavaBeans 可以与其他JavaBean协同工作,通过工具或容器来组织,以建立更为复杂的系统。
  5. 易于操作和维护:由于遵循了严格的命名和设计规范,开发工具可以轻松地识别JavaBean的属性和方法,使得它们易于操作和维护。

JavaBean 主要用途是在不同层之间传输数据(作为一个数据载体),也可以在 JavaBean 之间组织业务逻辑。在像 Java EE 这样的企业级应用中,JavaBean 通常用来定义服务数据结构、表格数据或其他任何可以被序列化和传输的对象。

17、简述使用Cookie进行会话跟踪的过程。(写出主要步骤,即存取数据的步骤,教材有实例)

在Web应用中,HTTP协议本身是无状态的,这意味着服务器不会记住请求之间的状态信息。为了实现会话跟踪,即在不同请求之间保持状态,通常会使用Cookie。下面是使用Cookie进行会话跟踪的基本步骤:

1. 服务器创建Cookie并发送给客户端

当用户首次访问服务器时,服务器会创建一个Cookie来标识用户。这可以通过在服务器端的编程语言(如Java、PHP)中创建一个Cookie对象来完成。

java
复制代码
// 示例:在Java中创建并发送一个Cookie
Cookie cookie = new Cookie("sessionId", "123456789");
// 可以设置cookie的有效期
cookie.setMaxAge(60*60*24); // 例如,设置cookie有效期为一天
// 将cookie添加到响应中,发送给客户端
response.addCookie(cookie);

2. 客户端存储Cookie

客户端浏览器会接收到这个Cookie,并将其存储在本地。在Cookie的有效期内,浏览器会持有这个Cookie。

3. 客户端随请求发送Cookie给服务器

在之后的每个请求中,只要访问的是该Cookie对应的域名和有效路径,浏览器都会自动将那个Cookie通过HTTP请求的头信息发送给服务器。

http
复制代码
GET /index.html HTTP/1.1
Host: www.example.com
Cookie: sessionId=123456789

4. 服务器读取Cookie信息

服务器通过请求头中的Cookie信息识别用户,并通过查找与Cookie相关联的会话数据来恢复之前的会话状态。

java
复制代码
// 示例:在Java中读取客户端发送的Cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        if ("sessionId".equals(cookie.getName())) {
            String sessionId = cookie.getValue();
            // 根据sessionId恢复用户会话
        }
    }
}

5. 服务器可以更新Cookie信息

如果需要,服务器可以修改Cookie的信息,并通过响应头将更新的Cookie发送回客户端。

java
复制代码
// 示例:在Java中更新Cookie信息,并发送给客户端
Cookie cookie = new Cookie("sessionId", "987654321");
response.addCookie(cookie);

6. 客户端替换或更新本地存储的Cookie

客户端收到更新后的Cookie信息后,会更新本地存储的Cookie数据。

通过这些步骤,服务器能够跟踪客户端的会话状态,即使是在无状态的HTTP协议之上。注意,Cookie通常用于存储不敏感的数据,因为客户端可以访问和修改Cookie。对于敏感数据,要么加密存放到Cookie中,要么使用更安全的会话管理方案,如HTTPSession等。

18.JavaBeans具有的特点有哪些?

JavaBeans 是在 Java 语言编程中,遵循特定规范的可重用组件。其具有以下特点:

  1. 封装性:JavaBean 将属性隐藏起来,只能通过公共的 getter 和 setter 方法访问。
  2. 可重用性:JavaBean 设计成可重用的组件以便在不同的环境和应用程序中使用。
  3. 可替换性:JavaBeans 可以相互替换,提供了一定程度的模块化。
  4. 可操作性:因为有标准的设计模式,它们可以很容易地通过工具进行操作。
  5. 集成性:JavaBeans 可以与其他 JavaBeans 集成,协同完成更复杂的功能。
  6. 组件化:JavaBeans 通常被设计为完成特定的功能,可以作为组件插入到应用程序中。
  7. 事件处理:JavaBeans 支持事件处理机制,允许Bean通过事件监听器与外界交互。
  8. 序列化:JavaBeans 通常实现了 Serializable 接口,因此它们可以被序列化和反序列化,以在网络上传输或存储到磁盘。
  9. 自省性(Introspection):JavaBeans 支持自省机制,允许开发工具分析 Bean 的能力,如查看属性、方法和事件。

这些特点使 JavaBeans 成为了开发各种Java应用程序的基本构建块,尤其是在企业级开发以及需要组件重用的场景中。

19.JDBC数据库使用的基本步骤和编程

使用JDBC(Java Database Connectivity)与数据库交互涉及以下基本步骤,这里我将为您概述这些步骤并提供Java代码示例。

1. 导入JDBC包

在源文件的顶部,导入JDBC类库。

import java.sql.*;

2. 加载和注册JDBC驱动

加载数据库的JDBC驱动到JVM(Java虚拟机)。这一步可以通过 Class.forName() 方法实现。

try {
    Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

在较新的JDBC版本中,驱动会通过服务提供者机制自动加载,可能不需要这一步。

3. 建立数据库连接

创建 Connection 对象以建立到数据库的连接。

String url = "jdbc:mysql://localhost:3306/yourDatabase";
String user = "yourUsername";
String password = "yourPassword";

try {
    Connection con = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
    e.printStackTrace();
}

4. 创建Statement

通过 Connection 对象创建 Statement(用于执行静态SQL语句)或 PreparedStatement(用于执行预编译SQL语句)。

Statement stmt = con.createStatement();
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM table WHERE id = ?");

5. 执行SQL语句

使用 StatementPreparedStatement 对象的 executeQuery()(对于SELECT)或 executeUpdate()(对于INSERT, UPDATE, DELETE)来执行SQL语句。

ResultSet rs = stmt.executeQuery("SELECT * FROM yourTable");

// 使用PreparedStatement
pstmt.setInt(1, 10); // 设置第一个参数为10
ResultSet rs = pstmt.executeQuery();

6. 处理结果集

迭代 ResultSet 对象处理数据库查询结果。

while(rs.next()) {
    String data = rs.getString("columnName");
    // 处理每行数据
}

7. 清理环境

最后,关闭 ResultSetStatement,和 Connection 对象以释放数据库资源。

rs.close();
stmt.close();
pstmt.close();
con.close();

注意:务必使用try-catch语句或者try-with-resources语句来处理异常,并确保数据库资源在最后被正确关闭。

在实际应用中,可能需要考虑更复杂的错误处理机制,使用连接池来优化资源利用,以及考虑线程安全等问题。

20.使用JSP模式2(JSP+Java Bean+Servlet)实现数据库操作:用户登陆、通过表单提交Servlet,在Servlet中调用数据库操作类(DAO)实现增删改查的方法。

使用JSP模式2(也称为Model 2或MVC模式)进行数据库操作涉及将应用程序分为三个主要组件:模型(业务逻辑和数据访问)、视图(JSP页面用于展示数据)、控制器(Servlet用于处理请求、业务逻辑)。以下是实现用户登录以及增删改查操作的基本步骤:

1. 设置数据库环境

  • 创建数据库和表。
  • 向表中添加初始数据。

2. 创建Java Bean(模型)

创建包含用户名和密码属性的简单Java Bean。

public class UserBean {
    private String username;
    private String password;

    // Getter and Setter methods
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

3. 创建DAO类

创建一个DAO类,用于执行数据库的增删改查操作。

public class UserDAO {
    // 演示目的:包含一个验证用户方法
    public boolean isValidUser(String username, String password) {
        // 连接到数据库,执行SQL查询,检查用户
        // 如果用户有效,返回true,否则返回false
        // ...
    }

    // 其他数据库增删改查操作方法
    // ...
}

4. 创建Servlet(控制器)

创建一个Servlet来处理从JSP页面过来的用户登录请求。

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        // 利用 DAO 类验证用户
        UserDAO userDao = new UserDAO();
        boolean isValidUser = userDao.isValidUser(username, password);
        
        if (isValidUser) {
            // 用户验证成功,重定向到成功页面
            response.sendRedirect("success.jsp");
        } else {
            // 用户验证失败,设置错误信息,并返回到登录页面
            request.setAttribute("error", "Invalid username or password");
            RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");
            dispatcher.forward(request, response);
        }
    }
}

5. 创建JSP页面(视图)

  • login.jsp:创建用于收集用户名和密码的表单。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Login Page</title>
</head>
<body>
    <form action="LoginServlet" method="post">
        Username: <input type="text" name="username" />
        Password: <input type="password" name="password" />
        <input type="submit" value="Login" />
    </form>

    <c:if test="${not empty error}">
        <p>${error}</p>
    </c:if>
</body>
</html>
  • success.jsp:创建一个简单的页面,用于显示用户登录成功的信息。
<%@ page import="java.io.*,java.util.*, javax.servlet.*"%>
<!DOCTYPE html>
<html>
<head>
    <title>Success Page</title>
</head>
<body>
    <h1>Login Success!</h1>
    <!-- 可以添加更多功能,比如显示用户信息 -->
</body>
</html>

6. 配置Web应用

web.xml 或通过注解的方式配置 Servlet,并将JSP和Servlet添加到Web应用的正确位置。

7. 部署和测试

将应用程序部署到Web容器(例如Tomcat)并进行测试,确保数据库配置正确,DAO逻辑准确执行,并且JSP页面和Servlet正常交互。

注意事项

  • 本示例忽略了很多生产环境应考虑的问题,比如密码加密存储、SQL注入防护、异常处理等。
  • 代码示例提供了一个概念性的框架,具体实现可以根据需要进一步完善和调整。
  • 对于用户登录和SESSION管理更加严格的处理,不在上面的简单流程展示之内。