当前位置: 首页 > 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)请求转发可以携带数据跳转,重定向数据会丢失

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/495973.html

相关文章:

  • 分布式资源调度——yarn 概述(资源调度基本架构和高可用的实现)
  • 网页开发的http基础知识
  • 学习方法的进一步迭代————4
  • 数据科学家创建识别假图像的工具
  • 使用 GORM 与 MySQL 数据库进行交互来实现增删改查(CRUD)操作
  • Day2 生信新手笔记: Linux基础
  • 001集—— 创建一个WPF项目 ——WPF应用程序入门 C#
  • 【C++】1___引用
  • 如何通过 JWT 来解决登录认证问题
  • 高效集成:将聚水潭数据导入MySQL的实战案例
  • Jenkins-基于 JNLP协议的 Java Web 启动代理
  • Qt数据库操作-QSqlQueryModel 的使用
  • C语言编程1.21波兰国旗问题
  • 如何利用微型5G网关为智慧无人矿车提供精确定位
  • 使用docker-compese部署SFTPGo详解
  • Ajax基础总结(思维导图+二维表)
  • Spring Task和WebSocket使用
  • 微信小程序 本地调试和vconsole可以 但在体验上页面不请求数据
  • QT:将QTableWidget内容写入txt文件中
  • 前端面试题(六)
  • 「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历
  • Leetcode581. 最短无序连续子数组(HOT100)
  • HTML前端开发-- Flex布局详解及实战
  • 基于JWT跨语言开发分布式业务系统的挑战与实践:多语言协作的最佳方案
  • 二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(2)
  • 什么是 Kata Containers?
  • SpringMvc项目配置RabbitMq
  • shell编程(4)脚本与用户交互以及if条件判断
  • vue2组件跨层级数据共享provide 和 inject
  • springboot/ssm校园闲置物品交易系统ava大学生二手闲置交易平台web二手源码