Java教程

220421__JSP与JAVABEAN

本文主要是介绍220421__JSP与JAVABEAN,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

JSP与JSPBEAN

做了一个在网页上对数据库进行删改查功能的实验,为了记下实验收获,遂写下笔记

编辑器是IDEA,用到了javabean,request对象,主要代码部分有:

java部分(放在src-DAO包中) jsp部分(放在web目录下)
User.java deleteUser.jsp
Userdao.java doUpdateUser.jsp
DBConnection.java queryUser.jsp
updateUser.jsp

实现的具体逻辑如下

1.DBConnection.java

首先DBConnection是套路型文件,目的是与数据库进行连接,

它可以是这样(这部分的功能是测试连接)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
image-20220421010320646

也可以是这样,image-20220421010432472

构造一个返回类型为Connection 的方法,*注意,返回的Connection对象在后面的UserDao中 可调用prepareStatement方法封装sql语句,

graph TD; DBConnection返回Connection对象-->UserDao中声明Connection对象con-->con调用prepareStatement方法封装sql语句ps-->ps执行setString或setInt填充语句-->executeUpdate或executeQuery;

其中重点的是

2.User.java

此处的类中的变量必须和数据库表中的字段一一对应,类名和变量名最好与表相同。在这里我没有一一对应,要记得后面UserDao的sql语句别写错了,那里要和数据库字段名对应

其中还要额外实现getter和setter方法,IDEA中右键点击generate就行了。在UserDao中,User类的作用在于new一个对象,存储获得的真实数据库中对象的值,方便返回

3.UserDao.java

预先导入这些包

import java.sql.*;
import java.util.ArrayList;

其中声明了很多对数据库进行操作的方法,每个方法中的步骤都为:1.建立连接,2.写sql语句,在这里sql语句定然是不完整的,缺失的部分通过 ? 英文问号表示,再在PreparedStatement自带的方法setString方法能通过问号的位置插入。

image-20220421232203815

其中的函数有:

public static void insertUser(User user) public static void deleteUser(int id)
public static void updateUser(User user) public static User getUser(int id)
public static ArrayList getUserList(User user) public static ArrayList getAllUser()
public static void main (String[] args) 默认主函数
  1. public static void insertUser(User user) {...} ,setString中通过调用user的get方法获得插入sql内容,这里user应该是通过输入框封装而成。

  2. public static void deleteUser(int id) {...}

    这里在jsp页面的逻辑是在界面中点击要删除的字段,跳到deleteUser.jsp时,通过在后面加上 ?id=<%= user.getId()%> 向deleteUser.jsp传id值。

    显示所有user的jsp页面

    graph TD; id0[< jsp:useBean>标签将UserDao类的对象用id'userDao'表示]-->id1[userDao.getAllUser存入ArrayListUser< user> userList]-->id2["循环调用列表里的user:for(User user:userList)"]-->id3["通过表达式<%= user.getId()%>向表格插入User信息"];
    • 显示所有用户的queryUser.jsp,注意到删除是跳转到deleteUser.jsp的

    image-20220422000642114

    • deleteUser.jsp的写法

    image-20220422000822956

    • UserDao中deleteUser方法

image-20220421232734447

  1. public static void updateUser(User user) {...},逻辑也是一样,updateUser的jsp页面先useBean,再通过request获取id值,但这里方法的输入是user,所以要new 一个user对象,调用它的getUser(id)方法获得user,再调用它的updateUser方法,注意,这个方法需要输入有完整属性的user对象,而既然是更新,那肯定要有输入框传入更新后的值。

    故这里再用一个表格跳转至另一个jsp页面,通过前表格的每一个input 得到更新后的user各属性,通过input框特有的name传值法,在下一个页面用request.getParameter(name)就能获得这些属性值

    graph TD; id0["通过request获取上个页面传来的id值"]-->id1["通过form得到更新后的各属性值,再跳转至另一界面"]-->id2["通过request.getParameter 获得上个界面各属性"]-->id3["new user,调用其setId等来保存更新后的各属性"]-->id4["再用userDao调用其updateUser(user)方法,<br>传入sql,数据库执行"];

最后response.sendRedirect跳回queryUser.jsp,发现各项已更新。

还差两个返回列表的

  1. public static ArrayList getUserList(User user){...},这个方法的作用是通过用户名或邮箱模糊查询用户,虽然在代码中并没有用到这部分功能。

  2. public static ArrayList getAllUser(){...} ,这个方法可以返回所有的用户,因为其sql语句是"select * from users",再一次次地判断结果列表是否还有下一个,有的话rs.next()就会使光标后移一位,假设总数据共有九行,相当于判断第八行.next是否存在时返回true,之后执行的语句都是对第九行的数据进行操作,自然下一次判断rs.next()是否存在就是false了。

image-20220423010434472

积累的地方:

1. 在href里通过变量名+?可以传值
2. request对象可以通过getParameter(变量名)获取上个页面传来的变量值,不仅是类似href中 变量?=,还有上个页面input的name值
3. setString方法(1,value)可以根据?的顺序填充值
4. 在update时form表格通过type="hidden" 保证了user的id不被更改
5. response.sendRedirect 重定向?

期待能在空闲时间把模糊查询功能完善。

这篇关于220421__JSP与JAVABEAN的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!