【JavaWeb】复习重点内容(一)

简介: 【JavaWeb】复习重点内容(一)

二、编程题4个题,共60分


1.题目给出了数据库、表等信息,要求使用JDBC完成增删改查这些操作,可能需要事务


使用 JDBC 完成增删改查操作通常需要以下步骤:


加载数据库驱动。

建立数据库连接。

创建 Statement 或 PreparedStatement 对象。

执行 SQL 语句。

处理查询结果。

释放资源。

以下是一个使用 JDBC 实现增删改查操作的示例:


public class UserDao {
    private Connection conn;
    public UserDao(Connection conn) {
        this.conn = conn;
    }
    public void createUser(User user) throws SQLException {
        String sql = "INSERT INTO users(name, email, password) VALUES (?, ?, ?)";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1, user.getName());
        stmt.setString(2, user.getEmail());
        stmt.setString(3, user.getPassword());
        stmt.executeUpdate();
        stmt.close();
    }
    public void updateUser(User user) throws SQLException {
        String sql = "UPDATE users SET name=?, email=?, password=? WHERE id=?";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1, user.getName());
        stmt.setString(2, user.getEmail());
        stmt.setString(3, user.getPassword());
        stmt.setLong(4, user.getId());
        stmt.executeUpdate();
        stmt.close();
    }
    public void deleteUser(long id) throws SQLException {
        String sql = "DELETE FROM users WHERE id=?";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setLong(1, id);
        stmt.executeUpdate();
        stmt.close();
    }
    public User getUserById(long id) throws SQLException {
        String sql = "SELECT id, name, email, password FROM users WHERE id=?";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setLong(1, id);
        ResultSet rs = stmt.executeQuery();
        User user = null;
        if (rs.next()) {
            user = new User();
            user.setId(rs.getLong("id"));
            user.setName(rs.getString("name"));
            user.setEmail(rs.getString("email"));
            user.setPassword(rs.getString("password"));
        }
        rs.close();
        stmt.close();
        return user;
    }
}



上述代码中,我们定义了一个 UserDao 类,用于操作名为 users 的数据库表。其中的四个方法分别实现了创建用户、更新用户、删除用户和根据用户 ID 查询用户的功能。在这些方法中,我们使用了 PreparedStatement 对象来执行 SQL 语句,并通过设置占位符的方式传递参数。通过这种方式,可以有效避免 SQL 注入等安全问题。


如果需要使用事务,可以将上述方法放到一个事务中执行。以下是一个示例:


public void createUserWithTransaction(User user) throws SQLException {
    conn.setAutoCommit(false);
    try {
        createUser(user);
        conn.commit();
    } catch (SQLException e) {
        conn.rollback();
        throw e;
    } finally {
        conn.setAutoCommit(true);
    }
}


在这个方法中,我们通过将 autoCommit 属性设置为 false,来启用手动事务。在执行完所有操作后,我们可以选择提交或回滚事务。同时,为了保证代码的健壮性,需要在 finally 块中将 autoCommit 属性设置回 true。


2.编写Servlet接收请求参数,并保存到某个作用域


@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        // 将参数保存到 session 作用域
        HttpSession session = request.getSession();
        session.setAttribute("name", name);
        session.setAttribute("email", email);
        session.setAttribute("password", password);
        // 将参数保存到 request 作用域
        request.setAttribute("name", name);
        request.setAttribute("email", email);
        request.setAttribute("password", password);
        // 将参数保存到 application 作用域
        ServletContext context = getServletContext();
        context.setAttribute("name", name);
        context.setAttribute("email", email);
        context.setAttribute("password", password);
        // 重定向到结果页面
        response.sendRedirect(request.getContextPath() + "/result.jsp");
    }
}


在上述代码中,我们在 doPost 方法中,分别将参数保存到 session、request 或 application 作用域中。在 session 中保存参数的方式与之前的示例类似,使用 request.getSession() 方法获取 HttpSession 对象,并调用其 setAttribute 方法将参数保存到 session 作用域中。


在 request 作用域中保存参数的方式也很类似,只需要使用 request.setAttribute 方法将参数保存到 request 作用域中即可。


在 application 作用域中保存参数也非常简单,只需要使用 getServletContext() 方法获取 ServletContext 对象,并调用其 setAttribute 方法将参数保存到 application 作用域中即可。


需要注意的是,在将参数保存到不同作用域中时,需要使用不同的对象来调用 setAttribute 方法。除此之外,其他代码与之前的示例相同,最终通过 response.sendRedirect 方法重定向到结果页面。


3.JPA的编程题,题目给出数据库和表,让大家使用JPA完成实体类及使用EntityManager完成增删改查操作


假设有一个表名为 user,包含以下字段:


Field

Type

id

INT

name

VARCHAR(100)

age

INT

email

VARCHAR(100)

password

VARCHAR(100)


接下来,我们需要使用 JPA 完成实体类及使用 EntityManager 完成增删改查操作。


首先,我们需要定义一个实体类 User,对应 user 表中的一条记录:


@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private Integer age;
    private String email;
    private String password;
    // getters and setters
}



在上述代码中,我们使用 @Entity 注解表示这是一个实体类,使用 @Table 注解指定了实体对应的表名为 user。同时,我们在类中定义了实体对应的属性,并使用 @Id 和 @GeneratedValue 注解表示该属性为实体的唯一标识,并指定了该属性的生成策略为自增长。


接下来,我们可以使用 EntityManager 对实体进行增删改查操作。以下是一个示例:


public class UserDao {
    @PersistenceContext
    private EntityManager entityManager;
    // 添加用户
    public void addUser(User user) {
        entityManager.persist(user);
    }
    // 根据 id 查询用户
    public User getUserById(Integer id) {
        return entityManager.find(User.class, id);
    }
    // 更新用户信息
    public void updateUser(User user) {
        entityManager.merge(user);
    }
    // 根据 id 删除用户
    public void deleteUserById(Integer id) {
        User user = entityManager.find(User.class, id);
        entityManager.remove(user);
    }
}


在上述代码中,我们使用 @PersistenceContext 注解将 EntityManager 注入到 UserDao 类中。接着,我们定义了几个方法,分别用于添加、查询、更新和删除用户。


在 addUser 方法中,我们使用 EntityManager 的 persist 方法将用户对象保存到数据库中。


在 getUserById 方法中,我们使用 EntityManager 的 find 方法根据用户的唯一标识 id 查询用户信息,并将查询结果返回。


在 updateUser 方法中,我们使用 EntityManager 的 merge 方法将修改后的用户对象保存到数据库中。


在 deleteUserById 方法中,我们使用 EntityManager 的 remove 方法将根据用户的唯一标识 id 查询到的用户对象从数据库中删除。


需要注意的是,为了使用 EntityManager,我们需要将 JPA 的实现框架(如 Hibernate)配置到项目中,并在 persistence.xml 配置文件中配置数据源等信息。


4.JSP+Servet+JavaBean开发模式完成系统功能


JSP + Servlet + JavaBean 开发模式是一种经典的 Web 开发模式,它的核心是将前端页面(JSP)与后端业务逻辑(JavaBean)分离开来,通过 Servlet 充当中间层,完成两者之间的交互和协作。


以下是一个简单的示例:


1.首先,创建一个JavaBean来表示系统中的一个实体。例如,我们创建一个名为User的JavaBean来表示系统中的用户:


public class User {
    private String username;
    private String password;
    // getter and setter methods
}


2.接下来,创建一个Servlet来处理用户提交的数据。例如,我们创建一个名为LoginServlet的Servlet来处理用户登录请求:


@WebServlet("/login")
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");
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        // 将User对象保存到Session作用域中
        request.getSession().setAttribute("user", user);
        // 转发到登录成功页面
        request.getRequestDispatcher("/success.jsp").forward(request, response);
    }
}



在Servlet中,我们首先获取用户提交的用户名和密码,然后创建一个User对象,并将其保存到Session作用域中。最后,我们使用请求转发将用户重定向到登录成功页面。


3.在Servlet中,我们首先获取用户提交的用户名和密码,然后创建一个User对象,并将其保存到

Session作用域中。最后,我们使用请求转发将用户重定向到登录成功页面。


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录成功</title>
</head>
<body>
    <h1>欢迎您,${user.username}!</h1>
</body>
</html>


在JSP页面中,我们使用EL表达式来显示用户登录成功后的信息,例如用户的用户名。


4.最后,我们可以在Web应用程序中部署和运行这个示例,访问/login路径,提交用户名和密码,然后会被重定向到success.jsp页面,页面中显示登录成功后的信息。


这就是使用JSP+Servlet+JavaBean开发模式完成系统功能的基本流程。开发人员可以根据具体的业务需求进行修改和扩展。

相关文章
|
5月前
|
存储 前端开发 JavaScript
基于JavaWeb实现停车场管理系统
基于JavaWeb实现停车场管理系统
|
5月前
|
前端开发 JavaScript Java
图书借阅管理平台|基于JavaWeb实现图书借阅系统
图书借阅管理平台|基于JavaWeb实现图书借阅系统
113 1
|
2月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
414 37
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
32 2
|
1月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
50 5
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
5月前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
55 0
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
101 2
|
2月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
5月前
|
SQL Java 数据库连接
JavaWeb Mapper代理开发
JavaWeb Mapper代理开发