Maven、JAVAWeb、Servlet

知识点目标

1、Maven
	Maven是什么
	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请求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("你访问了GET方法");
    }

    //处理post请求
    @Override
    protected 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 {

    @Override
    protected 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实例化");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("HelloWorldServlet初始化");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloWorldServlet服务");
        super.service(req,resp);
    }

    @Override
    public void destroy() {
        System.out.println("HelloWorldServlet销毁");
    }

    @Override
    protected 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”设置内容类型
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置请求编码
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        //获得用户传的参数   helloworld?name=xxxx&age=20
        String 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)请求转发可以携带数据跳转,重定向数据会丢失

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

26页PDF | 数据中台能力框架及评估体系解读(限免下载)

一、前言 这份报告详细解读了数据中台的发展历程、核心概念、能力框架及成熟度评估体系。它从阿里巴巴的“大中台&#xff0c;小前台”战略出发&#xff0c;探讨了数据中台如何通过整合企业内部的数据资源和能力&#xff0c;加速业务迭代、降低成本&#xff0c;并推动业务增长…

使用R的数据包快速获取、调用各种地理数据

数据一直是科学研究绕不开的话题&#xff0c;为了方便快捷的获取各种地理数据&#xff0c;许多R包被开发出来&#xff0c;今天介绍一些方便快捷的数据R包。 rnaturalearth 包使 Natural Earth 数据可用。自然地球特征包括 1&#xff1a;10m、1&#xff1a;50m 和 1&#xff1a…

docker的joinsunsoft/docker.ui修改密码【未解决】

docker的joinsunsoft/docker.ui修改密码 前言 这个挺遗憾的&#xff0c;个人能力不足。想修改密码是不可能了。 因为&#xff0c;系统的密码加密规则不知道。 目前了解到的内容是&#xff1a; 地址是&#xff1a;https://hub.docker.com/r/joinsunsoft/docker.ui服务是用go语…

启动SpringBoot

前言&#xff1a;大家好我是小帅&#xff0c;今天我们来学习SpringBoot 文章目录 1. 环境准备2. Maven2.1 什么是Maven2.2 创建⼀个Maven项⽬2.3 依赖管理2.3.1 依赖配置2.3.2 依赖传递2.3.4 依赖排除2.3.5 Maven Help插件&#xff08;plugin&#xff09; 2.4 Maven 仓库2.6 中…

SQL进阶——JOIN操作详解

在数据库设计中&#xff0c;数据通常存储在多个表中。为了从这些表中获取相关的信息&#xff0c;我们需要使用JOIN操作。JOIN操作允许我们通过某种关系&#xff08;如相同的列&#xff09;将多张表的数据结合起来。它是SQL中非常重要的操作&#xff0c;广泛应用于实际开发中。本…

JVM(JAVA虚拟机)内存溢出导致内存不足,Java运行时环境无法继续

1、先贴出服务最后打印出来的日志&#xff0c;意思就是给虚拟机分配的内存被用完了&#xff0c;没有可用的内存了&#xff0c;服务运行不了了&#xff0c;被动停服了。详细的日志记录在了/home/user/zx/tomcat/apache-tomcat-8.5.82/bin/hs_err_pid147951.log文件里。 Java Ho…

组成无重复数字的三位数

#include <stdio.h>int main() {int count 0;// 利用三重循环遍历所有可能的百位、十位、个位取值情况for (int bai 1; bai < 4; bai) {for (int shi 1; shi < 4; shi) {for (int ge 1; ge < 4; ge) {if (bai! shi && bai! ge && shi! ge) …

移远通信携手紫光展锐,以“5G+算力”共绘万物智联新蓝图

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办。作为紫光展锐重要的合作伙伴&#xff0c;移远通信应邀参会。 在下午的物联网生态论坛上&#xff0c;移远通信产品总监胡勇华作题为“5G与算力双擎驱动 引领智联新未来”的演讲&#xff0c;深度剖析了产业发展的趋…

Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书

本文目录 准备登陆云服务器安装 Java下载 tomcat 包配置防火墙浏览器访问 Tomcat 默认页面以服务的形式运行 Tomcat创建 Tomcat 用户和组创建 systemd 服务文件启动 tomcat 服务 Tomcat webapps 文件目录部署一个静态网站tomcat 的配置文件 将域名解析到服务器Tomcat 配置 SSL/…

【仓颉学习02】编译后运行报错:“由于找不到libcanjie-runtime.dll,无法继续执行代码。重新安装程序可能会解决此问题。”

敲了段《仓颉语言实践》&#xff08;张磊著&#xff09;书上的代码&#xff0c;如下&#xff1a; package test //coding:utf-8struct Employee{var name:Stringprivate var realSalary:Float64public Employee(name:String,realSalary:Float64){this.namenamethis.realSalary…

基于Linux操作系统的DNS服务器实验

实验6 DNS服务器 一、实验目的 熟练掌握DNS服务器的原理、配置过程与应用。 二、实验环境 硬件&#xff1a;PC电脑一台&#xff0c;网络正常。 配置&#xff1a;win10系统&#xff0c;内存大于8G &#xff0c;硬盘500G及以上。 软件&#xff1a;VMware、Ubuntu16.04。 三、…

Taro 鸿蒙技术内幕系列(三) - 多语言场景下的通用事件系统设计

基于 Taro 打造的京东鸿蒙 APP 已跟随鸿蒙 Next 系统公测&#xff0c;本系列文章将深入解析 Taro 如何实现使用 React 开发高性能鸿蒙应用的技术内幕 背景 在鸿蒙生态系统中&#xff0c;虽然原生应用通常基于 ArkTS 实现&#xff0c;但在实际研发过程中发现&#xff0c;使用 C…

万能门店小程序管理系统 onepic_uploade 任意文件上传漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

STM32-C语言基础知识

C语言基础知识 stdint.h简介 给寄存器某个位赋值 给位6赋值为1流程&#xff1a;先清0&#xff0c;再赋值 带参数的宏定义 建议使用do {…}while(0)来构造宏定义 条件编译 条件编译后面必须跟宏语句&#xff0c;如#if _LED_H 指针使用常见的2大问题 1、未初始化 2、越界使…

在Unity中实现物体动画的完整流程

在Unity中&#xff0c;动画是游戏开发中不可或缺的一部分。无论是2D还是3D游戏&#xff0c;动画都能为游戏增添生动的视觉效果。本文将详细介绍如何在Unity中为物体添加动画&#xff0c;包括资源的准备、播放组件的添加、动画控制器的创建以及动画片段的制作与调度。 1. 准备动…

windows安装itop

本文介绍 win10 安装 itop 安装WAMP集成环境前 先安装visual c 安装itop前需要安装WAMP集成环境(windowsApacheMysqlPHP) 所需文件百度云盘 通过网盘分享的文件&#xff1a;itop.zip 链接: https://pan.baidu.com/s/1D5HrKdbyEaYBZ8_IebDQxQ 提取码: m9fh 步骤一&#xff1…

【Linux打怪升级记 | 报错02】-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)

&#x1f5fa;️博客地图 &#x1f4cd;1、报错发现 &#x1f4cd;2、原因分析 &#x1f4cd;3、解决办法 &#x1f4cd;4、测试结果 1、报错发现 装好了CentOS操作系统&#xff0c;使用ssh远程登陆CentOS&#xff0c;出现如下告警信息&#xff1a; bash: 警告:setlocale…

前端-Git

一.基本概念 Git版本控制系统时一个分布式系统&#xff0c;是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景&#xff1a;多人开发管理代码&#xff1b;异地开发&#xff0c;版本管理&#xff0c;版本回滚。 Git 的三个区域&a…

原生html+css+ajax+php图片压缩后替换原input=file上传

当前大部分照片尺寸大于5MB&#xff0c;而50MB限制的PHP通常上传4MB左右 于是就需要压缩后上传&#xff0c;上5代码使用后筛选的代码 <?php if ($_SERVER[REQUEST_METHOD] POST) { $uploadDir uploads/ . date(Ymd) . /; if (!is_dir($uploadDir)) { mkdir($uploadDir, …

k8s集群部署metrics-server

1、Metrics Server介绍 Metrics Server 是集群级别的资源利用率数据的聚合器。从 Kubelets收集资源指标&#xff0c;并通过 Metrics API 在 Kubernetes apiserver 中公开它们&#xff0c;以供 Horizontal Pod Autoscaler 和Vertical Pod Autoscaler 使用。 Metrics API 也可以…