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
- 点击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,在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的项目管理工具,可以构建,打包,部署项目,还可以管理…...

分布式资源调度——yarn 概述(资源调度基本架构和高可用的实现)
此文章是学习笔记,图片均来源于B站:哈喽鹏程 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:请求参数在请求行中,没有请求体,如:/brand/findAll?nameoPPo&status1。GET请求大小在浏览器中是有限制的请求方式-POST:请求参数在请求体中,POST请求大小是没有限制的 HTTP请求…...
学习方法的进一步迭代————4
今天又在怀疑第二大脑的可靠程度 为什么呢? 还是因为自己没记住东西,感觉没学到东西。 其实自己知道大脑本就不应该用来存放知识而是用来思考知识,但是自己还是陷在里面了,我觉得其本质不是因为认知还不够,也不是因为还有点不适…...

数据科学家创建识别假图像的工具
Pixelator v2 是一款用于识别假图像的工具。它采用了全新的图像真实性技术组合,其能力超出了人眼所能看到的范围。 它能够以比传统方法更高的准确度识别图像中的细微差异,并且已被证明能够检测到小至 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 组学数据分析 组学数据:如基因组学、转录组学、蛋白质组学等; 上游分析:主要涉及原始数据的获取和初步处理,计算量大,消耗的资源较多,在服务器完…...

001集—— 创建一个WPF项目 ——WPF应用程序入门 C#
本例为一个WPF应用(.NET FrameWork)。 首先创建一个项目 双击xaml文件 双击xaml文件进入如下界面,开始编写代码。 效果如下: 付代码: <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. 问题引入 在登录功能的实现中 传统思路: 登录页面时把用户名和密码提交给服务器服务器验证用户名和密码,并把检验结果返回给后端如果密码正确,则在服务器端创建 session,通过 cookie 把 session id 返回给浏览器 但是正常情…...

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

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

Qt数据库操作-QSqlQueryModel 的使用
QSqlQueryModel 功能概述 QSqlQueryModel 是 QSqlTableModel 的父类。QSqlQueryModel 封装了执行 SELECT 语句从数据库查询数据的功能,但是 QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据。QSqlQueryModel 类的主要函数如下: 接口…...
C语言编程1.21波兰国旗问题
题目描述 桌上有 n ( 1 < n < 10000 ) 面小旗,一部分是白旗,一部分是红旗(波兰国旗由白色和红色组成)。唯一允许的操作是交换两面小旗位置。请你设计一个算法,用最少的交换操作将所有的白旗都置于红旗的之前。 输入格式 第一行为一个…...

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

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

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

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

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

QT:将QTableWidget内容写入txt文件中
文章详请:最近在做手在眼上的标定,首先要采集机械臂数据和图像数据,我使用tablewidget进行机械臂数据的显示,最后的计算需要将机械臂位姿数据存储在txt文件中。 引用:Qt如何保存tableWidget数据?_qt table…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...