同时用到,网页,java程序,数据库的web小应用

具体实现功能:通过网页传输添加用户的请求,需要通过JDBC来向 MySql 添加一个用户数据

第一步,部署所有需要用到的工具

IDEA(2021.1),Tomcat(9或10),谷歌浏览器,MySql,jdk(17)

第二步,创建java项目,提前部署数据库

在 idea 中新建一个空的java项目:

我创建的数据库名为 learnbase,执行 use learnbase 命令可以使用该数据库

部署好需要连接的数据库表单,用户表 表名为 t_user,并添加好适当的数据(也可以不添加):

第三步,为项目添加一个java模块

添加一个普通的 java( jdk17)的模块即可

第四步,右键单击模块,将其变为 javaEE 的模块

右键点击后,选择Add Fra... Sup...,会弹出如下窗口

我们勾选 Web App... 后点击 OK

完成之后新增的 web 文件夹便是这个项目的根目录

第五步,将 tomcat 的 lib 文件夹中的 servlet.api.jar 和 jsp.api.jar 导入到 idea 中

file -> Project Stu... -> 找到刚刚创建的模块 -> dependen... -> + -> JAR or ... -> 找到自己安装的 tomcat 目录下的 lib -> 将servlet.api.jar,jsp.api.jar引入 -> apply

操作完毕后 jar 包会被导入到模块中:

第六步,在 src 下创建一个 servlet 文件夹,创建 servlet 实现类

第七步,完成代码的编写

ait + enter 实现 servlet 接口中的所有抽象方法

在 service 方法中编写业务代码,由于需要连接数据库使用JDBC,我们需要先引入 JDBC 相关的 jar 包,我们在 WEB-INF 目录下新建一个 lib 文件夹,将 jar 包复制到里面,右键单击 jar 包,选择 Add as Lib...,不会 JDBC 编程的可以先看我之前写的文章:JDBC 教程

引入依赖后就可以开始编写代码了

package servlet;

import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class UserServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        Connection con = null;
        PreparedStatement ps = null;
        //建立连接
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/learnbase","root","1234");
            System.out.println("连接数据库成功了");
            //获取数据库操作对象
            ps = con.prepareStatement("insert into t_user values(hajimi,wow,66666)");
            //执行sql
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            if(ps != null){
                try {
                    ps.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(con != null){
                try {
                    con.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
        //加入用户完毕,响应给浏览器
        servletResponse.setContentType("text/html");
        PrintWriter out = servletResponse.getWriter();
        out.print("<p>option succeed!!!</p>");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

第八步,在 xml 文件中完成申请路径和实现类的对接

双击打开WEB-INF文件夹中的 mxm 文件,编写对应的反射

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>userServlet</servlet-name>
        <!--设置访问路径所对应的实现类-->
        <servlet-class>servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>userServlet</servlet-name>
        <!--设置浏览器的访问路径-->
        <url-pattern>/a</url-pattern>
    </servlet-mapping>
    
</web-app>

第九步:让 idea 关联 tomcat 服务器

点击右上角的 Add Config.... -> + -> Tomcat Server - Local  -> configure -> 选择本地的 Tomcat 路径 -> 

先别着急 OK,接下来是部署

点击 Deployment -> + -> Art... -> 在最下端给项目设置浏览器的访问名称

 配置完后就可以点击右上角的 debug 或 运行 按钮启动 Tomcat 了(建议使用debug)

第十步:浏览器输入网址传递请求,完成数据的插入则表示运行成功

可能会遇到的问题
1.在访问时出现500错误

出现这个错误大概率是版本不适配的问题

检查环境变量的jdk版本和模块所使用的版本是否一致,若不一致,需要将jdk版本修正后重新新建一个项目,再从新部署一次

检查是否使用Tomcat10及其以上的版本,但是jdk版本却只有8及其以下,Tomcat较新的版本与Java较老的版本会出现不适配的情况

2.在访问时出现404错误

这是路径设置的问题,检查html文件和xml文件的路径是非正确,点击绿色小锤子旁边的按钮,查看浏览器输入的路径和项目名是否匹配

3.在访问时出现405错误

这是请求和响应不匹配所产生的错误,检查接收参数的名称是否和html设置的name属性的名称一致,检查设置的发送方式是否正确(本次请求使用的是post)

4.连接不到数据库

检查是否导入 数据库的 jar 包到WEB-INF下的 lib 文件夹中,一定要是 WEB-INF下的 lib 文件夹 tomcat 才能准确的找到,lib 文件夹初始是没有的,需要自己创建

检查引入 jar 包依赖后是否完成操作:右键单击依赖,选择 Add as Lib... 选项,若没有做这个操作则没有将 jar 包真正的引入项目中,完成这一步操作后 jar 包会呈现可展开状态,这才表示成功引入 jar 包依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/799785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Celery 是一个简单、灵活且可靠的分布式系统——python库

目录 引言 Celery 是什么&#xff1f; 安装 Celery 配置 Celery 创建任务 运行 Celery Worker 调用任务 更多示例 示例 1&#xff1a;发送电子邮件 示例 2&#xff1a;图片处理 示例 3&#xff1a;数据处理 结论 引言 今天我们来分享一个超强的 python 库&#xf…

微信小程序下载

首先进入微信网站链接&#xff1a;微信公众平台 (qq.com) 下载开发工具&#xff1a; 下载 / 稳定版更新日志 (qq.com) 下载稳定版

AV1技术学习:Translational Motion Compensation

编码块根据运动矢量在参考帧中找到相应的预测块&#xff0c;如下图所示&#xff0c;当前块的左上角的位置为(x0, y0)&#xff0c;在参考帧中找到同样位置(x0, y0)的块&#xff0c;根据运动矢量移动到目标参考块&#xff08;左上角位置为&#xff1a;(x1, y1)&#xff09;。 AV1…

C语言之带环链表

带环链表是数据结构链表中的一个经典问题&#xff0c;这里我们研究该问题分为两个方向&#xff1a;链表是否带环、返回链表的入环节点。 下面我们通过两个题目来分析带环链表&#xff1a; 1.判断链表是否带环 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 那么我们…

# Redis 入门到精通(四)-- linux 环境安装 redis

Redis 入门到精通&#xff08;四&#xff09;-- linux 环境安装 redis 一、linux 环境安装 redis – 基于 Linux 安装 redis 1、基于 Center 0S7 或者 unbunt-18.04 安装 Redis 1&#xff09;下载安装包wget http://download.redis.io/releases/redis-?.?.?.tar.gz 如&…

Unity最新第三方开源插件《Stateful Component》管理中大型项目MonoBehaviour各种序列化字段 ,的高级解决方案

上文提到了UIState, ObjectRefactor等,还提到了远古的NGUI, KBEngine-UI等 这个算是比较新的解决方法吧,但是抽象出来,问题还是这些个问题 所以你就说做游戏是不是先要解决这些问题? 而不是高大上的UiImage,DoozyUI等 Mono管理引用基本用法 ① 添加Stateful Component …

每日复盘-20240715

20240715 六日涨幅最大: ------1--------300807--------- 天迈科技 五日涨幅最大: ------1--------300807--------- 天迈科技 四日涨幅最大: ------1--------300807--------- 天迈科技 三日涨幅最大: ------1--------300713--------- 英可瑞 二日涨幅最大: ------1--------3007…

前端Vue组件化实践:自定义加载组件的探索与应用

在前端开发领域&#xff0c;随着业务逻辑复杂度的提升和系统规模的不断扩大&#xff0c;传统的开发方式逐渐暴露出效率低下、维护困难等问题。为了解决这些挑战&#xff0c;组件化开发作为一种高效、灵活的开发模式&#xff0c;受到了越来越多开发者的青睐。本文将结合实践&…

代码随想录训练营第三十六天 1049最后一块石头的重量II 494目标和

第一题&#xff1a; 原题链接&#xff1a;1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 首先确认这是一道01背包问题的题目&#xff0c;如何转换&#xff1a;剩下尽可能小的重量&#xff0c;如何剩下呢&#xff1f;跟分割等和子集很…

基于RAG大模型的变电站智慧运维-第十届Nvidia Sky Hackathon参赛作品

第十届Nvidia Sky Hackathon参赛作品 1. 项目说明 变电站是用于变电的设施&#xff0c;主要的作用是将电压转化&#xff0c;使电能在输电线路中能够长距离传输。在电力系统中&#xff0c;变电站起到了极为重要的作用&#xff0c;它可以完成电能的负荷分配、电压的稳定、容错保…

基坑安全:自动化监测系统的革新力量

在日新月异的基坑工程领域&#xff0c;基坑安全自动化监测系统犹如一位守护者&#xff0c;以其独特的优势&#xff0c;为工程的安全与质量保驾护航。该系统集先进的测量仪器、计算机技术与现代传感技术于一体&#xff0c;对基坑的围护结构及周边环境进行全方位、高精度的实时监…

【C++基础】初识C++(1)

目录 一、认识C 1.1 C 相关概念 1.2 C的发展 1.3 C的关键字 1.4 第一个程序 二、命名空间 2.1 namespace的定义 2.2 命名空间的使用 三、C输入和输出 四、缺省函数 五、函数重载 一、认识C 1.1 C 相关概念 1983年&#xff0c;Bjarne Stroustrup在C语⾔的基础上…

内网安全:权限维持的各种姿势

1.Linux权限维持 2.Windows权限维持 目录&#xff1a; 一.Linux权限维持&#xff1a; 1.webshell&#xff1a; 2.定时任务&#xff1a; 3.SUID后门&#xff1a; 4.SSH Key免密登录后门&#xff1a; 5.添加用户后门&#xff1a; 二.Windows权限维持 1.计划任务后门&…

NetSuite RPA技术实践

近期有同学提出一个需求。 “需要存取的報表是存貨分類帳(stock ledger)&#xff0c;將查到的各個[Item|Location]作為一組key&#xff0c;分別將報表中的「期末庫存量」「期末平均成本」「期末庫存量價值」這三欄的值&#xff0c;在每個月月底的時候自動將這個報表的這三欄數…

rollup打包工具

rollup打包工具 在学习vite和vue3源码的时候&#xff0c;接触到了rollup&#xff0c;所以过来学习一下 什么是rollup rollup是一个模块化的打包工具&#xff0c;会将javascript文件进行合并。比起webpack&#xff0c;webpack在打包的时候会进行代码注入(保障兼容性)&#xf…

位图——哈希思想的应用

三、位图 0、位图概念 所谓位图&#xff0c;就是用每一个比特位来存放某种状态&#xff08;0或1&#xff09;&#xff0c;是一种哈希思想的应用&#xff0c;适用于海量数据&#xff0c;整数&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。&#xff08;注意…

GaussDB DWS 详解

文章目录 GaussDB DWS 详解一、简介二、DWS的分布式架构架构概述关键组件 三、分布式查询数据查询流程SQL执行的示例 批注&#xff1a;本文引鉴了Forlogen博主的一些内容&#xff0c;并加以补充&#xff0c;以供学习了解。 GaussDB DWS 详解 一、简介 DWS(Data Warehouse Ser…

数据库-三范式

第一范式 1 数据库所有字段都只有单一属性。 2 单一属性由基本数据类型构成。 3 数据库的表都是二维的行与列。 例如上面的例子就不满足第一范式&#xff0c;因为是可以继续拆分的&#xff0c;拆分为更多的属性。 第二范式 1 符合第一范式 2 表必须有个主建 3 其它字段可以…

《0基础》学习Python——第十一讲__时间函数

一、时间函数是Python中的内置函数和模块&#xff0c;用于处理日期和时间相关的操作。以下是常用的时间函数的种类和用法&#xff1a; 1、time.time()&#xff1a;返回当前时间的时间戳。 时间戳&#xff08;timestamp&#xff09;是一种表示日期和时间的方式&#xff0c;它是一…

Linux--USB驱动开发(二)插入USB后的内核执行程序

一、USB总线驱动程序的作用 a&#xff09;识别USB设备 1.1 分配地址 1.2 并告诉USB设备(set address) 1.3 发出命令获取描述符 b&#xff09;查找并安装对应的设备驱动程序 c&#xff09;提供USB读写函数 二、USB设备工作流程 由于内核自带了USB驱动,所以我们先插入一个U…