JavaWeb之综合小项目

2023-11-18

案例需求: 使用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;
    }

    @Override
    public 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 delete
    public 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();
    @Override
    public 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 {
    @Override
    protected 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);
    }

    @Override
    protected 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: VULCAN
  Date: 2019/8/15
  Time: 14:44
  To 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项目就运行成功了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb之综合小项目 的相关文章

  • 仙岛求药 —— dfs 与 bfs求解

    样例输入1 8 8 样例输出1 10 样例输入2 9 6 样例输出2 1 dfs ps 使用dfs会运行超时 30组测试数据只能通过部分 其实这种最短路径 最少操作的问题最好还是靠bfs解决 import java util Scanner
  • 求最大连续和的几种方法

    本文内容参考 算法竞赛入门经典第2版 220 223页 Q 给出一个长度为 n n n的序列 A 1 A
  • VMware CentOS 虚拟机 Hadoop集群网络 配置静态IP

    一 虚拟机集群IP分配与规划 二 操作步骤 1 打开虚拟机 点击导航栏上面的 编辑 gt 虚拟网络编辑器 2 首先选中上面的VMnet8 不要勾选 使用本地DHCP服务将IP地址分配给虚拟机 D 在到下面的 子网IP 处编辑IP地址 可以改

随机推荐

  • 兼容ios不支持的日期格式

    前段时间开发了一个关于订单展示的页面 要求根据时间筛选出离当前时间最近的订单信息进行展示 因为服务器返回的时间格式都是 YYYY MM DD 也没想那么多 直接拿过来就用了 在安卓上排序都很正常 在测试的时候发现苹果手机展示的订单根本就没有
  • MySQL 查询数据库中所有表的表名、备注

    目录 前言 一 SQL语句 二 SQL实现 前言 查询数据库所有表的表名 备注 其实也是比较常见的操作 比如数据库管理人员可能会经常使用 像我们后端开发人员来说的一个应用场景就是基础代码生成器了 需要获取指定数据库中所有表名及备注进行展示
  • 微信小程序---目录结构

    一 总体目录 大体介绍 1 在utils中定义方法 工具等 主要使用common js暴露接口 2 pages中放我们的页面 3 eslintrc js文件在代码质量审查的时候的代码依赖 4 app js app json app wxss
  • 锚点定位的三种解决方法

    一 学习锚点定位之前的知识储备 1 1 号的作用 代表网页中的一个位置 其右面的字符 就是该位置的标识符 比如 http www example com index html print 就代表网页index html的print位置 浏览
  • Mac 扬声器热插拔

    与windows的IMM接口类似 Mac也采用注册 监听回调的方式来拿到各种设备的插入 拔出 设备采样率 声道的变化等事件 以下以Mac扬声器插拔为例 include
  • Android Studio下修改Module名称

    最近才开始使用Android Studio 相比Eclipse AS有它的亮点和特色 也有它的不足 AS对项目目录的管理说实话我是真的不太喜欢 也可能是才开始用不太习惯吧 好了 废话不多说 闲话少续 下面开始正文 相信大家在使用AS创建Pr
  • tiled卷积神经网络(tiled CNN)

    这个结构是10年Quoc V Le等人提出的 这里的tiled 按照 Lecun的解释是Locally connect non shared 即是局部连接 而且不是共享的 这是针对于权重来说的 本文翻译如有错误 还望指正 谢谢 这篇论文是1
  • 【Vue】前端状态管理之Vuex全解析

    Vuex状态管理全解析 一 状态管理 1 1 状态管理是什么 1 2 为什么要用状态管理 1 2 1 生活中的例子 1 2 2 代码中的例子 1 3 三大框架的状态管理 二 Vuex 2 1 Vuex是什么 2 2 使用Vuex的好处 三
  • struct和typedef struct彻底明白了

    struct和typedef struct 分三块来讲述 1 首先 注意在C和C 里不同 在C中定义一个结构体类型要用typedef typedef struct Student int a Stu 于是在声明变量的时候就可 Stu stu
  • leetcode分类刷题:哈希表(Hash Table)(一、简单的两数之和)

    1 当需要快速判断某元素是否出现在序列中时 就要用到哈希表了 2 本文针对的总结题型为简单的两数之和问题 这种题目的难易程度取决于求解的目标 如果需要返回的是答案的索引 个数 那么就相对简单一些 如果需要返回答案的值构成的二元组 三元组之类
  • 通过网页版堡垒机访问服务器失败,堡垒机远程连接服务器被拒绝

    堡垒机远程连接服务器被拒绝 内容精选 换一换 云堡垒机配置了FTP SFTP远程备份 报请检查服务器密码或网络连接情况错误 不能启动远程备份 选择备份具体某一天日志 提示备份正在执行 但远程服务器未接收到该备份文件 原因一 云堡垒机配置的F
  • Ajax中的XMLHttpRequest对象详解

    原文地址 http www cnblogs com shunyao8210 archive 2008 11 24 1339718 html XMLHttpRequest对象是Ajax技术的核心 在Internet Explorer 5中 X
  • vlfeat 特征检测

    https blog csdn net wangxinsheng0901 article details 79676081 https github com dougalsutherland vlfeat ctypes
  • 【电脑配置】1、Chrome 设置深色模式

    1 在 Chrome 页面地址输入 chrome flags enable force dark 2 将 Dark Mode 设置为 Enabled 3 点击 Relaunch
  • Copy 数据到ppt 中保持对齐

    Copy 一组数据到PPT里 但是有可能在PPT里无法对齐 可以先拷贝到xls里 各个数据项会对齐到单元格 再拷贝到PPT后 这里即可对齐
  • Apifox生成接口文档

    一 http接口 点击添加接口 编辑接口相关信息 点击保存 点击修改文档 点击智能识别 请求示例智能识别 编辑请求参数信息 返回响应智能识别 可添加多个 成功 异常A 异常B等 编辑响应参数信息 添加响应示例 参照返回响应添加 点击保存 接
  • python书写格式_python并的写法

    广告关闭 腾讯云11 11云上盛惠 精选热门产品助力上云 云服务器首年88元起 买的越多返的越多 最高返5000元 最近倒腾python 希望能坚持下去吧发现了个叫codecademy的网站 还不错http www codecademy c
  • 服务器内部操作系统,服务器内部操作系统

    服务器内部操作系统 内容精选 换一换 Atlas 800 训练服务器 型号 9000 安装上架 服务器基础参数配置 安装操作系统等操作请参见 Atlas 800 训练服务器 用户指南 型号9000 风冷 或 Atlas 800 训练服务器
  • Java——string[] 和List的区别

    一直对string 和List
  • JavaWeb之综合小项目

    案例需求 使用Java程序操作数据库 并把结果显示在jsp页面上 这里只做查询操作 增删改操作类似如此 使用工具 maven idea tomcat MySQL数据库 使用技术 javabean servlet jsp 准备阶段 第一步 使