当前位置: 首页 > news >正文

Maven、JAVAWeb、Servlet

知识点目标

1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目
2.网络基础知识
3、Servlet

Maven

Maven是什么

Maven是Java的项目管理工具,可以构建,打包,部署项目,还可以管理依赖

为什么要用Maven?

​ 1)用Eclipse开发java项目能否直接导入IDEA?

​ Maven可以规范项目的目录结构,在不同IDE可以直接导入

​ 2)自动管理依赖,帮助下载jar包

Maven安装

1)解压maven

2)配置环境变量

我的电脑右键属性—高级系统设置
在这里插入图片描述

环境变量

在这里插入图片描述

新建环境变量

在这里插入图片描述

添加PATH变量

在这里插入图片描述

运行cmd,输入 mvn -v

在这里插入图片描述

Maven项目结构

新建Maven项目

在这里插入图片描述

设置组id,和项目id

在这里插入图片描述

点击finish

在这里插入图片描述

项目目录结构:

在这里插入图片描述

1)src/main/java 存放Java源码

2)src/main/resources 存放资源(配置文件)

3)src/test/java 存放单元测试

4)pom.xml 核心配置

pom文件

pom(Project Object Model) 项目对象模型

pom.xml 文件结构

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--    项目组id--><groupId>com.hopu</groupId><!--    项目id--><artifactId>javawebdemo</artifactId><!--    版本号--><version>1.0-SNAPSHOT</version><!--    打包方式 三种:jar、war、pom--><!--    jar一般项目,直接运行或引入到其它项目--><!--    war 部署服务器--><!--    pom 项目需要被继承--><packaging>jar</packaging><!--    自定义属性值--><properties></properties><!--    依赖--><dependencies>
<!--        <dependency>-->
<!--            <groupId></groupId>-->
<!--            <artifactId></artifactId>-->
<!--        </dependency>--></dependencies>
</project>

Maven的常用命令

在这里插入图片描述

Maven的生命周期:

  • clean 清理项目,删除之前创建的jar文件
  • validate 打包前验证
  • compile 编译项目,源代码编译为字节码
  • test 执行单元测试
  • package 项目打包,生成jar、war文件
  • verify 部署前验证
  • install 将打包好的文件,安装到仓库中
  • site 站点配置,生成报告
  • deploy 部署项目到服务器

Maven的依赖管理

Maven可以帮助开发者管理需要的jar包,自动下载依赖包

Maven的仓库

用于保存jar的目录

分为三种:

1)本地仓库,本地存放jar包的目录

2)远程仓库,在远程服务器上存放jar包

3)中央仓库,Maven官方仓库

一般下载jar包的流程:先看本地仓库是否有jar包,有直接返回,没有再去远程仓库找,找到下载到本地仓库,返回,没有再去中央仓库找

配置阿里云仓库镜像,加速jar包的下载

settings.xml的配置


配置本地仓库的路径
| Default: ${user.home}/.m2/repository
<localRepository>D:/repo</localRepository>阿里云镜像<mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        </mirror>
</mirrors>

打开idea的配置选项

在这里插入图片描述

修改Maven的目录以及settings文件

在这里插入图片描述

依赖的配置

在pom.xml中配置依赖

    <!--    依赖--><dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency></dependencies>

项目的继承和聚合

继承:

Maven中一个项目可以继承另一个项目

子项目可以继承父项目的依赖、属性等配置

父项目的打包方式必须是pom

子项目指定父项目
<parent><artifactId>javawebdemo</artifactId><groupId>com.hopu</groupId><version>1.0-SNAPSHOT</version>
</parent>

聚合:

一个项目可以包含多个子项目,一起打包

<!--    聚合的子模块-->
<modules><module>demo1</module><module>demo2</module><module>demo3</module>
</modules>

依赖冲突的调解

项目导入jar包时,项目中可能会存在同样类型但版本不同的jar包,这就是依赖冲突,最终导致项目无法运行。

那么Maven是如何解决依赖冲突问题的呢?

1)最短路径原则

首先我们要知道,依赖存在传递性,也就是:A依赖B,B依赖C,那么A也依赖C

如果存在下面的情况:A同时存在X依赖的1.0和2.0版本,按最短路径原则,A将使用X2.0版本

A—>B—>C—>X(1.0)

A—>D—>X(2.0)

2)最先声明原则

那么如果路径长度相同怎么办呢?按最先声明原则,哪个依赖在pom中先出现就使用哪个,那么就是X1.0

A—>B—>X(1.0)

A—>D—>X(2.0)

使用Maven构建JavaWeb项目

1)将项目的打包方式改为war

<packaging>war</packaging>

2)打开项目模块设置

在这里插入图片描述

2)在Facets添加web

在这里插入图片描述

  1. 点击create artifact

在这里插入图片描述

4)跳转到aritifact页面

在这里插入图片描述

5)点击Add Config 添加tomcat配置

在这里插入图片描述

6)点击configure选择tomcat

在这里插入图片描述

7)点击deployement 添加部署项目

在这里插入图片描述

8)删除路径

在这里插入图片描述

9)点击Facets页面,点击红色文字,创建webapp目录

在这里插入图片描述

10)在webapp目录创建index.jsp

在这里插入图片描述

11)加入html代码

在这里插入图片描述

12)点击运行tomcat

在这里插入图片描述

网络基础知识

JavaWeb也叫JavaEE,主要用于开发B/S架构

C/S架构和B/S架构

C/S 架构

Client/Server 客户端/服务器模式

​ 需要安装客户端,客户端和服务器进行通信

​ 如:QQ、微信、网络游戏等

​ 优点:

​ 1)客户端性能强大,用户体验好

​ 缺点:

​ 1)单独安装客户端

​ 2)经常升级、更新比较麻烦

B/S 架构

Browser/Server 浏览器/服务器模式

​ 不需要安装客户端,通过浏览器直接访问服务器

​ 如:电商网站、政府网站、企业管理系统、ERP等

​ 优点:

​ 1)使用方便,不需要用户安装客户端,不需要更新

​ 缺点:

​ 1)浏览器性能有限,不能呈现复杂的效果

​ 适用于:用户人数特别大,不需要特别高的视觉效果

HTTP协议

B/S的项目主要通过HTTP协议进行网络通信,采用请求/响应模式

用户使用浏览器向服务器发送请求,服务器查询后将数据返回给浏览器

在这里插入图片描述

HTTP协议的URL有几个部分组成:

http://域名:端口/资源路径?参数=值
如:
https://cn.bing.com/search?q=hello&form=ANNTH1第一部分:协议
http://或https://属于协议第二部分:域名
cn.bing.com第三部分:端口
浏览器默认的端口是80

http请求

http请求报文

在这里插入图片描述

请求方法:

  • GET 参数会放到URL里面,安全性差,长度有限,只能传输字符串,适合查询
  • POST 参数不在URL里面,安全性较高,长度没有限制,数据类型没有限制,适合敏感数据,大量数据传输
  • PUT 执行更新
  • DELETE 执行删除
  • HEAD 查询头部信息
  • OPTION 查询参数信息
  • TRACE 跟踪操作
  • CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

http响应

http响应报文

在这里插入图片描述

常见响应码:

200 OK 成功

404 资源没有找到

401 没有通过登录验证

403 没有权限

405 请求方法有错误

400 请求参数格式问题

500 服务器内部异常

503 服务没有找到

Servlet

Servlet是服务器小程序,是运行在服务器中的Java程序

入门案例

1)导入依赖

        <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency>

2)简单的Servlet

/*** 自定义Servlet*/
public class MyServlet extends HttpServlet {//处理get请求@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("你访问了GET方法");}//处理post请求@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("你访问了POST方法");}
}

3)注册

  1. 方法1,在web.xml中
    <servlet><servlet-name>myServlet</servlet-name><servlet-class>com.hopu.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping>

在这里插入图片描述

2、方法2,类加注解

@WebServlet("/helloworld")
public class HelloWorldServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Hello World!!");}
}

Servlet的生命周期

Servlet的生命周期包含:

1)实例化,由服务器完成,是第一次被访问时执行一次

2)init() 初始化,是第一次被访问时执行一次

3)service() 服务,客户端每访问一次就会执行一次

4)destory() 销毁,服务器停止前执行一次


//loadOnStartup=-1 第一次访问时初始化  1 启动服务器时初始化
@WebServlet(value = "/helloworld",loadOnStartup = 1)
public class HelloWorldServlet extends HttpServlet {public HelloWorldServlet(){System.out.println("HelloWorldServlet实例化");}@Overridepublic void init() throws ServletException {System.out.println("HelloWorldServlet初始化");}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("HelloWorldServlet服务");super.service(req,resp);}@Overridepublic void destroy() {System.out.println("HelloWorldServlet销毁");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("Hello World!!");}
}

请求和响应对象

service方法的两个参数:

  • HttpServletRequest 请求对象
  • HttpServletResponse 响应对象

HttpServletRequest 请求对象

方法说明
String getParameter(String name)获得请求参数的值
setCharacterEncoding(String encode)设置请求编码
String getMethod()获得请求方法
String getRequestURI()获得请求地址
String getHeader(String name)获得请求头

HttpServletResponse 响应对象

方法说明
PrintWriter getWriter()获得响应输出流
setCharacterEncoding(String encode)设置响应编码
setContentType(String type) “text/html;charset=UTF-8”设置内容类型
    @Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求编码req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");//获得用户传的参数   helloworld?name=xxxx&age=20String name = req.getParameter("name");String age = req.getParameter("age");//获得请求地址String url = req.getRequestURI();//获得输出流PrintWriter writer = resp.getWriter();//修改响应的内容类型resp.setContentType("text/html;charset=UTF-8");//向浏览器输出文字内容writer.println("<h1>请求url:" + url + "</h1>");writer.println("<h1>Hello!!" + name + "--" + age + "</h1>");}

跳转方式

Servlet可以跳转到其它的服务器对象(Servlet/Jsp)

有两种方式:

1)请求转发

2)重定向

请求转发

//请求转发
req.getRequestDispatcher("/hello").forward(req,resp);

在这里插入图片描述

重定向

//重定向
resp.sendRedirect("/hello");

在这里插入图片描述

区别:

1)请求转发 URL不变,重定向 URL会改变

2)请求转发是服务器内部跳转,重定向是服务器外部跳转

3)请求转发客户端只请求一次,重定向需要请求两次,转发更快

4)请求转发可以携带数据跳转,重定向数据会丢失

在这里插入图片描述

在这里插入图片描述

相关文章:

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具&#xff0c;可以构建&#xff0c;打包&#xff0c;部署项目&#xff0c;还可以管理…...

分布式资源调度——yarn 概述(资源调度基本架构和高可用的实现)

此文章是学习笔记&#xff0c;图片均来源于B站&#xff1a;哈喽鹏程 yarn详细介绍 1、yarn 简介1.1 yarn的简介1.2 yarn 的基本架构1.3. yarn 的高可用 2、yarn 调度策略、运维、监控2.1 yarn 的调度策略2.1.1 FIFO scheduler(先进先出)2.1.2 容量调度2.1.3 公平调度 2.2 yarn…...

网页开发的http基础知识

请求方式-GET&#xff1a;请求参数在请求行中&#xff0c;没有请求体&#xff0c;如&#xff1a;/brand/findAll?nameoPPo&status1。GET请求大小在浏览器中是有限制的请求方式-POST&#xff1a;请求参数在请求体中&#xff0c;POST请求大小是没有限制的 HTTP请求&#xf…...

学习方法的进一步迭代————4

今天又在怀疑第二大脑的可靠程度 为什么呢? 还是因为自己没记住东西&#xff0c;感觉没学到东西。 其实自己知道大脑本就不应该用来存放知识而是用来思考知识&#xff0c;但是自己还是陷在里面了&#xff0c;我觉得其本质不是因为认知还不够&#xff0c;也不是因为还有点不适…...

数据科学家创建识别假图像的工具

Pixelator v2 是一款用于识别假图像的工具。它采用了全新的图像真实性技术组合&#xff0c;其能力超出了人眼所能看到的范围。 它能够以比传统方法更高的准确度识别图像中的细微差异&#xff0c;并且已被证明能够检测到小至 1 个像素的交替。 使用 SSIM 和 Pixelator v2 突出显…...

使用 GORM 与 MySQL 数据库进行交互来实现增删改查(CRUD)操作

1、安装 GORM 和 MySQL 驱动 新版本库是gorm.io/gorm go get -u gorm.io/gormgo get -u gorm.io/driver/mysql2、连接 MySQL 数据库 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm""log" )func main() {// 数据源名称 (DSN) 格式&a…...

Day2 生信新手笔记: Linux基础

一、基础知识 1.1 服务器 super computer 或 server 1.2 组学数据分析 组学数据&#xff1a;如基因组学、转录组学、蛋白质组学等&#xff1b; 上游分析&#xff1a;主要涉及原始数据的获取和初步处理&#xff0c;计算量大&#xff0c;消耗的资源较多&#xff0c;在服务器完…...

001集—— 创建一个WPF项目 ——WPF应用程序入门 C#

本例为一个WPF应用&#xff08;.NET FrameWork&#xff09;。 首先创建一个项目 双击xaml文件 双击xaml文件进入如下界面&#xff0c;开始编写代码。 效果如下&#xff1a; 付代码&#xff1a; <Window x:Class"WpfDemoFW.MainWindow"xmlns"http://schema…...

【C++】1___引用

一、基本语法 数据类型 &别名 原名 #include<iostream> using namespace std; int main(){int a 10;int &b a;cout<<"a"<<a<<endl; // a10cout<<"b"<<b<<endl;// a10b 20;cout<<"a…...

如何通过 JWT 来解决登录认证问题

1. 问题引入 在登录功能的实现中 传统思路&#xff1a; 登录页面时把用户名和密码提交给服务器服务器验证用户名和密码&#xff0c;并把检验结果返回给后端如果密码正确&#xff0c;则在服务器端创建 session&#xff0c;通过 cookie 把 session id 返回给浏览器 但是正常情…...

高效集成:将聚水潭数据导入MySQL的实战案例

聚水潭数据集成到MySQL&#xff1a;店铺信息查询案例分享 在数据驱动的业务环境中&#xff0c;如何高效、准确地实现跨平台的数据集成是每个企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例——将聚水潭的店铺信息查询结果集成到MySQL数据库中&#xff0c;以供BI…...

Jenkins-基于 JNLP协议的 Java Web 启动代理

在上一篇的基础配置上进行以下步骤 工作流程&#xff1a; 通过 JNLP 启动代理&#xff0c;客户端从 Jenkins 服务器上下载一个 agent.jar 文件。该文件启动时&#xff0c;代理程序通过 JNLP 协议连接到 Jenkins 主节点。一旦连接成功&#xff0c;代理节点就可以执行从主节点分…...

Qt数据库操作-QSqlQueryModel 的使用

QSqlQueryModel 功能概述 QSqlQueryModel 是 QSqlTableModel 的父类。QSqlQueryModel 封装了执行 SELECT 语句从数据库查询数据的功能&#xff0c;但是 QSqlQueryModel 只能作为只读数据源使用&#xff0c;不可以编辑数据。QSqlQueryModel 类的主要函数如下&#xff1a; 接口…...

C语言编程1.21波兰国旗问题

题目描述 桌上有 n ( 1 < n < 10000 ) 面小旗&#xff0c;一部分是白旗&#xff0c;一部分是红旗(波兰国旗由白色和红色组成)。唯一允许的操作是交换两面小旗位置。请你设计一个算法&#xff0c;用最少的交换操作将所有的白旗都置于红旗的之前。 输入格式 第一行为一个…...

如何利用微型5G网关为智慧无人矿车提供精确定位

随着5G、AI、物联网技术的发展和普及&#xff0c;越来越多行业正在加快生产、运营、管理的无人化、数字化与智能化&#xff0c;以适应当前我国“智慧、绿色、低碳”的新型发展模式需要。其中矿产业就是典型场景之一。针对矿山场景的智慧化、无人化转型&#xff0c;佰马提供基于…...

使用docker-compese部署SFTPGo详解

官网&#xff1a;SFTP & FTP as a Managed Service (SaaS) and On-premise 一、SFTPGo简介 SFTPGo 是一款功能强大的文件传输服务器软件。它支持多种协议&#xff08;SFTP、SCP、FTP/S、WebDAV、HTTP/S&#xff09;和多个存储后端。 借助 SFTPGo&#xff0c;您可以利用本地…...

Ajax基础总结(思维导图+二维表)

一些话 刚开始学习Ajax的时候&#xff0c;感觉很模糊&#xff0c;但是好像学什么都是这样的&#xff0c;很正常&#xff0c;但是当你学习的时候要持续性敲代码&#xff0c;边敲代码其实就可以理解很多了。然后在最后的总结&#xff0c;其实做二维表之后&#xff0c;就可以区分…...

Spring Task和WebSocket使用

在现代 Web 应用中&#xff0c;WebSocket 作为一种全双工通信协议&#xff0c;为实时数据传输提供了强大的支持。若要确保 WebSocket 在生产环境中的稳定性和性能&#xff0c;使用 Nginx 作为反向代理服务器是一个明智的选择。本篇文章将带你了解如何在 Nginx 中配置 WebSocket…...

微信小程序 本地调试和vconsole可以 但在体验上页面不请求数据

微信小程序页面不请求数据 本地调试和vconsole可以 但在体验版页面不请求数据&#xff0c;如遇到这类问题基本都是一样的解决办法 1、如何调试找到问题 首先要把小程序本地设置的不校验合法域名关掉&#xff0c;不然本地一直都是好的 然后通过本地真机调试打断点找到问题位…...

QT:将QTableWidget内容写入txt文件中

文章详请&#xff1a;最近在做手在眼上的标定&#xff0c;首先要采集机械臂数据和图像数据&#xff0c;我使用tablewidget进行机械臂数据的显示&#xff0c;最后的计算需要将机械臂位姿数据存储在txt文件中。 引用&#xff1a;Qt如何保存tableWidget数据&#xff1f;_qt table…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...