【JavaWeb】手把手教你Eclipse、IDEA集成Tomcat构建Web应用(三)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 【JavaWeb】手把手教你Eclipse、IDEA集成Tomcat构建Web应用(三)

三、使用Maven构建 Web项目


与二、IDEA集成 Tomcat基本一致,可以简单了解。


1、创建Maven Web项目


Tomcat中运行的绝大多数都是Web项目,而使用Maven工具(Mavan学习笔记链接)能更加简单快捷的把Web项目给创建出来,所以我们要学会如何构建Maven的Web项目。


在真正创建Maven Web项目之前,我们先要知道Web项目长什么样子,具体的结构是什么?


1.1 Web项目结构


Web项目的结构分为:开发中的项目和开发完可以部署的Web项目,这两种项目的结构是不一样的,我们一个个来介绍一下:


Maven Web项目结构: 开发中的项目


95da31375469455621326449a89a8662_image-20220908112622198.png


开发完成部署的Web项目


e972e25b2128b35d6e1e5b0efb883f8c_1627202903750.png


开发项目通过执行Maven打包命令package,可以获取到部署的Web项目目录

编译后的Java字节码文件和resources的资源文件,会被放到WEB-INF下的classes目录下

pom.xml中依赖坐标对应的jar包,会被放入WEB-INF下的lib目录下


1.2 创建Maven Web项目


介绍完Maven Web的项目结构后,接下来使用Maven来创建Web项目,创建方式有两种:使用骨架和不使用骨架


使用骨架


具体的步骤包含:


1.创建Maven项目


10e99feb59b2d4e7a74b7b395072fa44_1627227574092.png


2.选择使用Web项目骨架


9cf12dbb1fa84d1343cb5c0f6a4b4fdc_2a83a325000bcef563fba883c82648eb.png


3.输入Maven项目坐标创建项目


33df18ca4614016e146a2566bc4f4b56_c17c13d2aa8216be5eefd2c0573876ef.png


4.确认Maven相关的配置信息后,完成项目创建


ec2eac373cbd46449f449c565419109e_f8cd8b3ce18f3f1a89f9eb751112dbe7.png


5.删除pom.xml中多余内容


fd8fa3c4fb9704bb080a913594d0d31e_5d2bd5f70b6c686d69f2fbce8599e4ab.png


6.补齐Maven Web项目缺失的目录结构


585eabbfb16e026bfb57efd6cf50b7c8_96c196bcb065338a8c0e11cbe2e00299.png




不使用骨架


具体的步骤包含:


1.创建Maven项目


2.选择不使用Web项目骨架


3.输入Maven项目坐标创建项目


4.在pom.xml设置打包方式为war


5.补齐Maven Web项目缺失webapp的目录结构


6.补齐Maven Web项目缺失WEB-INF/web.xml的目录结构


创建Maven项目


d8f45d31ff7d31b283c0d20bb19e2027_3ac337f6e0c8afb3ae2a43ef55dbcc62.png


选择不使用Web项目骨架


de27b1aedbc810bf93b28c53e7fca2d2_84cade2e813acc1166e4e0dcd6d13284.png


输入Maven项目坐标创建项目


b469feed23e011b5cd5d47b5669b51ea_35ed7c97cb6b77ecedaa58c84e2684a1.png


在pom.xml设置打包方式为war,默认是不写代表打包方式为jar


06ac82dd9677043a07e6b2f412bec9d7_14b5dc8694a3856ea410ae9c15eb45fe.png


补齐Maven Web项目缺失webapp的目录结构



5d2e79cee7c5edcf054d6960c2bc86b7_7cd2d3f592cc07cbd59a201e6ab5d67d.png


补齐Maven Web项目缺失WEB-INF/web.xml的目录结构


6e4af449bea9279e28fe54c9116c0009_54e4597ff4653792f34ffe50a0b6a107.png


补充完后,最终的项目结构如下:


77c247ec77ed386d5b067a99ad4d2c90_f3b881a8620213fac530d29df3d7d087.png


上述两种方式,创建的web项目,都不是很全,需要手动补充内容,至于最终采用哪种方式来创建Maven Web项目,都是可以的,根据各自的喜好来选择使用即可。


总结


1.掌握Maven Web项目的目录结构


2.掌握使用骨架的方式创建Maven Web项目


dca73ed1f0491435713919699b4337e7_b46ab4c37f8a3eba28f40feea435c1a4.png


3.掌握不使用骨架的方式创建Maven Web项目


b435d77c46e8ac22e3784101a54a1f2c_3626bb0ea44fa6dc2a2f523a394321c5.png


2、IDEA集成本地Tomcat


Maven Web项目创建成功后,通过Maven的package命令可以将项目打包成war包,将war文件拷贝到Tomcat的webapps目录下,启动Tomcat就可以将项目部署成功,然后通过浏览器进行访问即可。

然而我们在开发的过程中,项目中的内容会经常发生变化,如果按照上面这种方式来部署测试,是非常不方便的

所以我们需要IDEA中能快速使用Tomcat,即在IDEA中集成本地Tomcat,将刚才本地安装好的Tomcat8集成到IDEA中,完成项目部署,具体的实现步骤


打开添加本地Tomcat的面板


9d6f504b416aba14fb6a3939fc99d5e7_7721de56b77410d6060ff784ef10be9b.png



指定本地Tomcat的具体路径


70e03ef9d9c1ac9fcffaf1a0857c734c_036e2e0c41a4a47a557740d0bae4f291.png


修改Tomcat的名称,此步骤可以不改,只是让名字看起来更有意义,HTTP port中的端口也可以进行修改,比如把8080改成80


32d813f99ed9265cb113b3698a86a570_8584e293f39c36bf467c861578a15e18.png


将开发项目部署项目到Tomcat中


c499c9aebcba2817adf00542288825c8_79fd55bf66c2959de1c6d0094045ffcd.png


扩展内容: xxx.war和 xxx.war exploded这两种部署项目模式的区别?


war模式是将WEB工程打成war包,把war包发布到Tomcat服务器上


war exploded模式是将WEB工程以当前文件夹的位置关系发布到Tomcat服务器上


war模式部署成功后,Tomcat的webapps目录下会有部署的项目内容


war exploded模式部署成功后,Tomcat的webapps目录下没有,而使用的是项目的target目录下的内容进行部署


建议大家都选war模式进行部署,更符合项目部署的实际情况


部署成功后,就可以启动项目,为了能更好的看到启动的效果,可以在webapp目录下添加a.html页面


a7b6ca90b41f2fd553385159591e258b_9b47a464518929e3a11db7ee187aa041.png


启动成功后,可以通过浏览器进行访问测试


27946be16f1ad8014047dd629e87a9e9_a5fe2a1a6486662eab02224fe81463ed.png


最终的注意事项


1bf11e4eb8b0ddb20f3c0f2f73a45eff_1f7d98bc05209116116e0e2130b75f55.png


至此,IDEA中集成本地Tomcat进行项目部署的内容我们就介绍完了,整体步骤如下,大家需要按照流程进行部署操作练习。


8969c8ef6ffb40be8653ee48157ea6bd_d6055486aad9403f0b3578aad0c8435d.png


四、示例代码


Eclipse工程代码

sql


/*
 Navicat Premium Data Transfer
 Source Server         : root
 Source Server Type    : MySQL
 Source Server Version : 80026
 Source Host           : localhost:3306
 Source Schema         : javaweb
 Target Server Type    : MySQL
 Target Server Version : 80026
 File Encoding         : 65001
 Date: 07/09/2022 20:52:25
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL,
  `name` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `password` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `SEX` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `age` int NULL DEFAULT NULL,
  `brithday` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'sunming', '123456', '男', 18, '2022-09-07 00:00:00');
SET FOREIGN_KEY_CHECKS = 1;



jdbc.DBConnection.java


package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBConnection {
  private static final String driverName = "com.mysql.cj.jdbc.Driver";
  private static final String url = "jdbc:mysql://localhost:3306/testDB?"
    + "characterEncoding=utf8&useSSL=false&serverTimezone=UTC"
    + "&rewriteBatchedStatements=true";
  private static final String user = "root";
  private static final String password = "root";
  private DBConnection() {
  }
  static {
  try {
    Class.forName(driverName);
  } catch (ClassNotFoundException e) {
    e.printStackTrace();
  }
  }
  public static Connection getConnection() throws SQLException {
  return DriverManager.getConnection(url, user, password);
  }
  public static void close(ResultSet rs, Statement st, Connection conn) {
  try {
    if (rs != null) {
    rs.close();
    }
  } catch (SQLException e) {
    e.printStackTrace();
  } finally {
    try {
    if (st != null) {
      st.close();
    }
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    if (conn != null) {
      try {
      conn.close();
      } catch (SQLException e) {
      e.printStackTrace();
      }
    }
    }
  }
  }
}



dao.UserLogin.java


package jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import util.DBConnection;
public class UserLogin {
  public static boolean validlogin(String name, String password)throws SQLException{
  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  boolean successflag=false;
  try {
    // 2、获得连接对象
    conn = DBConnection.getConnection();
    // 定义sql语句
    String sql = "select * from user where name='"+name+"' and password='"+password+"'";
    // 3、创建语句对象
    st = conn.createStatement();
    // 4、遍历结果集(此处不需要)
    rs=st.executeQuery(sql);
    if(rs.next()==true) successflag=true;
  } finally {
    // 5、关闭资源对象
    DBConnection.close(rs, st, conn);
  }
  return successflag;
  }
}


通过这一篇文章的学习,我们学会了在Eclipse、IDEA中集成Tomcat构建Web(Maven Web)的方式,为JavaWeb的学习提供了好的工具,后面我们首先复习DAO层设计:JDBC。Mybatis,之后开始学习Http以及Web核心技术Serlet。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
5月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
868 12
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
792 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
8月前
|
机器学习/深度学习 数据采集 存储
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
本文探讨了朴素贝叶斯算法在处理混合数据类型中的应用,通过投票和堆叠集成方法构建分类框架。实验基于电信客户流失数据集,验证了该方法的有效性。文章详细分析了算法的数学理论基础、条件独立性假设及参数估计方法,并针对二元、类别、多项式和高斯分布特征设计专门化流水线。实验结果表明,集成学习显著提升了分类性能,但也存在特征分类自动化程度低和计算开销大的局限性。作者还探讨了特征工程、深度学习等替代方案,为未来研究提供了方向。(239字)
238 5
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
|
6月前
|
人工智能 运维 负载均衡
F5发布业界首创集成式应用交付与安全平台,开启ADC 3.0新时代
F5发布业界首创集成式应用交付与安全平台,开启ADC 3.0新时代
188 0
|
6月前
|
人工智能 自然语言处理 分布式计算
AI 驱动传统 Java 应用集成的关键技术与实战应用指南
本文探讨了如何将AI技术与传统Java应用集成,助力企业实现数字化转型。内容涵盖DJL、Deeplearning4j等主流AI框架选择,技术融合方案,模型部署策略,以及智能客服、财务审核、设备诊断等实战应用案例,全面解析Java系统如何通过AI实现智能化升级与效率提升。
534 0
|
8月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
263 1
|
9月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
356 7
|
机器人 应用服务中间件 API
轻松集成私有化部署Dify文本生成型应用
Dify 是一款开源的大语言模型应用开发平台,融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者能快速搭建生产级生成式 AI 应用。通过阿里云计算巢,用户可以一键部署 Dify 社区版,享受独享的计算和网络资源,并无代码完成钉钉、企业微信等平台的应用集成。本文将详细介绍如何部署 Dify 并将其集成到钉钉群聊机器人和企业微信中,帮助您轻松实现 AI 应用的定义与数据运营,提升工作效率。
5520 65
轻松集成私有化部署Dify文本生成型应用
|
8月前
|
缓存 前端开发 定位技术
通义灵码2.5智能体模式实战———集成高德MCP 10分钟生成周边服务地图应用
通义灵码2.5智能体模式结合高德MCP服务,实现快速构建周边服务地图应用。通过自然语言需求输入,智能体自动分解任务并生成完整代码,涵盖前端界面、API集成与数据处理,10分钟内即可完成传统开发需数小时的工作,大幅提升开发效率。
530 0

推荐镜像

更多