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)请求转发可以携带数据跳转,重定向数据会丢失

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VLC 播放的音视频数据处理流水线搭建

VLC 播放的音视频数据处理流水线搭建 音视频流播放处理循环音频输出处理流水线VLC 用 input_thread_t 对象直接或间接管理音视频播放有关的各种资源,包括 Access, Demux, Decode, Output, Filter 等,这个类型定义 (位于 vlc-3.0.16/include/vlc_input.h) 如下: s…

浅谈edusrc挖掘技巧+信息收集新姿势

目录 1 前言 2 信息收集资产收集 2.1域名查询 2.2邮箱查询 2.3 ICP备案信息查询 3 综合资产查询姿势 3.1 FOFA鹰图 3.2企查查/小蓝本 3.3 黑客语法&#xff08;Google必应&#xff09; 4 统一身份认证登录绕过 4.1逻辑缺陷绕过 4.2爆破账户/前端绕过验证 5 纯手工信…

Ubuntu Linux操作系统

一、 安装和搭建 Thank you for downloading Ubuntu Desktop | Ubuntu &#xff08;这里我们只提供一个下载地址&#xff0c;详细的下载安装可以参考其他博客&#xff09; 二、ubuntu的用户使用 2.1 常规用户登陆方式 在系统root用户是无法直接登录的,因为root用户的权限过…

RDIFramework.NET CS敏捷开发框架 SOA服务三种访问(直连、WCF、WebAPI)方式

1、介绍 在软件开发领域&#xff0c;尤其是企业级应用开发中&#xff0c;灵活性、开放性、可扩展性往往是项目成功的关键因素。对于C/S项目&#xff0c;如何高效地与后端数据库进行交互&#xff0c;以及如何提供多样化的服务访问方式&#xff0c;是开发者需要深入考虑的问题。…

ProtoBuf快速上手(C++)

在快速上⼿中&#xff0c;会编写第⼀版本的通讯录 1.0。在通讯录 1.0 版本中&#xff0c;将实现&#xff1a; • 对⼀个联系⼈的信息使⽤ PB 进⾏序列化&#xff0c;并将结果打印出来。 • 对序列化后的内容使⽤ PB 进⾏反序列&#xff0c;解析出联系⼈信息并打印出来。 •…

PHP 方头像转为圆图

业务需要把创建海报上的用户头像由方形转为圆形&#xff0c;前端的样式设置不能用。 故采用GD的函数来对方图进行裁剪处理为圆图。 目录 裁剪函数 本地图片 远程图片 效果 参考文章 总结 裁剪函数 从网上找的一个裁剪图片的函数。 代码如下&#xff1a; /* * 将图片切…

代理IP地址的含义与设置指南‌

在数字化时代&#xff0c;互联网已经成为我们日常生活不可或缺的一部分。然而&#xff0c;在享受互联网带来的便利的同时&#xff0c;我们也面临着隐私泄露、访问限制等问题。代理IP地址作为一种有效的网络工具&#xff0c;能够帮助我们解决这些问题。本文将详细介绍代理IP地址…

基于Java Springboot个人财务APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

红队/白帽必经之路(16)——如何用Metasploit 在边路进行信息刺探及爆破登录[既然是红队,那就对自己狠一点!!!]

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二 ➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advan…

vue实现echarts饼图自动轮播

echarts官网&#xff1a;Examples - Apache ECharts echartsFn.ts 把echarts函数封装成一个文件 import * as echarts from "echarts";const seriesData [{"value": 12,"name": "过流报警"},{"value": 102,"name&qu…

C++之异常智能指针其他

C之异常&智能指针&其他 异常关于函数异常声明异常的优劣 智能指针auto_ptrunique_ptrshared_ptrweak_ptr定制删除器 智能指针的历史与boost库 特殊类单例模式饿汉和懒汉的优缺点 C四种类型转换CIO流结语 异常 try括起来的的代码块中可能有throw一个异常&#xff08;可…

混沌工程/混沌测试/云原生测试/云平台测试

背景 私有云/公有云/混合云等具有复杂&#xff0c;分布式&#xff0c;环境多样性等特点&#xff0c;许多特殊场景引发的线上问题很难被有效发现。所以需要引入混沌工程&#xff0c;建立对系统抵御生产环境中失控条件的能力以及信心&#xff0c;提高系统面对未知风险得能力。 …

Hive学习基本概念

基本概念 hive是什么&#xff1f; Facebook 开源&#xff0c;用于解决海量结构化日志的数据统计。 基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能 本质是将HQL转化为MapReduce程序。 Hive处理的数据存储在H…

数据分析流程中的Lambda架构,以及数据湖基于Hadoop、Spark的实现

文章目录 一、Lambda架构1、Lambda的三层架构2、简单解释&#xff1a;3、Lambda架构的优缺点 二、数据湖基于Hadoop、Spark的实现1、架构2、数据管理&#xff08;存储层的辅助功能&#xff09; 一、Lambda架构 1、Lambda的三层架构 Batch View&#xff08;批处理视图层&#…

算法笔记:力扣142.环形链表返回链表入口

该题目通俗来说就是需要返回节点的入口&#xff0c;这点与判断是否有环不同&#xff0c;有环是通过快慢指针的形式来判断&#xff0c;但当快慢指针相等的时候&#xff0c;此时的节点不一定是环的入口节点。所以这题需要注意。 关键API&#xff1a; map.putIfAbsent(key,value)…

医院管理系统

私信我获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 医院管理系统 摘要 随着信息互联网信息的飞速发展&#xff0c;医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求&#xff0c;创建了一个计…

说说Elasticsearch查询语句如何提升权重?

大家好&#xff0c;我是锋哥。今天分享关于【说说Elasticsearch查询语句如何提升权重&#xff1f;】面试题。希望对大家有帮助&#xff1b; 说说Elasticsearch查询语句如何提升权重&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&…

【Spring Security框架解析】

文章目录 Spring-security介绍Spring-security认证授权流程认证流程Security流程认证过滤器实现获取UserDetail信息 配置Security Spring-security介绍 Spring Security是一个功能强大且高度可定制的Java安全框架&#xff0c;用于保护基于Spring的应用程序。它提供了全面的安全…

[CISCN 2019华东南]Web11

[CISCN 2019华东南]Web11 给了两个链接但是都无法访问 这里我们直接抓包试一下 我们插入X-Forwarded-For:127.0.0.1 发现可以修改了右上角的IP地址&#xff0c;从而可以进行注入 {$smarty.version} 查看版本号 if标签执行PHP命令 {if phpinfo()}{/if} 查看协议 {if system(…

使用SpringBoot实现邮件发送(QQ邮箱为例)

使用SpringBoot实现邮件发送(QQ邮箱为例) 一、获取授权码 1.首先进入qq邮箱找到设置 2、账号栏目&#xff0c;找到POP3/SMTP服务 并开启服务 3、获取授权码 二、SpringBoot集成邮件发送 1.创建邮件发送服务类 package com.example.demo.service;import org.springframework…