• 【Javaweb】基础开发流程与介绍


    本文档写于2022年7月29日,由于个人水平有限,可能存在一些问题,因此仅供参考 @萌狼蓝天

    JavaWeb基础开发流程

    1.确定系统和功能

    在此以“宠物管理系统”为例,要开发一个简单的宠物管理系统,功能如下:

    (1)管理员需要通过登陆进入系统

    (2)支持宠物信息的增加、查询、修改、删除

    2.设计数据库

    根据功能,分析应该存在两个数据表:一个用户信息表(此处的用户,指的是系统的使用者,也就是管理员)、一个宠物信息表

    image-20220729102958104

    3.在IDEA中创建项目,导入所需Jar包

    可以手动导入Jar包,如果使用了Maven管理工具的可以编辑pom.xml

    我使用的Maven,需要添加

    1. <dependency>
    2. <groupId>mysqlgroupId>
    3. <artifactId>mysql-connector-javaartifactId>
    4. <version>8.0.28version>
    5. dependency>

    image-20220729112157165

    4.使用IDEA自带数据库工具的自带扩展脚本自动生成对象代码

    https://www.bilibili.com/video/BV1od4y1m7vh

    5.编辑配置文件,连接数据库

    (1)在resource下创建jdbc.properties,内容如下

    1. driverClass=com.mysql.cj.jdbc.Driver
    2. jdbcUrl=jdbc:mysql://域名:3306/数据库名?zeroDateTimeBehavior=convertToNull
    3. user=用户名
    4. password=密码

    zeroDateTimeBehavior=convertToNull是为了处理Date数据无效时产生的错误,写了这个之后,无效Date数据会自动转为Null

    (2)创建JDBC工具类,用于连接数据库

    1. package cc.mllt.jdbc;
    2. import java.sql.*;
    3. import java.util.ResourceBundle;
    4. public class JDBCUtils {
    5. //私有化构造函数
    6. //防止外界直接创建对象
    7. private JDBCUtils(){}
    8. //提供静态方法getConnection
    9. //用来对外提供数据库连接对象
    10. /**
    11. *Connection 用来对外提供数据库连接对象
    12. * @return
    13. */
    14. public static Connection getConnection(){
    15. try{
    16. //0.读取文件属性
    17. ResourceBundle conf = ResourceBundle.getBundle("jdbc");
    18. //1.注册驱动
    19. Class.forName(conf.getString("driverClass"));
    20. //2.获取数据库连接
    21. String url = conf.getString("jdbcUrl");
    22. String user = conf.getString("user");
    23. String password = conf.getString("password");
    24. Connection conn = DriverManager.getConnection(url,user,password);
    25. return conn;
    26. }catch (Exception e){
    27. e.printStackTrace();
    28. }
    29. return null;
    30. }
    31. //提供静态方法close,用来释放资源
    32. /**
    33. *close 用来释放资源
    34. * @param rs
    35. * @param st
    36. * @param conn
    37. */
    38. public static void close(ResultSet rs, Statement st,Connection conn){
    39. //关闭结果资源集
    40. if(rs!=null){
    41. //防止空指针异常
    42. try{
    43. rs.close();
    44. }catch (SQLException e){
    45. e.printStackTrace();
    46. }finally {
    47. rs=null;//手动置空,等待GC回收
    48. }
    49. }
    50. //关闭传输器资源
    51. if(st!=null){
    52. //防止空指针异常
    53. try {
    54. st.close();
    55. }catch (SQLException e){
    56. e.printStackTrace();
    57. }finally {
    58. st = null;//手动置空,等待GC回收
    59. }
    60. }
    61. //关闭数据库连接资源
    62. if(conn!=null){
    63. //防止空指针异常
    64. try {
    65. conn.close();
    66. } catch (SQLException e) {
    67. e.printStackTrace();
    68. }finally {
    69. conn=null;//手动置空,等待GC回收
    70. }
    71. }
    72. }
    73. }

    6.编写功能模块

    在此以查询为例,编写查询数据的代码

    1. /**
    2. * 获取所有宠物信息
    3. * @return List 成功返回以宠物对象构成的列表,失败返回null
    4. */
    5. public static List getPetInfo(){
    6. Connection connection = null;
    7. PreparedStatement ps = null;
    8. ResultSet rs =null;
    9. List list = new ArrayList() {
    10. };
    11. try {
    12. connection = JDBCUtils.getConnection();
    13. String sql = "select * from pet";
    14. ps = connection.prepareStatement(sql);
    15. rs = ps.executeQuery();
    16. while (rs.next()){
    17. Pet pet = new Pet();
    18. pet.setCode(rs.getString(1));
    19. //1对应的是数据表中第一列的数据
    20. pet.setType(rs.getString(2));
    21. //1对应的是数据表中第二列的数据
    22. pet.setName(rs.getString(3));
    23. pet.setKind(rs.getString(4));
    24. pet.setGender(rs.getLong(5));
    25. pet.setCharacter(rs.getString(6));
    26. pet.setHealth(rs.getString(7));
    27. pet.setBirth(rs.getDate(8));
    28. pet.setPic(rs.getString(9));
    29. pet.setState(rs.getLong(10));
    30. list.add(pet);
    31. }
    32. } catch (SQLException e) {
    33. System.out.println(e);
    34. return null;
    35. }
    36. return list;
    37. }

    7.编写前端页面

    可以先使用HTML写好模板,再迁移入JSP

    8.前端获取后端数据并显示

    1. <%@ page import="cc.mllt.Util.PetUtil" %>
    2. <%@ page import="java.util.List" %>
    3. <%@ page import="cc.mllt.dao.Pet" %>
    4. <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    5. 宠物管理系统
    6. "stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/css/bootstrap.min.css">
    7. <%
    8. List pets = PetUtil.getPetInfo();
    9. System.out.println(pets);
    10. %>
    11. 宠物管理系统

    12. "control">
  • "table table-striped table-bordered table-hover">
  • <%
  • for (Pet pet : pets) {
  • %>
  • <%
  • }
  • %>
  • 编号类别品种姓名性别性格健康状况生日领养状态照片操作
    <%=pet.getCode()%>
  • <%=pet.getType()%>
  • <%=pet.getKind()%>
  • <%=pet.getName()%>
  • <%
  • String gender="";
  • if(pet.getGender()==0){
  • gender="雌";
  • }
  • if(pet.getGender()==1){
  • gender="雄";
  • }
  • if(pet.getGender()==2){
  • gender="雌雄共同";
  • }
  • if(pet.getGender()==3){
  • gender="雌雄不分";
  • }
  • %>
  • <%=gender%>
  • <%=pet.getCharacter()%>
  • <%=pet.getHealth()%>
  • <%=pet.getBirth()%>
  • <%
  • String state="";
  • if(pet.getState()==0){
  • state="未被领养";
  • }
  • if(pet.getState()==1){
  • state="已被领养";
  • }
  • %>
  • <%=state%>
  • >
  • image-20220729112029568

    9.美化前端

    可以使用Bootstrap或者自己编写样式美化前端。

    10.优化后端代码(逻辑算法等)

  • 相关阅读:
    【无标题】
    SVGO--使用/实例
    信息学奥赛一本通:1140:验证子串
    操作系统 | 计算机系统概述
    Odoo16—权限控制
    Python实现Stacking回归模型(随机森林回归、极端随机树回归、AdaBoost回归、GBDT回归、决策树回归)项目实战
    Arthas(2):使用Web Console
    Python进阶教程:pandas数据分析实践示例总结
    数学几百年重大错误:将两异函数误为同一函数
    Android开发:Camera2+MediaRecorder录制视频后上传到阿里云VOD
  • 原文地址:https://blog.csdn.net/ks2686/article/details/126053091