JavaWeb学习(未完结)

一、基本概念

在 Java 中,动态web资源开发的技术统称为JavaWeb

1.1 动态Web网站简介

提供给所有人看到的数据始终会发生变化,每个人在不同时间,不同地点看到的信息个不相同

https-------443端口

http---------80端口

常用技术栈:

  • Servelt
  • JSP
  • ASP
  • PHP

1.2 web应用程序

可以提供浏览器访问的程序,web应用程序编写完毕后,若想提供给外界访问,需要用Tomcat服务器统一管理。

  • html、css、js
  • jsp、servlet
  • java程序
  • jar包
  • 配置文件(properties)

1.3 静态web

类似html这样的网页后缀,如果服务器上一直存在这些东西,我们就可以通过网络进行读取。

静态web存在的缺点:

  • web页面无法动态更新,只能编写JavaScript实现伪动态

  • 无法和数据库交互,数据无法持久化(注册、商品信息、用户信息),和用户无法交互;

1.4 动态web

页面会动态展示

动态web存在的缺点:

  • 如果加入服务器的动态web资源出现了错误,我们需要重新编写后台程序再发布,即停机维护

二、web服务器

C/S:客户端和服务器

B/S:浏览器和服务器

2.1 技术

  • ASP:在HTML中嵌入了VB的脚本,ASP+COM,缺点:业务代码多,页面混乱,维护成本高;
  • PHP:开发速度快,功能强大,支持跨平台,代码简单,缺点:无法承载大访问量的情况(局限性);
  • JSP/Servlet:sun公司主推的B/S架构,基于Java,可承载三高(高性能、高可用、高并发),语法与ASP相似。

2.2 应用服务器

作用:处理用户请求和提供用户响应信息。

IIS

IIS是指World Wide Web server服务,IIS是一种Web(网页)服务组件,专业的说,IIS可以赋予一部主机电脑一组以上的IP地址,而且还可以有一个以上的域名作为Web网站。

Tomcat

Tomcat 是由 Apache 软件基金会下属的 Jakarta 项目开发的一个 Servlet 容器,按照 Sun Microsystems 提供的技术规范开发出来,Tomcat 8 实现了对 Servlet 3.1 和 JavaServer Page 2.3(JSP)的支持,并提供了作为 Web 服务器的一些特有功能,如 Tomcat 管理和控制平台、安全域管理和 Tomcat 附加组件等。最新版本为9.0

2.3 安装 jdk8

程序员好冰

三、Tomcat

官网链接

3.1 安装 Tomcat9

程序员好冰

3.2 文件说明

image-20230209155240737
  • bin :启动、关闭的脚本文件
  • conf : 配置
  • lib : 依赖的jar包
  • logs : 日志
  • temp : 存放临时文件
  • webapps : 存放网站

3.3 启动并使用Tomcat

Tomcat路径 ------ > bin目录 -------> startup.bat 双击

在浏览器输入:localhost:8080

访问测试:http://localhost:8080

localhost(默认主机) 127.0.0.1

默认端口号:8080

  • mysql默认端口号:3306
  • http默认端口号:80
  • https默认端口号:443

3.4 关闭Tomcat

Tomcat路径 ------ > bin目录 -------> shutdown.bat 双击

3.5 可能遇到的问题

  1. Java环境变量没配置;
  2. 闪退问题,需要配置兼容性;
  3. 乱码问题,在startup.bat文件中配置。

3.6 配置

3.6.1 修改测试访问的网页地址

在conf目录下打开server.xml (服务器核心配置文件)

image-20230209160826908

修改默认端口号

image-20230209201502541

修改默认主机,如:将 localhost 改为 www. haobing. com

  • 第一步:将Host的name属性修改为 www. haobing. com

image-20230209201604371

  • 第二步:打开文件:C:\Windows\System32\drivers\etc\hosts

image-20230209202219933

  • 第三步:添加映射

    image-20230209202348957

3.6.2 修改测试访问的网页内容

在webapps目录下找到 ROOT 打开

image-20230209204234807

保留这个文件夹(WEB-INF),其它都可以修改

image-20230209204429359

3.6.3 修改存放网页的位置

Host下的APPBase属性就是网页的根目录

image-20230209203021614

webapps下的每个文件夹名,都是可以访问的

image-20230209204856693

3.7 网站是如何进行访问的?

  • 客户端请求网址;

  • 先查找客户端本机 host(C:\Windows\System32\drivers\etc\hosts ) 配置文件下有没有这个域名的映射;

    • 有,直接返回对应的IP地址,结束
    • 没有,继续下一步
  • 查找DNS服务器

    • 有,返回对应的IP地址,结束
    • 没有,访问出现错误 404

3.8 网站应有的结构

---webapps  //Tomcat服务器的web目录、
	-ROOT
	-haobing  //网站的目录名
	-WEB-INF  //存放网站程序
		-web.xml   //网站的配置文件
		-classes  //Java程序
		-lib   //web应用所依赖的jar包
	-index.jsp //默认的首页
	-static
		-css
		-js
		-img
	-...

四、Http 详解

一个简单的请求-响应协议

它指定了客户端可能发送给服务器什么样的信息以及得到什么样的响应

默认端口:80

Https:安全,默认端口:443

超文本传输协议,超文本:图片、音乐、视频、定位、地图…,运行在TCP之上

4.1 版本

  • http 1.0 :仅能够一次连接,客户端可以与web服务器连接后,只能获得一个web资源,之后断开连接;
  • http 1.1:能够进行多次连接,可以获得多个web资源。

4.2 Http请求

客户端------发请求-----服务器

请求 URL: https://www.baidu.com/
请求方法: GET/POST
状态代码: 200 OK
远程地址: 14.215.177.39:443
引用者策略: strict-origin-when-cross-origin
Accept:text/html
Accept-Encoding: gzip
Accept-Language: zh-CN   -------------->语言
Cache-Control: max-age=0
Connection: keep-alive

4.2.1 请求行

请求行中的请求方式:GET;

请求方式:GET、POST、HEAD、DELETE、PUT、TRACT

  • GET:一次请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但是高效;
  • POST:一次请求能够携带的参数没有限制,大小没有限制,不会会在浏览器的URL地址栏显示数据内容,安全,但是不高效。

4.2.2 消息头

Accept:   -------------->告诉浏览器它支持的数据类型
Accept-Encoding:    -------------->支持哪种编码格式:GBKUTF-8GB2312ISO8859-1
Accept-Language:    -------------->设置语言
Cache-Control:    -------------->缓存控制
Connection:    -------------->告诉浏览器,请求完成是断开还是保持连接
HOST:   -------------->主机

4.3 Http响应

服务器-----响应------客户端

Cache-Control:private    -------------->缓存控制
Connection: keep-alive   --------------->连接,保持连接,说明是http1.1
Content-Encoding: gzip   --------------->编码
Content-Type: text/html; charset=utf-8 ------>类型

4.3.1 响应体

Accept:   -------------->告诉浏览器它支持的数据类型
Accept-Encoding:    -------------->支持哪种编码格式:GBKUTF-8GB2312ISO8859-1
Accept-Language:    -------------->设置语言
Cache-Control:    -------------->缓存控制
Connection:    -------------->告诉浏览器,请求完成是断开还是保持连接
HOST:   -------------->主机
ReFresh:   -------------->告诉客户端多久刷新一次
Location:   -------------->让网页重新定位

4.3.2 响应状态码

  • 200:成功
  • 3**:请求重定向
  • 4**:找不到资源
  • 5**:服务器代码错误
  • 502:网关错误

五、Maven

官网链接

Maven的核心功能是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包

在JavaWeb开发中,需要手动导入jar包,Maven可以自动帮我们导入和配置jar包。

项目架构管理工具,核心思想:约定大于配置

Maven会规定好你该如何去编写我们的Java代码,必须要按照这个规范来。

5.1 安装Maven

程序员好冰

5.2 文件说明

image-20230210112653209

  • bin:执行文件
  • boot:启动需要的选项
  • conf:配置文件

5.3 修改镜像

Maven目录下---->conf------>settings.xml

镜像:方便下载使用

image-20230210113127034

image-20230210113157537

阿里云镜像官网

image-20230210113551709

找到Maven

image-20230210113613119

直接复制

image-20230210113752569

粘贴在这,即可

image-20230210113925965

5.4 配置环境变量

M2_HOME---------------bin目录

MAVEN_HOME--------bin上一级目录

image-20230210115203446

添加path

image-20230210115356258

查看是否配置成功--------------mvn -version

image-20230210115524542

5.5 创建本地仓库

在Maven目录下创建一个文件夹

image-20230210120751587

修改localRepository下的目录

image-20230210120646176

5.6 在IDEA中使用Maven

打开全局设置

image-20230210121855567

设置Maven

image-20230210121945384

更改:

  1. Maven版本
  2. settings.xml位置
  3. 本地仓库位置

image-20230210122237233

Apply

image-20230210122313712

创建新项目

image-20230210122353742

image-20230210122636845

点击创建

image-20230210122800172

image-20230210122832893

查看本地仓库,发现多出来的文件,说明成功

image-20230210123039045

成功!

5.7 模板创建和直接创建的对比

左边使用模板创建------------------------右边直接创建

image-20230210175523750

5.8 标记文件夹

约定大于配置思想

按照图中打开

image-20230210212325892

image-20230210212500014

照上修改后,对应的文件图标将会改变颜色

image-20230210212638392

5.9 在IDEA中配置Tomcat

编辑配置

image-20230210213011719

找到并选择本地Tomcat

image-20230210213210963

相关配置

image-20230210214145800

配置Tomcat HOME

image-20230210215331377

image-20230210215523383

配置Tomcat的安装路径

image-20230210215616375

成功,点击OK-----Apply

image-20230210215721480

指定一个文件夹名

image-20230210214248602

image-20230210214332672

虚拟路径映射

image-20230210214745910

点击运行

这里访问到的HelloWorld就是我们默认的index.jsp中的内容

image-20230210215944626

image-20230210220006144

Tomcat配置成功

5.10 Maven侧边栏的说明

image-20230210221445515

5.11 pom文件分析

<!--Maven版本和头文件-->
<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 https://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

<!--  这里就是我们刚才配置的GAV-->
  <groupId>org.example</groupId>
  <artifactId>javaweb-01-maven</artifactId>
<!--  项目的打包方式:
        1.jar-Java应用;
        2.war-JavaWeb应用-->
  <packaging>war</packaging>
<!--  版本-->
  <version>1.0-SNAPSHOT</version>

  <name>javaweb-01-maven Maven Webapp</name>

  <url>https://maven.apache.org</url>
<!--  配置-->
  <properties>
      <!--项目的默认构建编码-->
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

<!--  项目依赖-->
  <dependencies>
<!--    项目具体依赖的jar包文件-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
  </dependencies>
<!--  项目构建的插件-->
  <build>
    <finalName>javaweb-01-maven</finalName>
  </build>
</project>

Maven的 JAR 包仓库

image-20230211143702405

Maven的强大之处在于:它会帮你导入一个JAR包所依赖的其他JAR包

5.12 约定大于配置思想的缺点

Maven由于它的约定大于配置的思想,当我们编写的配置文件不符合规范的时候,将会无法导出或者生效

例如:在java目录(本应该放class文件)下,存放xml文件或properties文件

解决方案

链接一

链接二

在build中配置resources,来防止资源导出失败的问题

<build>
      <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.xml</exclude>
             </excludes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

Maven中的目录树

Maven中jar包的一些结构体系

image-20230211123619825

5.13 更改webapp版本

替换为webapp4.0版本,和Tomcat一致

原始版本:webapp2.3

image-20230211150350752

找到:Tomcat安装目录-------webapps-------ROOT-------WEB-INF-------web.xml

image-20230211150528638

image-20230211150559155

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
</web-app>

将上面的内容替换到WEB-INF下的web.xml中,全部替换

image-20230211150654433

替换后…

image-20230211150816502

六、Servlet

6.1 Servlet简介

简介链接:Servlet 是 Sun 公司推出的一种基于 Java 的动态网站开发技术。

编写 Servlet 代码需要遵循 Java 语法,一个 Servlet 程序其实就是一个按照 Servlet 规范编写的 Java 类。Servlet 程序需要先编译成字节码文件(.class文件),然后再部署到服务器运行。

Sun公司在这些API中提供一个叫Servlet的接口,如果你想开发一个Servlet程序,需要完成两个步骤:

  • 编写一个类,实现Servlet接口
  • 把开发好的Java类部署到web服务器中

实现了Servlet接口的Java程序叫做Servlet

6.2 使用Servlet

创建一个普通的Maven项目,并将src目录删除

image-20230211160216670

在pom.xml中添加项目依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
    </dependency>
</dependencies>

找到Maven仓库:maven-repo\javax\servlet,Maven会自动下载如下文件:

image-20230211160703324

创建子模块

image-20230211161319196

image-20230211161516162

父子项目

image-20230211161847774

父项目中的pom.xml

image-20230211161952849

子项目中

image-20230211162051344

父项目中的 JAR 包子项目可以直接使用,反过来不行-------------多态

son extends father {}

更换web.xml中的webapp版本

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
</web-app>

编写Servlet程序

6.2.1 编写Java文件

java—package

image-20230211162725083

包名规范

image-20230211162941810

class文件

image-20230211163037367

image-20230211163108181

Servletvoid service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
GenericServletpublic abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
HttpServletimage-20230211164530623
HelloServlet(我们创建的类)我们需要进行重写

重写doGet()和doPost()方法

快捷键:alt + insert

image-20230211164756588

由于get或者post只是请求实现的方式不同,因此可以互相调用,业务逻辑都一样

package com.haobin.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进入doGet方法");
        PrintWriter writer = resp.getWriter();
        writer.print("Hello,Serlvet!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

6.2.2 编写Servlet映射

为什么需要映射?

我们编写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们要在web服务器中注册我们编写的Servlet,还需要给它一个浏览器能够访问的路径

在web.xml文件下

image-20230211170008073

mapping-----映射

image-20230211170253491

6.2.3 配置Tomcat

编辑配置

image-20230210213011719

找到并选择本地Tomcat

image-20230210213210963

相关配置

image-20230210214145800

配置Tomcat HOME

image-20230210215331377

image-20230210215523383

配置Tomcat的安装路径

image-20230210215616375

成功,点击OK-----Apply

image-20230210215721480

指定一个文件夹名

image-20230210214248602

image-20230210214332672

虚拟路径映射

image-20230210214745910

点击运行

这里访问到的HelloWorld就是我们默认的index.jsp中的内容

image-20230210215944626

image-20230210220006144

Tomcat配置成功

6.2.4 运行

生成的target文件夹

image-20230211170930431

网页显示

image-20230211171050812

image-20230211171112181

映射请求逻辑

image-20230211171413233

6.3 Servlet运行原理

Servlet是由Web服务器调用的,web服务器在收到浏览器请求之后,会进行如下过程:

image-20230227171229506

6.4 Mapping

  • 一个Servlet可以指定一个映射路径
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
  • 一个Servlet可以指定多个映射路径
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello3</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello4</url-pattern>
</servlet-mapping>
  • 一个Servlet可以指定通用映射路径(*可以包括任何东西,包括为空的情况)
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello/*</url-pattern>
</servlet-mapping>

说在最后📝

​ ✍创作不易,如果觉得文章写得还可以的话,就不要吝啬你的 👍 啦~ ✍


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值