JavaWeb之综合小项目

article/2025/10/12 10:47:31

案例需求: 使用Java程序操作数据库,并把结果显示在jsp页面上。
(这里只做查询操作,增删改操作类似如此)
使用工具: maven,idea,tomcat,MySQL数据库。
使用技术: javabean+servlet+jsp。

准备阶段:
第一步: 使用配置好maven工具的idea创建一个web项目。
在这里插入图片描述
第二步: 创建好项目后,补充相应的目录,使得项目的结构是一个标准的maven项目结构。
在这里插入图片描述
第三步: 在pom.xml文件导入此项目所需的jar包

完成以上的准备工作后就可以开始进入项目工程了。
第一步: 创建此项目所需要的包目录。
在这里插入图片描述
1. 在main包的java目录下写项目所需的java执行代码。
vo: 在这个目录下写本次项目所要使用的对象(如:user)
tools: 在这个目录下执行java代码与数据库的交互。
dao: 这个目录的功能与vo相同。
model: 服务层,用于调用dao层的业务。
controller: 最重要的枢纽,连接jsp页面并且也调用model层。
2. 在webapp目录下写jsp代码。
3. 在test包的java目录下写项目的测试代码。

第二步: 编写java代码
1. 开始写代码,首先完成vo层的对象代码。

package com.lu.vo;public class User {private int id;private String username;private String sex;private String birthday;private String address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", sex='" + sex + '\'' +", birthday=" + birthday +", address='" + address + '\'' +'}';}
}

2. 创建好user类后开始写访问数据库的tools层代码。
(在这里采用模板设计模式进行编写)

package com.lu.tools;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class DbManager {private Connection conn = null;private Statement state = null;private ResultSet rs = null;private String username = "root";private String password = "root";private String driver = "com.mysql.jdbc.Driver";private String url = "jdbc:mysql://localhost:3306/mybatis";public Connection getConnection(){try {Class.forName(driver);System.out.println("loading driver success.......");conn = DriverManager.getConnection(url,username,password);System.out.println("connection tools success.....");return conn;}catch (Exception ex){ex.printStackTrace();}return  conn;}// insert update deletepublic int nonQueryMethod(String strSql){int flag = 0;try {conn = this.getConnection();state = conn.createStatement();flag = state.executeUpdate(strSql);return flag;}catch (Exception ex){ex.printStackTrace();}return flag;}public ResultSet queryMethod(String strSql){try {conn = this.getConnection();state = conn.createStatement();rs = state.executeQuery(strSql);return rs;}catch (Exception ex){ex.printStackTrace();}return rs;}public void closeDb(){try {if(rs != null) rs.close();if(state!= null) state.close();if(conn != null) conn.close();}catch (Exception ex){ex.printStackTrace();}}}

3. 编写dao层代码,调用tools层来执行具体的访问数据库操作。

package com.lu.dao;import com.lu.tools.DbManager;
import com.lu.vo.User;import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;public class QueryUserDao {public List<User> queryUser() {//由于User可能不止一个,所以用一个list进行接收List<User> list = new ArrayList<>();DbManager dbManager = new DbManager();try {String sql = "select * from user";ResultSet rs = dbManager.queryMethod(sql);while (rs.next()) {User user = new User();user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setBirthday(rs.getString("birthday"));user.setSex(rs.getString("sex"));user.setAddress(rs.getString("address"));if (user != null) {list.add(user);}}} catch (Exception ex) {ex.printStackTrace();} finally {dbManager.closeDb();}return list;}
}

4. 编写model层代码,调用dao
(这里为了便于扩展。采用接口+实现类的面向对象编程模式)

package com.lu.model;import com.lu.vo.User;import java.util.List;public interface UserService {public List<User> queryUser();
}
package com.lu.model;import com.lu.dao.QueryUserDao;
import com.lu.vo.User;import java.util.List;public class UserServiceImpl implements UserService{private QueryUserDao queryUserDao = new QueryUserDao();@Overridepublic List<User> queryUser() {return queryUserDao.queryUser();}}

5. 在这里由于业务逻辑比较简单,所以这一步可以直接编写controller层的核心代码,但是为了保证代码的可靠性,在此处应该需要进行test测试,验证前面的代码是否可执行到这一步。
在这里插入图片描述
执行上述测试代码,结果如下:
在这里插入图片描述
通过测试,我们得到了预期的结果,所以可以放心的执行本该执行的这一步。
6. 编写controller层代码。

package com.lu.controller;import com.lu.model.UserService;
import com.lu.model.UserServiceImpl;
import com.lu.vo.User;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/queryUser")
public class QueryServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//设置字符集request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=UTF-8");//执行业务逻辑UserService queryUserService = new UserServiceImpl();List<User> list = queryUserService.queryUser();//转向jsp页面request.setAttribute("userListKey",list);request.getRequestDispatcher("jsp/query.jsp").forward(request,response);}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}

以上,java部分的代码就以完毕,开始编写jsp代码。
第三步: 编写jsp代码
注意:此处的文件名必须与上述转向页面的名字一样,并且包路径也需在转向时显示指出,否则最后结果会出现404的错误。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--Created by IntelliJ IDEA.User: VULCANDate: 2019/8/15Time: 14:44To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
<html>
<head><title>查询列表</title>
</head>
<body>
<table border="1" class="table table-bordered table-hover"><tr class="success"><th><input type="checkbox"></th><th>编号</th><th>姓名</th><th>生日</th><th>性别</th><th>地址</th></tr><c:forEach items="${userListKey}" var="user" varStatus="s"><tr><td><input type="checkbox"></td><td>${user.id}</td><td>${user.username}</td><td>${user.birthday}</td><td>${user.sex}</td><td>${user.address}</td><td><a class="btn btn-default btn-sm" >修改</a>&nbsp;<a class="btn btn-default btn-sm" >删除</a></td></tr></c:forEach></table>
</body>
</html>

这里还需注意一点:在jsp文件的配置里需要显示的指出isELIgnored="false (因为我们需要用jstl和el表达式来获取我们在controller层所传出的内容,而jsp文件默认是ture),否则最后结果会出现500的错误。

最后一步: 配置tomcat
在这里插入图片描述
配置好之后,点击类似甲壳虫的debug按钮,会出现如下界面:
在这里插入图片描述
然后在搜索框上输入在controller层的类上的注解所配置的目录,得到如下结果:
在这里插入图片描述
到此,一个简单的web项目就运行成功了。


http://chatgpt.dhexx.cn/article/m5EECBP1.shtml

相关文章

20个Java小项目,献给嗜学如狂的人,拿来练练手

给大家推荐一条由浅入深的JAVA学习路径&#xff0c;首先完成 Java基础、JDK、JDBC、正则表达式等基础实验&#xff0c;然后进阶到 J2SE 和 SSH 框架学习。最后再通过有趣的练手项目进行巩固。 JAVA基础 1. Java编程语言&#xff08;新版&#xff09; 2. Java进阶之设计模式…

Java面试:java小项目实例

前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。 以下就是一…

java 练手小项目

学习了javaSE的基础&#xff0c;为了巩固对Java面向对象编程&#xff0c;以及java多线程编程的理解&#xff0c;使用swing 写了一个很简单的小项目&#xff0c;源码github地址: https://github.com/pythondever/swing-demo 喜欢的同学可以学习学习 整体代码流程 * 1. JFra…

javaWeb小项目

作为一个学习加Java的小白&#xff0c;非常开心能记录下自己的成长历程。技术有限&#xff0c;请见谅&#xff01; 我主要学习的是Java后端&#xff0c;当我学着做了一个web小项目之后对javaee项目也有了初步见解&#xff01; 老师说万物皆对象&#xff0c;万物皆增删改查。我的…

java练习小项目(一)

学习java有一段时间了&#xff0c;都是处于那种三天打鱼&#xff0c;两天晒网的状态&#xff0c;没有效率&#xff0c;因为方法不对&#xff0c;一直是在看资料&#xff0c;看视频&#xff0c;并没有实际上手项目&#xff0c;就算当时看了&#xff0c;记住了&#xff0c;最后还…

适合Java新手练手的小项目!

对于很多朋友来说&#xff0c;Java是学习编程的开始&#xff0c;也有很多朋友希望通过Java可以找到工作&#xff0c;那么当我们学习了Java的基础知识之后&#xff0c;我们急需要一些项目去帮我们整理一下自己学习的知识点以及提高一下编程能力&#xff0c;对小的工程有一个大致…

Java小项目谁看谁都会(图书管理)

在我之前的几篇博客中对于Java语法&#xff0c;思想等等进行了总结&#xff0c;但是还是差点那味&#xff0c;就是没有将这些知识串起来那么今天的这篇博客我就将Java中&#xff1a;类 对象 封装 继承 多态 抽象类 接口等等知识共同使用完成一个Java的小项目一起来看 介绍 我…

推荐几个适合新手的Java练手项目(好玩又有趣)

Java练手项目第一波 一、坦克大战 链接&#xff1a;https://www.bilibili.com/video/BV1zP4y1b7gw/?spm_id_from333.337.search-card.all.click Java练手小项目&#xff0c;熟练掌握面向对象编程思想、对象池的使用、IO流、多线程、GUI等基础。 二、贪吃蛇 链接&#xff1a;ht…

10个优质的Java练手项目

10个优质的Java练手项目 最近有很多小伙伴私信我说推荐几个毕设项目&#xff0c;还有就是学了Java有一段时间了&#xff0c;想找几个项目想练练手&#xff0c;在面试的时候也可以增加一点项目经验。 在这里我收集了10个可以直接导入运行的项目。 由简单到复杂&#xff0c;分别…

JAVA小项目(一)——一个简单的记帐本【轻松入门,附源码】

目录 1. 实现效果 2.项目架构 3. 细节代码实现 &#x1f31e;哈喽&#xff0c;大家好丫&#xff0c;你们的小郭子又来啦 ~ &#x1f31e;今天我们用java来写一个简单的小项目——【记账本】&#xff0c;嘿嘿 话不多说&#xff0c;直接上干货&#xff0c; 1. 实现效果 2.项目…

【目标定位】基于matlab TDOA GPS混合定位【含Matlab源码 2310期】

⛄一、基于粒子滤波污染源定位简介 1 混合定位的系统结构 本文提出的GPS/TDOA混合定位系统结构可见于图1。 移动终端集成了无线通信模块和GPS接收模块,终端可同时测得通信网络中相对于服务基站的TDOA和GPS卫星到终端的伪距。在CDMA通信系统中,从通信终端测量TDOA的具体方法和…

基于图像的目标检测与定位方法概述

目录 1. 目标检测与定位概念2. 目标检测与定位方法2.1 传统目标检测流程2.2 two-stage检测算法2.2.1 R-CNN2.2.2 two-stage其他算法2.2.2.1 Spatial Pyramid Pooling&#xff08;空间金字塔池化&#xff09;2.2.2.2 Fast-RCNN2.2.2.3 P11 Faster RCNN 2.3 One-Stage2.3.1 YOLO2…

大疆无人机实现目标定位

大疆无人机实现目标定位 大疆无人机回传的实时视频可以帮助飞友观察发现美景&#xff0c;就称为目标吧&#xff0c;你偏偏对目标很感兴趣&#xff0c;迫切想知道目标的位置&#xff0c;最好是经纬度坐标。你查找大疆Document&#xff0c;欣喜地发现大疆提供了定位机体本身的定…

2-基于单目视觉的目标定位

1-四种坐标系描述 一、世界坐标系 客观三维世界的绝对坐标系&#xff0c;也称客观世界坐标系&#xff0c;是以目标为原点建立起来的坐标系。 二、摄像机坐标系 摄像机坐标系是以摄像机的光心作为坐标系的原点&#xff0c;&#xff3a;c&#xff0e;轴与光轴重合&#xff0c;并…

复杂情况下,目标区域定位

复杂情况下&#xff0c;基于halcon的目标区域定位 原始图源代码处理结果 原始图 源代码 dev_close_window () read_image (Image, E:/Halcon_Learn/黑块提取_网络/1.bmp) get_image_size (Image, Width, Height) dev_open_window_fit_size (0, 0, Width, Height, -1, -1, Wind…

目标检测_精确定位_2020

Side-Aware Boundary Localization for More Precise Object Detection 论文&#xff1a;https://arxiv.org/pdf/1912.04260.pdf 代码&#xff1a; 关键文章&#xff1a;Faster R-CNN [37], RetinaNet [25], and Cascade R-CNN 提出问题&#xff1a; 传统的基于锚点和大小…

Opencv中关于特征点匹配定位的问题(二)单目标和多目标定位

单目标和多目标定位 单目标定位多目标定位 单目标定位 在opencv官方提供了一种定位的思路&#xff0c;就是通过匹配的点来获取透视变换矩阵&#xff0c;然后经过透视变换后就能够获得对应的目标的坐标了。 import cv2 import numpy as np# 打开两个文件 img1 cv2.imread(321…

目标定位和检测系列(1):一些基本概念

最近开始学习深度学习中的定位和检测任务。本来打算直接看论文&#xff0c;却发现文章中的的很多基本概念都搞不清楚&#xff0c;于是就自己先梳理了一些定位和检测任务的基本概念。&#xff08;内容主要来自斯坦福大学的CS231课程、吴恩达的deeplearning.ai卷积部分&#xff0…

OpenCV技巧篇——多目标视觉定位(以飞镖定位为例)

OpenCV技巧篇【1】——多目标视觉定位&#xff08;以飞镖定位为例&#xff09; 1、针对问题 多目标视觉定位是指通过计算机视觉技术对一张图片中的多个目标进行识别和定位的过程。本篇将以对飞镖定位为例&#xff0c;提出一个简单有效的多目标定位技巧&#xff0c;最终实现如…

目标定位算法(二)之基于测距的定位算法

文章目录 基于测距的定位算法1.最小二乘原理2.最小二乘定位算法3.基于RSSI测距的定位算法4.基于TOA/TDOA的目标定位算法1&#xff09;基于TOA测距2&#xff09;基于TDOA测距 基于测距的定位算法 非测距的定位算法往往误差较大&#xff0c;提高精度往往依赖于密集的观测站部署。…