JavaWeb学习笔记

JavaWeb

Java Web

1、基本概念

1.1、前言

web开发:

  • web,网页的意思, www.baidu.com
  • 静态web
    • html,css
    • 提供给所有人看的数据始终不会发生变化
  • 动态web
    • 淘宝,几乎是所有的网站
    • 提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同
    • 技术栈: Servlet/SP,ASP,PHP

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

1.2、web应用程序

web应用程序:可以提供浏览器访问的程序;

  • a.html. b.htm…多个web资源,这些web资源可以被外界访问,对外界提供服务;
  • 你们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上;
  • URL
  • 这个统一的web资源会被放在同一个文件夹下,web应用程序–>Tomcat:服务器
  • 一个web应用由多部分组成(静态web,动态web)
    • html,css,JavaScript
    • JSP,servlet
    • Java程序
    • jar包
    • 配置文件(Properties)

web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理;

1.3、静态web

  • *.htm*.html,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。
    在这里插入图片描述

  • 静态web存在的缺点
    • Web页面无法动态更新,所有用户看到的都是同一个页面

轮播图,点击特效:伪动态
JavaScript[实际开发中它用的最多]
VBScript

• 它无法和数据库交互(数据无法持久化,用户无法交互)

1.4、动态web

页面会动态展示:“Web的页面展示的效果因人而异”;
在这里插入图片描述
缺点

  • 假如服务器动态web资源出现了错误,我们需要重新编写我们的后台程序,重新发布;

优点:

  • Web页面可以动态更新,所有用户看到都不是同一个页面。
  • 它可以与数据库交互(数据持久化:注册,商品信息,用户信息……)
    在这里插入图片描述

2、web服务器

2.1、技术讲解

ASP:

  • 微软:国内最早流行的就是ASP;
  • 在HTML中嵌入了VB的脚本,ASP+COM;
  • 在ASP开发中,基本一个页面都有几千行的业务代码,页面极其混乱
  • 维护成本高
  • C#
  • IIS
<h1><h1/>
<h1><h1/>
<h1><h1/>
	<%
	System.out.println("hello")
	%>
<h1><h1/>
<h1><h1/>

PHP:

  • PHP开发速度很快,功能强大,跨平台,代码很简单(70%,WP)
  • 无法承载大访问量的情况(局限性)

JSP/Servlet :
B/S:浏览器和服务器
C/S:客户端和服务器

  • sun公司主推的B/S架构
  • 基于Java语言的(所有的大公司,或者一些开源组件,都是用Java写的)
  • 可以承载三高(高并发,高可用,高性能)问题带来的影响;
  • 语法像ASP,ASP–>JSP将强市场强度;

……

2.2、web服务器

服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息;

llS

微软的; ASP…,Windows中自带的

Tomcat在这里插入图片描述

面向百度编程:

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,最新的Servlet和JSP规范总是能在Tomcat 中得到体现,因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个Java初学web的人来说,它是最佳的选择。

Tomcat 实际上运行JSP页面和Servlet。Tomcat最新版本为10.0.14。
……

工作3-5年后,可以尝试手写Tomcat服务器;

下载Tomcat:

  1. 安装or解压
  2. 了解配置文件及目录结构
  3. 这个东西的作用

3、Tomcat

3.1、安装Tomcat

Tomcat官网: https://tomcat.apache.org/.

下载:
在这里插入图片描述在这里插入图片描述

3.2、Tomcat启动配置

文件夹的作用
在这里插入图片描述
启动和关闭Tomcat
在这里插入图片描述
访问测试:http://localhost:8080/
在这里插入图片描述

可能遇到的问题:

  1. Java环境变量没有配置
  2. 闪退问题:需要配置兼容性
  3. 乱码问题:配置文件中设置

3.3、配置

修改tomcat的默认访问端口号方法: https://blog.csdn.net/XQC_KKK/article/details/123196770.

可以配置启动的端口号

  • Tomcat的默认端口号为:8080
  • MySQL:3306
  • http:80
  • HTTPS:443
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

可配置主机的名称

  • 默认主机名为:http://localhost->127.0.0.1
  • 默认网站应用存放的位置为:webapps
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">

高难度面试题:

请你谈谈网站是如何进行访问的?

  1. 输入一个域名;回车

  2. 检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射;
    • 有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问
    • 没有:去访问DNS 服务器
    在这里插入图片描述

  3. 可配置一下环境变量

3.4、发布一个web网站

不会就先模仿

  • 将自己写的网站放到服务器(Tomcat)中指定的web文件夹(webapps)下就可以访问了

网站该有的结构

-- webapps:Tomcat服务器的web目录
	-ROOT
	-mystudy:网站的目录名
		-WEB-IF
			-classes:Java程序
			-lib:web应用所依赖的jar包
			-web.xml:网站配置文件
		-index.html默认的首页
		-static
			-css
				-style.css
			-js
			-img
		-……

4、Http

4.1、什么是HTTP

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。

  • 文本:html,字符串,~……
  • 超文本:图片,音乐,视频,定位,地图……
  • 80

HTTPS:安全的

  • 443

4.2、两个时代

  • http1.0
    • http/1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接
  • http2.0
    • http/1.1:客户端可以与web服务器连接,可以获得多个web资源。

4.3、http请求

  • 客户端—发请求(request)—服务器
    百度:
Request URL: https://www.baidu.com/		请求地址
Request Method: GET						get方法/post方法
Status Code: 200 OK						状态码:200
Remote (远程)Address: 36.152.44.96:443
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: private
Connection: keep-alive

1、请求行

  • 请求行中的请求方式:GET
  • 请求方式:Get,Post,HEAD,DELETE,PUT,TRACT
    • get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示内容,不安全,但高效
    • post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示内容,安全,但不高效

2、消息头

Accept:告诉浏览器,它所支持的数据类型
Accept-Encoding:支持哪种编码格式 GBK	UTF-8	GB2312 ISO8859-1
Accept-Language:告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection:告诉浏览器,请求完成是断开还是保持连接
HOST:主机……

4.4、http响应

  • 服务器—响应—客户端
    百度:
Cache-Control: private		缓存控制
Connection: keep-alive		连接:保持
Content-Encoding: gzip		编码
Content-Type: text/html;charset=utf-8		类型

1、响应体

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

2、响应状态码

200:请求响应成功 200
3xx:请求重定向

  • 重定向:你重新到我给你的新位置去;

4xx:找不到资源 404

  • 资源不存在;
    5xx:服务器代码错误 500 502:网关错误

常见面试题:
当你的浏览器中地址栏输入地址的一瞬间到页面能够展示回来,经历了什么?

5、Maven

我为什么要学习这个技术?

  • 在Javaweb开发中,需要使用大量的jar包,我们手动去导入;
  • 如何能够让一个东西自动帮我导入和配置这个jar包。
    由此,Maven诞生了!

5.1、Maven项目架构管理工具

我们目前用它来就是方便导入jar包的!
Maven的核心思想:约定大于配置

  • 有约束,不要去违反。

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

5.2、下载安装Maven

官网:https://maven.apache.org/.

在这里插入图片描述
下载完成后,解压即可;

5.3、配置环境变量

下载和配置maven的方法步骤:https://blog.csdn.net/XQC_KKK/article/details/123493754

5.4、配置阿里云镜像和本地仓库

https://blog.csdn.net/XQC_KKK/article/details/123495955

5.5、IDEA中使用Maven

https://blog.csdn.net/XQC_KKK/article/details/123500260

5.6、idea中每次都要重复配置maven问题解决

https://blog.csdn.net/XQC_KKK/article/details/123651231

5.7、maven默认web项目中的web.xml版本问题

https://blog.csdn.net/XQC_KKK/article/details/123651637

5.8、JavaWeb项目中,网页Servlet中文显示为问号

https://blog.csdn.net/XQC_KKK/article/details/123815968

6、Servlet

6.1、Servlet简介

  • Servlet就是sun公司开发动态web的一门技术
  • Sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:
    • 编写一个类,实现Servlet接口
    • 把开发好的ava类部署到web服务器中。

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

6.2、HelloServlet

Serlvet接口Sun公司有两个默认的实现类:HttpServlet,GenericServlet

  1. 构建一个普通的Maven项目,删掉里面的src目录,以后我们的学习就在这个项目里面建立Moudel;这个空的工程就是Maven主工程;
  2. 关于Maven父子工程的理解:
    父项目中会有
<modules>
	<module>servlet-01</module>
</modules>

子项目会有

<parent>
	<groupId>com.zwu</groupId>
	<artifactId>servlet-01</artifactId>
	<version>1.0-SNAPSHOT</version>
</parent>

父项目中的Java 子项目可以直接使用

son extends father
  1. Maven环境优化
    • 修改web.xml为最新的
    • 将maven的结构搭建完整
  2. 编写一个Servlet程序
    • 编写一个普通类
    • 实现Servlet接口,这里我们直接继承HttpServlet
public class HelloServlet extends HttpServlet {
    //由于get和post只是请求实现的不同方式,可以相互调用,业务逻辑都一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        System.out.println("进入doGet方法");
        PrintWriter writer = resp.getWriter();//响应流
        writer.print("Hello,Servlet被输出");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        resp.setContentType("text/html;charset=UTF-8");
        doGet(req, resp);
    }
}

  1. 编写Servlet的映射
    为什么要映射:我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务器中注册我们写的Servlet,还需要给他一个浏览器能够访问的路径;
    <!--    web.xml中是配置我们web的核心应用-->
    <!--    注册Servlet-->
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.zwu.servlet.HelloServlet</servlet-class>
    </servlet>
    <!--    一个Servlet对应一个Mapping:映射-->
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <!--        请求路径-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
  1. 配置Tomcat
    注意:配置项目发布的路径就可以了
  2. 启动测试

6.3、Servlet原理

Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:
在这里插入图片描述

6.4、Mapping问题

  1. 一个Servlet可以指定一个映射路径
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>
  1. 一个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-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello5</url-pattern>
</servlet-mapping>
  1. 一个Servlet可以指定通用映射路径
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
  1. 默认请求路径
<!--默认请求路径-->
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>
  1. 指定一些后缀或者前缀等等….
<!--可以自定义后缀实现请求映射
注意点,*前面不能加项目映射的路径
hello/sajdlkajda.qinjiang
-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.houzuiname</url-pattern>
</servlet-mapping>
  1. 优先级问题
    指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
<!--404-->
<servlet>
	<servlet-name>error</servlet-name>
	<servlet-class>com.zwu.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>error</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>

版权声明:本文为XQC_KKK原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。